我可以尝试进一步压缩此PNG图像的其他哪些参数?
我写了一个程序来无损地重新压缩PNG文件。因为不幸的是,没有一个参数可以保证这样做的最佳性,所以我只检查所有参数(计算时间不是目标,无论如何也不是不合理的) 具体而言,有:我可以尝试进一步压缩此PNG图像的其他哪些参数?,png,zlib,Png,Zlib,我写了一个程序来无损地重新压缩PNG文件。因为不幸的是,没有一个参数可以保证这样做的最佳性,所以我只检查所有参数(计算时间不是目标,无论如何也不是不合理的) 具体而言,有: 要传递到png\u set\u compression\u level(0到9)的10级zlib压缩 5个zlib策略传递到png\u set\u compression\u策略(系统、过滤、仅哈夫曼、RLE和静态哈夫曼) 交错(2个值) 要传递到png\u set\u filter中的一组不同的预过滤器。我使用PNG\u
- 要传递到
(0到9)的10级zlib压缩png\u set\u compression\u level
- 5个zlib策略传递到
(系统、过滤、仅哈夫曼、RLE和静态哈夫曼)png\u set\u compression\u策略
- 交错(2个值)
- 要传递到
中的一组不同的预过滤器。我使用png\u set\u filter
PNG\u ALL\u过滤器来检查它们
这是一张PNG图像():
这是一个测试图像。它正好占用144391字节。我的策略是145501字节 我不太担心这是0.77%大。我担心我检查了所有的参数,其中一个应该是最优的。所以这个
所以我的问题是:发生了什么?我在尝试时遗漏了哪些参数?我在文档中没有看到任何其他内容。通过检查的来源,我发现:
png\u set\u compression\u mem\u level
间接传递)也会影响压缩比。不管法庭怎么说,这都是事实。我对此没有任何解释,我认为这是一件坏事
当我将其设置为8
(默认值)而不是我使用的9
时,我能够重现原始图像
您可以尝试从zlib的最佳压缩中获得一些收益。为什么不能实现呢?您不知道您的原始图像是否使用与您使用的软件完全相同的软件进行了压缩。@pvg事实上,我碰巧知道保存程序使用的zlib和libpng版本与我使用的版本相同。我想您可以试用一个可用的免费png优化器,看看它们能提供什么。如果它比较小,那么假设你在这场大雁追逐中遗漏了什么似乎是相当合理的。质量?那一定是个错误。PNG压缩是无损的。@MarkAdler在(特别是无损)压缩的上下文中,质量是指算法获得高压缩比的能力。损失是指信息的损失。但这显然是不清楚的;我编辑过。啊,好的。链接文档没有说内存级别不会影响压缩级别。我不知道你说的“这是件坏事”是什么意思。“pngcrush-zmem6-brute”写的是一个140113字节的PNG文件。默认情况下,Pngcrush不探索zmem参数,因为尽管有时会有回报,但它通常太小,不值得将Pngcrush运行时间增加一倍。