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文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...
随机推荐
- Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...
- The Cheap KD 10 design is not too far of a departure
Kevin Durant's Cheap KD 10 have to do with to determine the greatest spotlight they have seen around ...
- 启动secondarynamenode时报错
环境: mac系统 + hadoop2.6.0-cdh5.7.0伪分布式 问题一: 在启动hdfs的secondarynamenode时,报错. 正常情况: sumengdeMacBook-Pro: ...
- 移动端web开发 尽量哪些标签 常用标签及注意事项
H5手机移动端WEB开发资源整合 常用的标签及注意事项: https://blog.csdn.net/u012118993/article/details/56023399 移动前端不得不了解的htm ...
- SqlHelper简单实现(通过Expression和反射)9.Sql表述对象SqlSession
此类是整个SqlHelper的另一个核心,基本思想就是通过EntityHelper,ObjectHelper和ExpressionHelper获取拼接Select语句的全部元素,拼接出完整Select ...
- 优化netbeans启动速度
NetBeans优化的目的是提高NetBeans的启动速度和运行速度.下面介绍的NetBeans优化技巧是在版本6.0beta2上的优化.经过实验,大大提高了NetBeans的启动速度. 1,修改英文 ...
- ABP官方文档翻译 1.5 多租户
多租户 什么是多租户? 数据库和部署架构 多部署-多数据库 单部署-多数据库 单部署-单数据库 单部署-混合数据库 多部署-单/多/混合数据库 ABP的多租户 启用多租户 租主和租户 会话 决定当前租 ...
- FFmpeg 入门(2):输出视频到屏幕
本文转自:FFmpeg 入门(2):输出视频到屏幕 | www.samirchen.com SDL 我们这里使用 SDL 来渲染视频到屏幕.SDL 是 Simple Direct Layer 的缩写, ...
- 同时执行2条不同sql
select * from a: select *from b; 用分号结束.
- Windos 系统网络连接 调优
1.运行进入注册表:regedit 2.进入注册表指定路径 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters ...