2014-02-16 55 views
2

我想了解压缩PNG - 但我似乎PNG:紧缩和zlib

找了很多矛盾的信息在网上... 我想了解 - 如何寻找在做LZ77-部分:包含链表的哈希表?这是在deflate中定义的吗?或在zlib中实现?有没有可供选择的搜索方法? - PNG编码器/解码器可以为压缩设置一些参数(策略,过滤器等)还是PNG的默认设置? - LZ77部分是否会进行贪婪或懒惰的评估?或者这也是一个选项? - 最后是:2个霍夫曼树,它们是在第三棵树中压缩的,并且所有三个都被编码了?或者是仅使用其码长编码的2棵树?

zlib实现是否与其他deflate实现不同?也许这就是我所有的困惑来自哪里?

谢谢你的帮助!我需要为我的新工作

LuCu

+0

您的一些问题已在官方说明中解答:http://www.w3.org/TR/PNG-Compression.html – usr2564301

+0

另请参阅:http://www.zlib.net/feldspar.html – leonbloy

+0

是libpng有一个缺省值(它使用默认的zlib),但是可以通过libpng函数(如png_set_compression_level(png_ptr,level))重置策略和级别的设置。过滤器的设置也有一个libpng默认值,可以通过png_set_filter()来设置。 –

回答

5

PNG压缩是在zlib格式。 zlib格式使用deflate。使用的代码通常是zlib library

用于压缩的算法不是格式指定的。 zlib库deflate算法使用哈希链来搜索滑动窗口中的匹配字符串。 zlib的deflate需要几个参数来进行压缩调优 - 请参阅deflateInit2()

deflate格式指定动态块前面的霍夫曼代码的压缩。文字/长度和距离代码长度是游程长度,并且霍夫曼编码自己。

LZMA SDKGoogle's zopfli中还有其他的放气压缩机的实施方式,其中这两种方法都使用更密集的方法,这些方法需要更多的时间用于小的压缩增益。