RPGViewer - 遊戲常用壓縮算法的介紹和識別

deflate
http://www.zlib.net/
這是ZIP默認採用的壓縮算法。ZIP格式使用非常廣泛,不僅有開源的C實現-zlib,還有衆多的商業解決方案。因此在遊戲中採用deflate,可以大大降低編程的成本。很多國外遊戲的檔案都採用這種壓縮算法,或者直接使用ZIP文件格式存儲資源。目前不少國內廠商也開始採用deflate。
默認ZIP使用的deflate,傳入的WindowBits是-0xF。而zlib中默認使用的WindowBits是0xF。
採用0xF作爲WindowBits時,壓縮後的數據的第一個字節往往是0x78,這可以用於識別deflate算法。
另外deflate算法通常都使用了zlib中的實現,在exe中會保留有版權信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者會帶有zlib.dll。

bzip2
http://www.bzip.org/
在遊戲中很少見,不過確實有遊戲公司採用。
它壓縮之後的數據是以BZ開頭的。

lzo
http://www.oberhumer.com/opensource/lzo/
lzo是一種解壓非常快速的壓縮算法,通常開頭若干字節不會被壓縮。國內有幾家公司使用了這種算法。
lzo的版權信息是:
“LZO data compression library.
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer
<[email protected]>
http://www.oberhumer.com $”

rle
http://www.datacompression.info/RLE.shtml
RLE是一個非常簡單的算法,變種非常多。通常用於圖像數據的壓縮。
較早的遊戲一般用RLE算法壓縮透明色。
標準的rle算法通常用字節的高2位做標記,因此比較容易識別。

lzss
http://www.datacompression.info/LZSS.shtml
日本人Haruhiko Okumura發明的壓縮格式。
這個算法有非常多的變種,在較早的遊戲中比較常見。
仙劍1就採用了這種壓縮算法的變種,它對壓縮之後的數據做了huffman編碼。
標準的LZSS算法採用單獨的字節存儲標記,所以通常數據的開頭若干字節也是不會被壓縮的。

lzhuf
日本人Haruyasu Yoshizaki發明的壓縮格式,使用了huffman編碼。
相比lzss更復雜一些,在早期的遊戲中也比較常見。

最後貼一篇壓縮算法的歷史回顧
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章