【问题标题】:File size increase for pngquant output when using PIL使用 PIL 时 pngquant 输出的文件大小增加
【发布时间】:2017-08-20 19:16:06
【问题描述】:

如果我使用 pngquant 压缩和图像,然后使用 PIL 读取和写入,我发现文件大小显着增加(有时高达 2 倍)。有人在这里有任何提示吗?我怀疑这可能与一些 PIL 标志有关,但对它不够熟悉。

【问题讨论】:

  • PIL 的 open()save() 行是什么?如果您在打开后直接保存而不进行任何修改,您是否会获得相同的尺寸增加?
  • 你能提供一个MCVE吗?
  • 这就是您提供的所有信息?

标签: python python-imaging-library pngquant


【解决方案1】:

然后用 PIL 读写,我看到文件大小显着增加(有时高达 2 倍)

由于 PNG 是无损的,因此不会引入可能对其他编码器造成问题的伪影,因此我只看到了三种真正的可能性:

  • 您正在使用不同的位深度进行保存(例如,输入 8 位,输出 24 位)
  • 您在保存时添加了 Alpha 信息
  • 调色板被大量重新排序(这不应该保存或丢失超过百分之几,但没有看到实际图像,如果 2x 是一个例外情况并且规则更接近 1.2x,它在可能性范围内)

对于 非常 个小文件,如果 PIL 重新添加一些 pngquant 删除的数据,非图像块可能是问题的一部分。获取一些能够转储所有块(PLTE、tEXT 等)的列表和大小的 PNG 诊断工具,并查看实际增加的位置 (Quick google link)。

zLib 也可能是罪魁祸首(例如,如果内存服务,advpng 使用欺骗的 zlib 来提高性能),但不是那些数字,除非我们谈论的文件足够小,甚至可能只有几个字节意义重大。

【讨论】:

  • 我是个白痴,并按照您的建议更改了位深度。这与其他一些问题相结合导致了爆炸。感谢您的帮助,特别是回想起来我完全没有给出这个问题的背景信息(......对不起,这是漫长的一天)。
【解决方案2】:

除非您修改任何 RGBA 或使用不同的settings 保存,否则无论您使用什么库或应用程序,读取和写入 PNG 对文件大小几乎没有影响。

使用 pngquant 生成的图像和 PIL 的概念证明:

$ wget https://pngquant.org/Ducati_side_shadow-fs8.png
$ python
>>> from PIL import Image
>>> im = Image.open("Ducati_side_shadow-fs8.png")
>>> im.rotate(180).save("output.png")
$ stat -c "%s %n" *.png
23405 Ducati_side_shadow-fs8.png
23362 output.png

在上面的例子中,output.png 比原来的还要少 43 个字节。我们已将其倒置旋转,但未触及颜色或 alpha。

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多