之前一直用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格式,缩放可调+质量可调。