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 send2trashreload(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 Falsedef remove_hidden_file(file_path):send2trash(file_path)print "Delete hidden file path:"+file_pathdef 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.sizeif(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.sizeout = img.resize((200,height * 200 / width),Image.ANTIALIAS)out.save('remote_small.jpg')except Exception,e:print edef 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 edef 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 retdef 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 retdef printDir(dirPath):print "dir: " + dirPathif(is_hiden_file(dirPath)):remove_hidden_file(dirPath)else:rename_forder(dirPath)def printFile(dirPath):print "file: " + dirPathresize_image(dirPath)return Trueif __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')
Python 批量修改图片格式和尺寸相关推荐
- python批量修改图片格式和名称
在制作数据集的过程中发现找到的图片名称和格式都很混乱,找了别人的发现老是报错. 同时总结了一下我自己这边程序报的错误: 1..jpg已存在** 比如我现在存在2.jpg,通过代码修改也会得到2.jpg ...
- Python批量修改图片名称,格式,并批量量化
from PIL import Image import numpy as np import cv2 import matplotlib.pyplot as plt import os####### ...
- 【python】批量按坐标裁剪图片、ImageJ批量修改图片格式
一.批量按坐标裁剪图片代码 # -- coding: utf-8 -- import cv2 import osdef update(input_img_path, output_img_path): ...
- python 批量修改图片大小
python 批量修改图片大小 一个文件夹下面有好多图片格式是jpg大小是19201080,把它们处理成1280720并按原先图片的名保存在另一路径下 这里首先要找到给定路径下所有的图片文件,然后在修 ...
- 用Python批量修改图片名称及后缀名
用Python批量修改图片名称及后缀名 import os a = 'dataset3\png/'//需要修改的图片所在的文件夹 b = 'dataset2\png/'//修改后的图片存放路径 fil ...
- python批量修改图片分辨率
python批量修改图片分辨率 import cv2 import osif __name__ == '__main__':curDir = os.curdir # 获取当前执行python文件的文件 ...
- Python批量修改图片,刷新哈希值
为什么要修改图片的哈希值? 如何修改图片的哈希值? 为什么要修改图片的哈希值? 上传一个文件到网盘时,网盘会检查该文件的哈希值,如果与网盘服务器上储存的某个文件的哈希值相同,说明该文件已经被上传过了, ...
- 用Python批量修改图片名称(后缀)
当我们需要修改批量即几百幅图片的名称或后缀时,如果一个一个图片名称去重命名或是修改的话工作量就会很大.作为一名程序员,当然是要通过代码去解决这些繁琐的事情.下面是用python代码来实现批量修改图片名 ...
- 用Python批量修改图片大小的代码
可以使用Python的PIL库来实现批量修改图片大小,示例代码如下: from PIL import Image # 加载图片 image = Image.open('filename') #修改图片 ...
最新文章
- php缓存数据到本地缓存,本地缓存localStorage的使用方法
- eureka同步原理_Eureka工作原理
- CMMI之需求管理和股票池管理
- 【Tiny4412】EMMC启动最小网络文件系统
- LoRa、Sigfox和NB-IoT在物联网趋势中谁是你的最佳拍档?
- 【SpringBoot 2】(四)详析SpringBoot的常用注解
- ThreadLocal可以解决并发问题吗?
- java reset_void reset()
- HDU 4553:约会安排(区间合并)
- RHCS Oracle HA for OEL5.8 KVM实践配置
- K8S终端UI界面--K9S
- 蓝桥杯c语言大一的知识够了吗,参加蓝桥杯后的感受以及个人总结
- python数据录入和分析_基于 Python 和 Pandas 的数据分析(3) --- 输入/输出 基础
- mysql 报1055错误_MySQL数据库报1055错误
- Autocad2017破解版下载|Autodesk Autocad 2017中文破解版下载 64位(附注册机/序列号)
- cranberry病毒导致mycat应用都崩溃解决办法
- Ae:形状图层的内容添加
- easyui中datagrid表格如何正确显示和隐藏
- [渝粤教育] 西南科技大学 预算会计 在线考试复习资料2021版
- 爬虫入门学习(八)模拟登录丁香园论坛爬取用户信息