Python批量修改图片格式和尺寸
Python批量修改图片格式和尺寸
备注:
1.导入了PIL库,是处理图片用的,很强大;
2.导入了的win32库,是判断隐藏文件用的,我们的项目需要删除隐藏文件,不需要的可以直接找到删除。
3.导入send2trash库,是把删除的文件放进垃圾箱,而不是永久删除,这个我只是防止删除有用的文件而搞得,有点严谨了是吧,不需要的可以删掉啊。
4.我这个脚本是Python2.7编写的,但是在处理中文编码的时候非常恶心,尽管最后被我解决了,这个解决的方法,我随后会再单独写一篇,但是此刻我是建议大家不要用2.x版本的python了。据说3.x的版本的已经解决了编码的问题。希望大家听我的建议。
- #编码= utf-8的
- 导入 系统
- 导入 os,glob
- 导入 平台
- 导入 win32file,win32con
- 从 PIL 导入 图像
- 从 send2trash 导入 send2trash
- 重装(SYS)
- sys.setdefaultencoding('utf-8' )
- #new_width = 2048
- #width = int(raw_input(“width U want:”))
- #imgslist = glob.glob(路径+'/ *。*')
- ShuiPing = “水平”
- ShiZhuang = “矢状”
- GuanZhuang = “冠状”
- def Py_Log(_string):
- 打印“----” + _string.decode('utf-8' )+ “----”
- def is_windows_system():
- 返回“窗口” 在 platform.system()
- def is_hiden_file(file_Path):
- 如果 is_windows_system():
- fileAttr = win32file.GetFileAttributes(file_Path)
- 如果 fileAttr&win32con.FILE_ATTRIBUTE_HIDDEN:
- 返回True
- 返回False
- 返回False
- def remove_hidden_file(file_path):
- send2trash(FILE_PATH)
- 打印“删除隐藏的文件路径:” + file_path
- def astrcmp(str1,str2):
- 返回 str1.lower()== str2.lower()
- def resize_image(img_path):
- 尝试:
- mPath,ext = os.path.splitext(img_path)
- 如果 (astrcmp(ext,“. png ” ) 或astrcmp(ext,“.jpg” )):
- img = Image.open(img_path)
- (宽度,高度)= 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,质量= 100 )
- Py_Log(“图片尺寸修改为:” + str(new_width))
- 其他:
- Py_Log(“图片尺寸正确,未修改” )
- 其他:
- Py_Log(“非图片格式” )
- 除了 例外,e:
- 打印 e
- #改变图片类型
- def change_img_type(img_path):
- 尝试:
- img = Image.open(img_path)
- img.save('new_type.png' )
- 除了 例外,e:
- 打印 e
- #处理远程图片
- def handle_remote_img(img_url):
- 尝试:
- 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' )
- (宽度,高度)= img.size
- out = img.resize((200 ,height * 200 / width),Image.ANTIALIAS)
- out.save('remote_small.jpg' )
- 除了 例外,e:
- 打印 e
- def rename_forder(forder_path):
- Py_Log(“------------ rename_forder --------------------------” )
- names = os.path.split(forder_path)
- 尝试:
- 如果(UNICODE(热水瓶) 中 的Unicode(名称[ 1 ],'GBK' )):
- os.rename(forder_path,名称[ 0 ] + “\\”+“ 01 ”)
- Py_Log(名称[ 1 ] + “ - >” + “01” )
- 如果(unicode(石庄) in unicode(names [ 1 ],'gbk' )):
- os.rename(forder_path,名称[ 0 ] + “\\”+“ 02 ”)
- Py_Log(名称[ 1 ] + “ - >” + “02” )
- 如果(unicode(管庄) in unicode(names [ 1 ],'gbk' )):
- os.rename(forder_path,名称[ 0 ] + “\\”+“ 03 ”)
- Py_Log(名称[ 1 ] + “ - >” + “03” )
- 除了 例外,e:
- 打印 e
- def BFS_Dir(dirPath,dirCallback = None ,fileCallback = None ):
- 队列= []
- ret = []
- queue.append(dirPath);
- 而 len(队列)> 0 :
- tmp = queue.pop(0 )
- 如果(os.path.isdir(tmp)):
- ret.append(TMP)
- 对于 项目 在 os.listdir(TMP):
- queue.append(os.path.join(tmp,item))
- 如果 dirCallback:
- dirCallback(TMP)
- elif (os.path.isfile(tmp)):
- ret.append(TMP)
- 如果 fileCallback:
- fileCallback(TMP)
- 返回 RET
- def DFS_Dir(dirPath,dirCallback = None ,fileCallback = None ):
- stack = []
- ret = []
- stack.append(dirPath);
- 而 len(stack)> 0 :
- tmp = stack.pop(len(stack) - 1 )
- 如果(os.path.isdir(tmp)):
- ret.append(TMP)
- 对于 项目 在 os.listdir(TMP):
- stack.append(os.path.join(tmp,item))
- 如果 dirCallback:
- dirCallback(TMP)
- elif (os.path.isfile(tmp)):
- ret.append(TMP)
- 如果 fileCallback:
- fileCallback(TMP)
- 返回 RET
- def printDir(dirPath):
- 打印“dir:” + dirPath
- if (is_hiden_file(dirPath)):
- remove_hidden_file(dirPath)
- 其他:
- rename_forder(dirPath)
- def printFile(dirPath):
- 打印“文件:” + dirPath
- resize_image(dirPath)
- 返回True
- 如果 __name__ == ' __main__ ' :
- 而真:
- path = raw_input(“Path:” )
- new_width = int(raw_input(“width U want:” ))
- 尝试:
- b = BFS_Dir(path,printDir,printFile)
- Py_Log(“\ r \ n ********** \ r \ n” + “*********图片处理完毕*********” + “\ r \ n ********** \ r \ n“ )
- 除了:
- 打印“意外的错误:” ,sys.exc_info()
- raw_input('按回车键重新处理' )
Python批量修改图片格式和尺寸的更多相关文章
- Python 批量修改图片格式和尺寸
公司的一个项目要求把所有4096x4096的图片全部转化成2048x2048的图片,这种批量转换图片大小的软件网上很多,我的同事原来使用的美图看看的批量转换,但是稍微有点麻烦,每次还需要指定要转换的图 ...
- python批量修改图片名称
import os class BatchRename(): def rename(self): # windows环境 """ os.rename() 方法用于命名文件 ...
- python 批量修改图片大小
一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PI ...
- python 批量更换图片格式脚本
问题:将某文件下的所有jpg的图片更换为png的图片 简单的实现: # -*- coding:utf-8 -*- from os.path import splitext import glob fr ...
- python:批量修改文件名批量修改图片尺寸
批量修改文件名 参考博客:https://www.cnblogs.com/zf-blog/p/7880126.html 功能:批量修改文件名 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- 使用Adobe Photoshop CC 2015批量修改图片尺寸
最近在工作中遇到一个问题,当时客户给的图片尺寸与我要求的图片不符,由于图片非常的多,如果一张一张的修改,十分的麻烦,后来经过一位同事的指点,发现Adobe Photoshop CC 2015可以实现批 ...
- python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...
- 【faster-rcnn】训练自己的数据——修改图片格式、类别
修改图片格式 matlab代码 其实内部一些代码是用了rbg的fast-rcnn代码的. \datasets\VOCdevkit2007\VOCcode\VOCinit.m里面,查找'jpg',改成' ...
- 利用python批量修改word文件名的方法示例
利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...
随机推荐
- java 定时器实现
java工程中,不免遇到需要定时处理任务的需求,有如下两种方法: 1.使用java.util.TimerTask 2.使用Quartz 一.java.util.TimerTask Timer time ...
- HDU 1142 A Walk Through the Forest(Dijkstra+记忆化搜索)
题意:看样子很多人都把这题目看错了,以为是求最短路的条数.真正的意思是:假设 A和B 是相连的,当前在 A 处, 如果 A 到终点的最短距离大于 B 到终点的最短距离,则可以从 A 通往 B 处,问满 ...
- npm使用淘宝镜像
淘宝 npm 地址: http://npm.taobao.org/ 如何使用 有很多方法来配置npm的registry地址,下面根据不同情境列出几种比较常用的方法.以淘宝npm镜像举例: 1.临时使用 ...
- 关于js中的取值问题
像这样是获取不到值的,弹出的消息是 underfined:<html><style type="text/css">input { border: 1px ...
- Android开发环境配置到第一个程序所遇到的问题
1.安装顺序 先jdk,最后是1.7或1.8吧,配置环境变量:然后是sdk,配置环境变量:sdk安装之后即可以通过SDK Manager进行其他包的安装. 2.sdk及其他包的安装,以一张图表示,对于 ...
- [转] 把eclipse设置为黑色主题 方式二
首先,废话不多说,给大家看一下我设置成黑色主题后的效果: 至于怎么达到这个效果呢,首先是中间的编辑区. 从我的云盘里下载压缩包,解压到eclipse目录的dropins文件夹下,你就会有各种各样的编辑 ...
- MLlib1.6指南笔记
MLlib1.6指南笔记 http://spark.apache.org/docs/latest/mllib-guide.html spark.mllib RDD之上的原始API spark.ml M ...
- C++ 第三十三天
Ⅰ.类成员函数的隐式参数 T *const this . 就是说对于某个类的成员函数 returnType function() 的真实面目其实是这样的 returnType function(T * ...
- thinkerCMS是一款thinkphp写的微型cms框架可以参考下
http://www.thinkphp.cn/code/1764.html thinkphp官网thinkercms介绍 http://cms.thinke ...
- mouseover 有一个多次触发的问题
mouseover 有一个多次触发的问题 需要注意 由于浏览器的冒泡行为.造成如果在一个DIV元素上同时定义了mouseover,mouseout的时候,当鼠标移动到DIV中的child子元素的时候, ...