【问题标题】:Scaling down the PNG images is increasing the image size缩小PNG图像会增加图像大小
【发布时间】:2017-04-22 05:23:18
【问题描述】:

我正在尝试将文件夹中的所有图像缩小到各自大小的 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 的大小?如果需要,质量会有所下降。

【问题讨论】:

  • 您是否因为想要更小的像素尺寸而缩小这些图像?还是您这样做是为了减少文件的字节大小?
  • 请注意,使用抗锯齿进行缩放会产生 很多 的中间颜色,这些颜色在原始颜色中不存在,并且会改变图像的可压缩性。 PNG 有许多压缩选项,但很少有程序可以让您访问允许您“调整”压缩的参数,并且选择最佳参数是一项复杂的任务。有一些PNG重新压缩程序漂浮在周围;我使用并推荐OptiPNG
  • @PM2Ring 我想要更小的文件大小。是的,我使用 OptiPNG 作为后期处理的一部分,但它并没有将尺寸减小到我想要的程度。所以我想缩小它并期望文件大小减小。

标签: python algorithm png python-imaging-library image-compression


【解决方案1】:

您使用了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

【讨论】:

  • 谢谢@amit。帮助很大!!
猜你喜欢
  • 2018-10-14
  • 2012-11-22
  • 2013-05-29
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
相关资源
最近更新 更多