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