我正在尝试将文件夹中的所有图片缩小到各自大小的90%。写道:
from PIL import Image
import sys, csv, os, traceback
path = "C:\Users\Dell\Desktop\Textures\\"
dirs = os.listdir( path )
scalingFactor = .9
def resize():
for item in dirs:
print 'item', path+item
if os.path.isfile(path+item):
im = Image.open(path+item)
f, e = os.path.splitext(path+item)
imResize = im.resize((int(im.size[0]*scalingFactor),int(im.size[1]*scalingFactor)), Image.ANTIALIAS)
fileName = f.split('\\')[-1]
imResize.save(path + "/Out/" + fileName + ' resized_' + str(scalingFactor) + ".png" , 'PNG')
然而,当我运行它时,图像的大小实际上是增加而不是减少(正如我所料)。
例如。原图885x1130 466KB
输出图像796x1017 1.44 MB!
我在早期使用PNG时有一种非常类似的非直观体验,同时旋转它们并得到explanation about it here on Stackoverflow。但我无法让自己相信这也许是同一个问题。
任何线索?我可以做些什么来减少PNG的大小?如果需要,可以稍微降低质量。
答案 0 :(得分:1)
您使用了Image.ANTIALIAS
过滤器,这是一个高质量的下采样过滤器。
要缩小图像尺寸,您可以在保存图像时使用optimize=True
和quality=90
。喜欢 -
imResize.save(path + "/Out/" + fileName + ' resized_' + str(scalingFactor) + ".png" ,optimize=True,quality=90)
优化标记将对图像进行额外的传递,以找到尽可能减小其大小的方法。
现在要进一步缩小尺寸,您可以更改保存选项中的质量值。
我更喜欢质量85和optimize
因为质量不会受到太大影响,文件大小要小得多。
希望这有帮助!
只是为了添加你的答案,这里列出了所有过滤器,以决定质量与执行速度等。
http://pillow.readthedocs.io/en/3.4.x/handbook/concepts.html#concept-filters