使用PIL时,pngquant输出的文件大小增加

时间:2017-03-27 22:08:29

标签: python python-imaging-library pngquant

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

2 个答案:

答案 0 :(得分:3)

  

然后使用PIL读取和写出,我看到文件大小显着增加(有时最多增加2倍)

由于PNG是无损的,因此不会引入可能与其他编码器有关的工件,我只看到三种可能的可能性:

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

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

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

答案 1 :(得分:0)

除非您修改任何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。