4

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

4

2 回答 2

3

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

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

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

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

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

于 2017-03-30T05:37:37.320 回答
0

除非您修改任何 RGBA 或使用不同的设置保存,否则无论您使用何种库或应用程序,读取和写入 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。

于 2017-03-31T02:19:14.040 回答