缩小 PNG 图像会增加图像大小

Scaling down the PNG images is increasing the image size

我正在尝试将一个文件夹中的所有图像缩小到它们各自大小的 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 时有过类似的不直观体验,并得到了 。但我无法说服自己这可能是同一个问题。

有什么线索吗?我还能做些什么来减小 PNG 的大小?如果需要,质量会有所下降。

您使用了 Image.ANTIALIAS 过滤器,这是一种高质量的下采样过滤器。

要减小图像的大小,您可以在保存图像时使用 optimize=Truequality=90。喜欢 -

imResize.save(path + "/Out/" + fileName + ' resized_' + str(scalingFactor) + ".png" ,optimize=True,quality=90)

优化标志将对图像进行额外的传递,以找到尽可能减小其尺寸的方法。

现在要进一步减小尺寸,您可以在保存选项中更改质量值。

我更喜欢质量 85 和 optimize,因为质量影响不大,而且文件大小小得多。

希望对您有所帮助!


只是为了补充您的答案,此处列出了所有过滤器,以决定质量与执行速度等。

https://pillow.readthedocs.io/en/stable/handbook/concepts.html#filters