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

4
如果我使用pngquant压缩图像,然后使用PIL读取并写出,我发现文件大小显著增加(有时增加了2倍)。有没有什么建议?我怀疑可能与一些PIL标志有关,但对此不太熟悉。

你的PIL代码中的open()save()行是什么?如果在打开后没有进行任何修改直接保存,尺寸是否会增加相同? - hurturk
你能提供一个MCVE吗? - Leon
你提供的就只有这些信息吗? - Stephen Rauch
2个回答

3
当使用PIL读取和写出文件时,我发现文件大小显著增加(有时增加了2倍)。
由于PNG是无损的,因此不会引入可能与其他编码器有问题的伪影,我只看到三种真正的可能性:
- 您正在以不同的位深度保存(例如输入8位,输出24位)。 - 您正在添加Alpha信息进行保存。 - 调色板被大量重新排序(这既不应该节约也不应该丢失超过几个百分点,但是如果2倍是个例外情况,规则更接近1.2倍,那么这是可能的)。
对于非常小的文件,如果PIL重新添加了一些pngquant删除的数据,则非图像块可能是问题的一部分。获取一些PNG诊断工具,能够转储所有块(PLTE、tEXT等)的列表和大小,并查看实际增加发生的位置(Quick google link)。

可能也是zLib的问题(例如,如果记忆没有出错,advpng使用了一个改进过的zlib来提高性能),但除非我们谈论的是足够小的文件,即使只有几个字节也可能很重要,否则不会出现这些数字。


1
我当时真是个傻瓜,按照你的建议改变了位深度。加上其他一些问题,结果就爆炸了。非常感谢你的帮助,特别是回头看,我完全没有给出问题的任何背景信息(...抱歉,那天太累了)。 - JPC

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 字节。我们将其倒置,但没有改变颜色或透明度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接