用途都在各个函数名称之前的注释上了,用途函数注释上了,[Python]代码#
用途都在各个函数名称之前的注释上了,用途函数注释上了,[Python]代码#
[Python]代码
# -*- coding: utf-8 -*-import numpyimport Imageimport osimport sys#中文字符集def encodeChinese(msg): type = sys.getfilesystemencoding() return msg.decode('UTF-8').encode(type)#检测图片类型def check_imgMode(filedir): try: img = Image.open(filedir) return img.mode except: errInfo = encodeChinese('这不是图片: ') + str(filedir) + '\n' print errInfo return errInfo#检测文件后缀,返回文件后缀def check_fileMode(filedir): fPostfix = os.path.splitext(filedir)[1] return fPostfix#打开一个图片文件def open_imgFile(filedir): im = Image.open(filedir) im.load() return im#输入被检测文件夹路径def input_rootdir(): print encodeChinese('请输入要检测的文件夹路径: ') rootdir = raw_input() print rootdir return rootdir#输入错误日志路径def input_logdir(): print encodeChinese('请输入错误日志路径: ') logdir = raw_input() print logdir return logdir#输入处理完成图片保存路径def input_targetdir(): print encodeChinese('请输入处理完成后文件保存路径: ') targetdir = raw_input() return targetdir#检测文件大小def check_fileSize(filedir): try: f = open(filedir,'rb') f.seek(0,2) fSize = f.tell() #print 'fSize: ' + str(type(fSize)) #f.close() return f.tell() except: print encodeChinese('获取文件大小时发生错误')#检测图片alpha通道def check_png_alpha(rootdir,errLogDir): errFile = open(errLogDir,'w') for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: fName = filename filename = rootdir + os.sep + filename if check_fileMode(filename) == '.png': if check_imgMode(filename) == 'RGBA': print filename try: img = open_imgFile(filename) except: filename = parent + os.sep + fName print encodeChinese('这不是图片: ') + str(filename) +'\n' errFile.write(encodeChinese('这不是图片: ') + '\n') errFile.write(str(filename) + '\n') errFile.write('\n') alpha = img.split()[3] arr = numpy.asarray(alpha) count = 0 for i in range(0,img.size[0]-1): for j in range(0,img.size[1]-1): if arr[j][i] < 128: count += 1 if count > 10: break if count > 10: filename = parent + os.sep + fName print str(filename) + ' is have alpha,count = ' + str(count) else: filename = parent + os.sep + fName errFile.write(encodeChinese('这张图片约等于没有alpha通道: ') + '\n') errFile.write(str(filename) + '\n') errFile.write('\n') else: filename = parent + os.sep +fName errFile.write(encodeChinese('虽然这是一张png图片,但是它没有alpha通道: ') + '\n') errFile.write(str(filename) + '\n') errFile.write('\n') else: filename = parent + os.sep +fName errFile.write(encodeChinese('这不是png格式的文件: ') + '\n') errFile.write(str(filename) + '\n') errFile.write('\n') errFile.close()#检测图片类型(类型,大小,分辨率)def check_texture(rootdir,errLogDir): errFile = open(errLogDir,'w') for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: fName = filename filename = rootdir + os.sep + filename if (check_fileMode(filename) == '.jpg' or check_fileMode(filename) == '.png'): fSize = check_fileSize(filename) if(fSize / 1024 > 1024): filename = parent + os.sep + fName print rootdir errFile.write(filename+'\n') err_sizeFile=encodeChinese('文件大小超过1024') errFile.write(err_sizeFile + ': ' + str(check_fileSize(filename)/1024) +'\n') errFile.write('\n') elif(fSize / 1024 <= 1024): img = open_imgFile(filename) imgSize = img.size if(imgSize[0] % 64 != 0 or imgSize[1] % 64 != 0): print parent print filename print img.size value=parent+os.sep+fName errSize=img.size errFile.write(value+'\n') err_bigFile=encodeChinese('文件分辨率错误') errFile.write(err_bigFile)#'the image so big: ') errFile.write(str(errSize)+'\n') errFile.write('\n') else: outPath=parent+os.sep+fName errFile.write(outPath+'\n') err_File=encodeChinese('文件格式不正确') errFile.write(err_File)#'the File err') errFile.write('\n') print fName errFile.close()#自动裁剪贴图,扩边(只是png格式贴图)def autoCutImage(rootdir,targetDir): for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: fName = filename filename = rootdir+os.sep+filename fPostfix = check_fileMode(filename) value_r = 0 value_g = 0 value_b = 0 count = 0 if(fPostfix =='.png'): #os.chmod(filename,stat.S_IWRITE) img = open_imgFile(filename) if img.mode == 'RGBA': rgba = encodeChinese('这张是RGBA图片') print rgba img.load() data = img.getdata() data_a = list() for item in data: if(item[3] < 128): data_a.append((item[0],item[1],item[2],0)) else: data_a.append((item[0],item[1],item[2],255)) for item in data: if(item[3])== 255: count += 1 value_r += item[0] value_g += item[1] value_b += item[2] value_r = value_r / count value_g = value_g / count value_b = value_b / count print value_r print value_g print value_b print count newdata = list() for item in data_a: if item[3] == 0: newdata.append((value_r,value_g,value_b,item[3])) #print newdata[0] elif item[3] == 255: newdata.append((item[0],item[1],item[2],item[3])) #print newdata[0] #print data_a print len(newdata) img.putdata(newdata) try: img.save(targetDir + os.sep+fName); except: print encodeChinese('保存文件出现错误,请检查被保存的文件夹是否存在,亦或是其它引起的错误') print str(fName) + ' save' #如果它没有alpha通道 elif img.mode == 'RGB': print 'RGB' img.load() #转换出一个alpha通道 img = img.convert('RGBA') datas = img.getdata() mydata = list() newdata = list() for item in data: if item[0] == 0 and item[1] == 0 and item[2] == 0: mydata.append((item[0],item[1],item[2],0)) else: mydata.append((item[0],item[1],item[2],255)) for item in data: if item[3] == 255: count += 1 value_r += item[0] value_g += item[1] value_b += item[2] value_r = value_r / count value_g = value_g / count value_b = value_b / count for item in mydata: newdata.append((value_r,value_g,value_b,item[3])) img.putdata(newdata) try: img.save(targetDir + os.sep + fName) except: print encodeChinese('保存文件出错,请检查被保存文件夹路径是否正确,亦或是其他原因导致') #如果它不是png格式 elif(fPostfix == '.jpg'): print '\n' print fName + encodeChinese(' 是一张JPG图片,请用工具4进行裁剪') else: not_png = encodeChinese('这张贴图既不是png也不是jpg,这张贴图的名字是: ') print not_png + fName#jpg格式图片裁剪def jpgCutImage(rootdir,targetDir): for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: fName = filename; print fName filename = rootdir + os.sep + filename fPostfix = check_fileMode(filename) #fn,fPostfix = os.path.splitext(filename) if(fPostfix == '.jpg'): print fName + encodeChinese(' 请按照红绿蓝顺序依次输入背景色参数,\ 我们将按照您输入的数值进行裁剪:') + '\n' try: print encodeChinese('红色的参数(0~255): ') red = int(raw_input()) except: print encodeChinese('您输入的不是数字,请重新输入红色参数(0~255): ') red = int(raw_input()) try: print encodeChinese('绿色的参数(0~255): ') green = int(raw_input()) except: print encodeChinese('您输入的不是数字,请重新输入绿色参数(0~255): ') green = int(raw_input()) try: print encodeChinese('蓝色的参数(0~255): ') bule = int(raw_input()) except: print encodeChinese('您输入的不是数字,请重新输入蓝色参数(0~255): ') bule = int(raw_input()) item = list() item.append((red,green,bule)) print item[0][0] print item[0][1] print item[0][2] print 'item: ' + str(item) + '\n' img = Image.open(filename) #img = img.convert('RGBA') newImg = Image.new('RGBA',img.size) print 'newImg.mode: ' + str(newImg.mode) imgData = img.getdata() newData = list() for newItem in imgData: if(newItem[0] == item[0][0] and newItem[1] == item[0][1] and newItem[2] == item[0][2]): newData.append((newItem[0],newItem[1],newItem[2],0)) else: newData.append((newItem[0],newItem[1],newItem[2],255)) #print encodeChinese('不相等的情况: ') + str(newItem) + '\n' print 'hello' newImg.putdata(newData) fName,fpost = fName.split('.') print 'fName ' + str(fName) fpost =fName + '.png' print 'fpost :' + str(fpost) newImg.save(targetDir + os.sep + fpost) try: alpha = newImg.split()[3] print 'alpha' except: print 'err'#选择工具def select_tools(): select = raw_input() if select == '1': rootdir = input_rootdir() errLogDir = input_logdir() check_png_alpha(rootdir,errLogDir) elif select == '2': rootdir = input_rootdir() errLogDir = input_logdir() check_texture(rootdir,errLogDir) elif select == '3': rootdir = input_rootdir () targetDir = input_targetdir() autoCutImage(rootdir,targetDir) elif select =='4': rootdir = input_rootdir() targetDir = input_targetdir() jpgCutImage(rootdir,targetDir) elif select =='5': print encodeChinese('谢谢您的使用^_^') exit() else: print encodeChinese('您输入的数字有误,请您重新启动程序....')#显示菜单def menuDisplay(): print encodeChinese('按照数字选择工具,并根据提示输入相应参数: ') print encodeChinese('1.检测图片alpha通道') print encodeChinese('2.检测图片格式') print encodeChinese('3.根据alpha通道裁剪贴图') print encodeChinese('4.裁剪JPG图片贴图') print encodeChinese('5.退出') select_tools()def main(): print '\n' print encodeChinese('#################################################################') print encodeChinese('#####################欢迎使用图片处理工具########################') print encodeChinese('#################################################################') print '\n' menuDisplay()main()
相关内容
- Python 读取纯真IP数据库,pythonip数据库,ip.py#!/usr/
- DiscuzRobot - Discuz!论坛的机器人程序,实现了登录,签到
- 调用Windows API锁定计算机,调用windowsapi锁定,[Python]代码
- 检测图片格式,,[Python]代码#
- 金山快盤自動簽到 python 3.2,動簽,[Python]代码#!
- 使用HTML/CSS/JS开发桌面程序(基于QWebkit),cssqwebkit,s
- 从百度下载MP3歌词并把歌词设置在MP3文件中,以便在
- 最新python3 的金山快盘登录签到多功能 学习好帮手,
- 使用Python画三维函数图象,python画函数图象,[Python]代码
- 太极匀手,马步必备,太极匀马步必备,[Python]代码#!
评论关闭