PNG:压缩和zlib

4
我正在尝试理解PNG中的压缩技术,但在网上找到了很多矛盾的信息... 我想要了解以下几点: - LZ77部分的搜索是如何完成的:哈希表和链表?这是在deflate中定义的吗?还是在zlib中实现的?有没有选择搜索方法的选项? - PNG编码器/解码器能否设置一些压缩参数(策略、过滤器等),还是PNG有默认值? - LZ77部分是贪婪还是懒惰评估?或者这也是一个选项? - 最后:2个霍夫曼树,它们是否压缩在第三棵树中,并且所有三棵树都被编码了?还是只有它们的编码长度被编码?
zlib的实现与其他deflate实现不同吗?也许这就是我所有困惑的来源?
谢谢您的帮助!我需要这个来做我的新工作。
LuCu

一些关于您的问题在官方规范中得到了回答:http://www.w3.org/TR/PNG-Compression.html - Jongware
参见:http://www.zlib.net/feldspar.html - leonbloy
是的,libpng有默认设置(它使用zlib默认值),但是可以通过libpng函数进行策略和级别的重置,例如png_set_compression_level(png_ptr, level)。滤波器的设置也有libpng默认值,并且可以通过png_set_filter()进行设置。 - Glenn Randers-Pehrson
1个回答

6
PNG压缩采用zlib格式。该格式使用deflate。通常使用的代码是zlib库
压缩算法未在格式中指定。zlib库deflate算法使用哈希链在滑动窗口中搜索匹配字符串。zlib的deflate需要多个参数进行压缩调整--参见deflateInit2()
deflate格式指定了动态块前面的Huffman编码压缩。文字/长度和距离码长度本身是以行程长度和Huffman编码的形式编码的。

LZMA SDKGoogle的zopfli中,还有其他的deflate压缩器实现,这两个都采用更加深入的方法,为了获得微小的压缩收益需要更多的时间。


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