我可以尝试使用哪些其他参数来进一步压缩此 PNG 图像?

What Other Parameters Can I Try to Further Compress This PNG Image?

我编写了一个程序来无损地重新压缩 PNG 文件。不幸的是,由于没有单一参数可以保证以最佳方式执行此操作,因此我只检查所有参数(计算时间不是问题,无论如何也不是不合理的)。

具体来说,有:

所以我的代码基本上压缩了所有可能的 (10*5*2 = 100) 组合,并选择了最小的组合。

这适用于各种典型图像。对于某些图像,减少最多可达 20%(尽管 5% 更为常见)。例如图片较多的网站,这一点很明显。


这是一张 PNG 图片 (link to original):

这是一张测试图片。它正好占用 144,391 个字节。我的策略 best effort 是 145,501 字节。

我不太担心这会大 0.77%。我担心 我检查了所有参数,其中一个应该是最优的。所以这个 Can't Happen.


所以我的问题是:发生了什么事?我错过了哪些参数?我没有在文档中看到任何其他内容。

通过检查 OptiPNG 的来源,我发现:

  1. zlib 内存使用参数(从 png_set_compression_mem_level 间接传递)也会影响压缩比。这一点,尽管 documentation 说了什么。我对此没有任何解释,我认为这是一件坏事。

    当我将其设置为 8(默认值)而不是我使用的 9 时,我能够重现原始图像。

  2. 过滤器参数(对png_set_filter)有所不同。这种说法是有道理的;为特定行选择最佳过滤器并不一定意味着全局最佳压缩(因为该行可能会压缩 less-well 与相邻行)。这是一个完整的猜测,因为 none 出现在文档中。

    当我对这些值进行优化时,我得到了一个 140,541 字节的图像,这似乎是最佳的。

您可以尝试 recompressing with zopfli 获得超过 zlib 最佳压缩的一些增益。