本文实例为大家分享了python批量处理图片的具体代码,供大家参考,具体内容如下
公司的一个项目要求把所有4096x4096的图片全部转化成2048x2048的图片,这种批量转换图片大小的软件网上很多,我的同事原来使用的美图看看的批量转换,但是稍微有点麻烦,每次还需要指定要转换的图片的输入路径和输出路径,而且每次都只能处理一个文件夹,很繁琐,于是我想到了万能的Python,然后写了一个脚本来批量处理图片,同一个根目录下的所有文件夹的子文件等的图片全部会处理掉。
代码中还加入了很多的异常捕获机制和提示,希望对大家有帮助。
备注:
1.导入了PIL库,是处理图片用的,很强大;
2.导入了win32库,是判断隐藏文件用的,我们的项目需要删除隐藏文件,不需要的可以直接找到删除。
3.导入send2trash库,是把删除的文件放进垃圾箱,而不是永久删除,这个我只是防止删除有用的文件而搞得,有点严谨了是吧,不需要的可以删掉啊。
4.我这个脚本是Python2.7编写的,但是在处理中文编码的时候非常恶心,尽管最后被我解决了,这个解决的方法,我随后会再单独写一篇,但是此刻我是建议大家不要用2.x版本的python 了。据说3.x的版本的已经解决了编码的问题。希望大家听我的建议。
#coding=utf-8 import sys import os, glob import platform import win32file,win32con from PIL import Image from send2trash import send2trash reload(sys) sys.setdefaultencoding('utf-8') #new_width =2048 #width =int(raw_input("the width U want:")) #imgslist = glob.glob(path+'/*.*') ShuiPing="水平" ShiZhuang="矢状" GuanZhuang="冠状" def Py_Log(_string): print "----"+_string.decode('utf-8')+"----" def is_windows_system(): return 'Windows' in platform.system() def is_hiden_file(file_Path): if is_windows_system(): fileAttr = win32file.GetFileAttributes(file_Path) if fileAttr & win32con.FILE_ATTRIBUTE_HIDDEN : return True return False return False def remove_hidden_file(file_path): send2trash(file_path) print "Delete hidden file path:"+file_path def astrcmp(str1,str2): return str1.lower()==str2.lower() def resize_image(img_path): try: mPath, ext = os.path.splitext(img_path) if (astrcmp(ext,".png") or astrcmp(ext,".jpg")): img = Image.open(img_path) (width,height) = img.size if(width != new_width): new_height = int(height * new_width / width) out = img.resize((new_width,new_height),Image.ANTIALIAS) new_file_name = '%s%s' %(mPath,ext) out.save(new_file_name,quality=100) Py_Log("图片尺寸修改为:"+str(new_width)) else: Py_Log("图片尺寸正确,未修改") else: Py_Log("非图片格式") except Exception,e: print e #改变图片类型 def change_img_type(img_path): try: img = Image.open(img_path) img.save('new_type.png') except Exception,e: print e #处理远程图片 def handle_remote_img(img_url): try: request = urllib2.Request(img_url) img_data = urllib2.urlopen(request).read() img_buffer = StringIO.StringIO(img_data) img = Image.open(img_buffer) img.save('remote.jpg') (width,height) = img.size out = img.resize((200,height * 200 / width),Image.ANTIALIAS) out.save('remote_small.jpg') except Exception,e: print e def rename_forder(forder_path): Py_Log("------------rename_forder--------------------------") names = os.path.split(forder_path) try: if(unicode(ShuiPing) in unicode(names[1],'gbk')): os.rename(forder_path,names[0]+"\\"+"01") Py_Log(names[1]+"-->"+"01") if(unicode(ShiZhuang) in unicode(names[1],'gbk')): os.rename(forder_path,names[0]+"\\"+"02") Py_Log(names[1]+"-->"+"02") if(unicode(GuanZhuang) in unicode(names[1],'gbk')): os.rename(forder_path,names[0]+"\\"+"03") Py_Log(names[1]+"-->"+"03") except Exception,e: print e def BFS_Dir(dirPath, dirCallback = None, fileCallback = None): queue = [] ret = [] queue.append(dirPath); while len(queue) > 0: tmp = queue.pop(0) if(os.path.isdir(tmp)): ret.append(tmp) for item in os.listdir(tmp): queue.append(os.path.join(tmp, item)) if dirCallback: dirCallback(tmp) elif(os.path.isfile(tmp)): ret.append(tmp) if fileCallback: fileCallback(tmp) return ret def DFS_Dir(dirPath, dirCallback = None, fileCallback = None): stack = [] ret = [] stack.append(dirPath); while len(stack) > 0: tmp = stack.pop(len(stack) - 1) if(os.path.isdir(tmp)): ret.append(tmp) for item in os.listdir(tmp): stack.append(os.path.join(tmp, item)) if dirCallback: dirCallback(tmp) elif(os.path.isfile(tmp)): ret.append(tmp) if fileCallback: fileCallback(tmp) return ret def printDir(dirPath): print "dir: " + dirPath if(is_hiden_file(dirPath)): remove_hidden_file(dirPath) else: rename_forder(dirPath) def printFile(dirPath): print "file: " + dirPath resize_image(dirPath) return True if __name__ == '__main__': while True: path = raw_input("Path:") new_width =int(raw_input("the width U want:")) try: b = BFS_Dir(path , printDir, printFile) Py_Log ("\r\n **********\r\n"+"*********图片处理完毕*********"+"\r\n **********\r\n") except: print "Unexpected error:", sys.exc_info() raw_input('press enter key to rehandle')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]