2014-02-16 56 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中還有其他的放氣壓縮機的實施方式,其中這兩種方法都使用更密集的方法,這些方法需要更多的時間用於小的壓縮增益。