100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 告别PS的批处理 用几行Python批量修改图片大小 cv2和pil方法

告别PS的批处理 用几行Python批量修改图片大小 cv2和pil方法

时间:2024-09-04 03:18:34

相关推荐

告别PS的批处理 用几行Python批量修改图片大小 cv2和pil方法

之前一直用PS的批处理功能来批量压缩照片的大小,最近换了苹果电脑,在网上搜到了方法,无需安装软件,要看明白了操作方法也很方便,但有一个缺点,就是把原文件给覆盖了。

所以又尝试了Python方法:

%%timeimport osimport cv2from os import listdirtarget = 'small_img' #新照片目录source = 'images' #原始照片目录content = listdir(source) # 读入照片文件名for i in range(len(content)):resized = cv2.resize(cv2.imread('./'+ source + '/' + content[i]), None, fx=0.28, fy=0.28, interpolation=cv2.INTER_AREA) #fx=0.28, fy=0.28 参数可调cv2.imwrite('./'+ target + '/rez_' + content[i], resized) # Linux格式,win要用反斜杠print ('结束')

结束

CPU times: user 4.18 s, sys: 93.5 ms, total: 4.27 s

Wall time: 4.33 s

程序要放在两个目录的上层

原始照片

处理后的照片

安装 cv2 可能会有麻烦,可以在网上搜一下解决方法。

Python实现环境:Linux 上的 jupyter notebook 远程

这个程序不改变图片的格式,只管放大或缩小,如果source文件夹里里有非图片文件就会卡住,还差一个检查步骤,请听下回分解。

优化以后Linux版本2:用PIL方法 自定义最大长度(从之前的定义宽度到)Max lang,同时转换png -> jpg 95质量

%%timeimport osfrom os import listdirfrom PIL import Imagetarget = 'small_img'source = 'images'# Max langtargetwidth = 820 #宽度可调content = listdir(source)for i in range(len(content)):if content[i] != '.ipynb_checkpoints': #避免一种错误zwidth = targetwidth img=Image.open('./'+ source + '/' + content[i])print(content[i] + ' ' + 'Image format is %s.' % img.format)width, height = img.size[:2]if width > height:targetlheight = height * zwidth // widthelse:targetlheight = zwidthzwidth = targetlheight * width // height if content[i][-4:] == 'jpeg':img = img.convert('RGB')resized = img.resize((zwidth, targetlheight),Image.ANTIALIAS)resized.save('./'+ target + '/'+ str(targetwidth ) +'m_' + content[i], quality=95)else:if content[i][-3:] == 'png':img = img.convert('RGB') resized = img.resize((zwidth, targetlheight),Image.ANTIALIAS)resized.save('./'+ target + '/'+ str(targetwidth ) +'m_' + content[i][5:-3] + 'jpg', quality=95)else:i=i+1

对win用户有现成的免安装程序包,批量缩小(放大)图片,同时转换png、jpeg到jpg格式,缩放可调+质量可调。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。