尝试使用image magick命令行工具(特定的'convert'工具)使用特定的过滤方法重新编码PNG文件。
根据this page,我们可以使用两个十进制数设置质量参数,第一个数字是使用1-9时使用的zlib压缩级别,第二个数字表示要使用的过滤方法(之前使用过)压缩)
但是使用上面的选项总是在编码时使用过滤器类型'0'(即没有过滤器),即使我指定的过滤器类型不是'0'。
例如使用以下命令
convert -quality 11 in.png out.png
我应该得到zlib压缩等级为1的输出图像(我并不困扰)和过滤器类型'1'('sub'类型的过滤)。
但即使我将质量等级改为11,12.1.15等(对应于过滤器'1','2'......'5'等),出局图像总是使用过滤器类型'0'。
还根据this page尝试使用控件,但结果相同。
非常感谢!
答案 0 :(得分:2)
"过滤方法"在任何PNG文件的IHDR块中始终为0。 什么ImageMagick / GraphicsMagick" s"质量"数字控件是 每个扫描线中使用的过滤器类型。所以" -quality 11"会产生 在IHDR中具有filter_method = 0的PNG文件," filter_type = 1"如 每行的第一个字节。
如果你有" pngtest"随着libpng,你可以找到哪个 使用过滤器类型:
pngtest -m out.png
收益率例如
PASS (3396 zero samples)
Filter 1 was used 24 times
Filter 2 was used 478 times
Filter 3 was used 2 times
Filter 4 was used 241 times
libpng passes test
编辑:ImageMagick似乎有一个短暂的问题。在版本7.0.2-9," -quality 11" 正如您所指出的那样,正在生成一个包含filter_type 0的所有行的图像。 " -quality 15"确实有效,所有四个filter_types都存在。 GraphicsMagick,ImageMagick-7.0.3-0和ImageMagick-6.9.5-9正常工作。