當前位置:首頁 » 文件管理 » lzw演算法壓縮

lzw演算法壓縮

發布時間: 2024-06-14 06:04:16

『壹』 LZW演算法的LZW演算法簡介

字元串和編碼的對應關系是在壓縮過程中動態生成的,並且隱含在壓縮數據中,解壓的時候根據表來進行恢復,算是一種無損壓縮.
根據 Lempel-Ziv-Welch Encoding ,簡稱 LZW 的壓縮演算法,用任何一種語言來實現它.
LZW壓縮演算法 的基本概念:LZW壓縮有三個重要的對象:數據流(CharStream)、編碼流(CodeStream)和編譯表(String Table)。在編碼時,數據流是輸入對象(文本文件的據序列),編碼流就是輸出對象(經過壓縮運算的編碼數據);在解碼時,編碼流則是輸入對象,數據流是輸出對象;而編譯表是在編碼和解碼時都須要用藉助的對象。
字元(Character):最基礎的數據元素,在文本文件中就是一個位元組,在光柵數據中就是一個像素的顏色在指定的顏色列表中的索引值;
字元串(String):由幾個連續的字元組成;
前綴(Prefix):也是一個字元串,不過通常用在另一個字元的前面,而且它的長度可以為0;
根(Root):一個長度的字元串;
編碼(Code):一個數字,按照固定長度(編碼長度)從編碼流中取出,編譯表的映射值;圖案:一個字元串,按不定長度從數據流中讀出,映射到編譯表條目.
LZW壓縮演算法 的基本原理:提取原始文本文件數據中的不同字元,基於這些字元創建一個編譯表,然後用編譯表中的字元的索引來替代原始文本文件數據中的相應字元,減少原始數據大小。看起來和調色板圖象的實現原理差不多,但是應該注意到的是,我們這里的編譯表不是事先創建好的,而是根據原始文件數據動態創建的,解碼時還要從已編碼的數據中還原出原來的編譯表.

『貳』 用lzw演算法壓縮用TC3.0的getimage函數提取的圖像數據進行壓縮和解壓

在字典表之外單獨維護一個散列表,該表中的每個元素都可以保存一個字典表的索引值。例如,對於新字元串「al」,我們可以按照LZW傳統的做法,在字典表中依順序找出第一個空的字典項,然後,通過散列函數,將該字典項的索引值(如257)存在散列表中的相應位置。實際輸出時,輸出字典表的索引值(而不是散列表的索引值)。這樣,解壓程序看到的數據內容和沒有使用散列演算法時的數據內容完全一致,只要按照LZW的傳統做法依次解壓就行了。

其實,關於在LZW中使用散列的具體做法有很多種,開發者基於時間/空間上的不同考慮,會選擇不同的解決方案。

LZW演算法中,首先建立一個字元串表,把每一個第一次出現的字元串放入串表中,並用一個數字來表示,這個數字與此字元串在串表中的位置有關,並將這個數字存入壓縮文件中,如果這個字元串再次出現時,即可用表示它的數字來代替,並將這個數字存入文件中。壓縮完成後將串表丟棄。如"print" 字元串,如果在壓縮時用266表示,只要再次出現,均用266表示,並將"print"字元串存入串表中,在圖象解碼時遇到數字266,即可從串表中查出266所代表的字元串"print",在解壓縮時,串表可以根據壓縮數據重新生成。

壓縮演算法的簡單示例,不是完全實現LZW演算法,只是從最直觀的角度看lzw演算法的思想
對原始數據ABCCAABCDDAACCDB進行LZW壓縮
原始數據中,只包括4個字元(Character),A,B,C,D,四個字元可以用一個2bit的數表示,0-A,1-B,2-C,3-D,從最直觀的角度看,原始字元串存在重復字元:ABCCAABCDDAACCDB,用4代表AB,4代表CC,上面的字元串可以替代表示為:45A4CDDAA5DB,這樣是不是就比原數據短了一些呢!

-------------------------------------------------------
LZW數據壓縮演算法的原理分析
我希望通過本文的介紹,能給那些目前不太了解lzw演算法和該演算法在gif圖像中應用,但渴望了解它的人一些啟發和幫助。拋磚引玉而已,更希望園子裡面兄弟提出寶貴的意見。
1.LZW的全稱是什麼?
Lempel-Ziv-Welch (LZW).
2. LZW的簡介和壓縮原理是什麼?
LZW壓縮演算法是一種新穎的壓縮方法,由Lemple-Ziv-Welch 三人共同創造,用他們的名字命名。它採用了一種先進的串表壓縮,將每個第一次出現的串放在一個串表中,用一個數字來表示串,壓縮文件只存貯數字,則不存貯串,從而使圖象文件的壓縮效率得到較大的提高。奇妙的是,不管是在壓縮還是在解壓縮的過程中都能正確的建立這個串表,壓縮或解壓縮完成後,這個串表又被丟棄。
LZW演算法中,首先建立一個字元串表,把每一個第一次出現的字元串放入串表中,並用一個數字來表示,這個數字與此字元串在串表中的位置有關,並將這個數字存入壓縮文件中,如果這個字元串再次出現時,即可用表示它的數字來代替,並將這個數字存入文件中。壓縮完成後將串表丟棄。如"print" 字元串,如果在壓縮時用266表示,只要再次出現,均用266表示,並將"print"字元串存入串表中,在圖象解碼時遇到數字266,即可從串表中查出266所代表的字元串"print",在解壓縮時,串表可以根據壓縮數據重新生成。
3.在詳細介紹演算法之前,先列出一些與該演算法相關的概念和詞彙
1)'Character': 字元,一種基礎數據元素,在普通文本文件中,它佔用1個單獨的byte,而在圖像中,它卻是 一種代表給定像素顏色的索引值。
2)'CharStream':數據文件中的字元流。
3)'Prefix':前綴。如這個單詞的含義一樣,代表著在一個字元最直接的前一個字元。一個前綴字元長度可以為0,一個prefix和一個character可以組成一個字元串(string),
4)'Suffix': 後綴,是一個字元,一個字元串可以由(A,B)來組成,A是前綴,B是後綴,當A長度為0的時候,代表Root,根
5)'Code:碼,用於代表一個字元串的位置編碼
6)'Entry',一個Code和它所代表的字元串(string)
4.壓縮演算法的簡單示例,不是完全實現LZW演算法,只是從最直觀的角度看lzw演算法的思想
對原始數據ABCCAABCDDAACCDB進行LZW壓縮
原始數據中,只包括4個字元(Character),A,B,C,D,四個字元可以用一個2bit的數表示,0-A,1-B,2-C,3-D,從最直觀的角度看,原始字元串存在重復字元:ABCCAABCDDAACCDB,用4代表AB,4代表CC,上面的字元串可以替代表示為:45A4CDDAA5DB,這樣是不是就比原數據短了一些呢!
5.LZW演算法的適用范圍
為了區別代表串的值(Code)和原來的單個的數據值(String),需要使它們的數值域不重合,上面用0-3來代表A-D,那麼AB就必須用大於3的數值來代替,再舉另外一個例子,原來的數值范圍可以用8bit來表示,那麼就認為原始的數的范圍是0~255,壓縮程序生成的標號的范圍就不能為0~255(如果是0-255,就重復了)。只能從256開始,但是這樣一來就超過了8位的表示範圍了,所以必須要擴展數據的位數,至少擴展一位,但是這樣不是增加了1個字元佔用的空間了么?但是卻可以用一個字元代表幾個字元,比如原來255是8bit,但是現在用256來表示254,255兩個數,還是劃得來的。從這個原理可以看出LZW演算法的適用范圍是原始數據串最好是有大量的子串多次重復出現,重復的越多,壓縮效果越好。反之則越差,可能真的不減反增了。
6.LZW演算法中特殊標記
隨著新的串(string)不斷被發現,標號也會不斷地增長,如果原數據過大,生成的標號集(string table)會越來越大,這時候操作這個集合就會產生效率問題。如何避免這個問題呢?Gif在採用lzw演算法的做法是當標號集足夠大的時候,就不能增大了,乾脆從頭開始再來,在這個位置要插入一個標號,就是清除標志CLEAR,表示從這里我重新開始構造字典,以前的所有標記作廢,開始使用新的標記。
這時候又有一個問題出現,足夠大是多大?這個標號集的大小為比較合適呢?理論上是標號集大小越大,則壓縮比率就越高,但開銷也越高。 一般根據處理速度和內存空間連個因素來選定。GIF規范規定的是12位,超過12位的表達范圍就推倒重來,並且GIF為了提高壓縮率,採用的是變長的字長。比如說原始數據是8位,那麼一開始,先加上一位再說,開始的字長就成了9位,然後開始加標號,當標號加到512時,也就是超過9為所能表達的最大數據時,也就意味著後面的標號要用10位字長才能表示了,那麼從這里開始,後面的字長就是10位了。依此類推,到了2^12也就是4096時,在這里插一個清除標志,從後面開始,從9位再來。
GIF規定的清除標志CLEAR的數值是原始數據字長表示的最大值加1,如果原始數據字長是8,那麼清除標志就是256,如果原始數據字長為4那麼就是16。另外GIF還規定了一個結束標志END,它的值是清除標志CLEAR再加1。由於GIF規定的位數有1位(單色圖),4位(16色)和8位(256色),而1位的情況下如果只擴展1位,只能表示4種狀態,那麼加上一個清除標志和結束標志就用完了,所以1位的情況下就必須擴充到3位。其它兩種情況初始的字長就為5位和9位。此處參照了http://blog.csdn.net/whycadi/
7.用lzw演算法壓縮原始數據的示例分析
輸入流,也就是原始的數據為:255,24,54,255,24,255,255,24,5,123,45,255,24,5,24,54..................
這個正好可以看到是gif文件中像素數組的一部分,如何對它進行壓縮
因為原始數據可以用8bit來表示,故清除標志Clear=255+1 =256,結束標志為End=256+1=257,目前標號集為
0 1 2 3 .................................................................................255 CLEAR END
第一步,讀取第一個字元為255,在標記表裡面查找,255已經存在,我們已經認識255了,不做處理
第二步,取第二個字元,此時前綴為A,形成當前的Entry為(255,24),在標記集合不存在,我們並不認識255,24好,這次你小子來了,我就記住你,把它在標記集合中標記為258,然後輸出前綴A,保留後綴24,並作為下一次的前綴(後綴變前綴)
第三步,取第三個字元為54,當前Entry(24,54),不認識,記錄(24,54)為標號259,並輸出24,後綴變前綴
第四部:取第四個字元255,Entry=(54,255),不認識,記錄(54,255)為標號260,輸出54,後綴變前綴
第五步 取第5個字元24,entry=(255,24),啊,認識你,這不是老258么,於是把字元串規約為258,並作為前綴
第六步 取第六個字元255,entry=(258,255),不認識,記錄(258,255)為261,輸出258,後綴變前綴
.......
一直處理到最後一個字元

『叄』 LZW是什麼意思

LZW壓縮編碼
LZW(Lempel Ziv Welch)壓縮編碼是一種先進的數據壓縮技術,屬於無損壓縮編碼,該編碼主要用於圖像數據的壓縮。對於簡單圖像和平滑且雜訊小的信號源具有較高的壓縮比,並且有較高的壓縮和解壓縮速度。
1977年,兩位以色列教授Lempel和Ziv提出了查找冗餘字元和用較短的符號標記替代冗餘字元的概念。1985年,由Welch加以充實而形成LZW,簡稱「LZW」技術。

1.LZW壓縮基本原理
LZW壓縮技術把數據流中復雜的數據用簡單的代碼來表示,並把代碼和數據的對應關系建立一個轉換表,又叫「字元串表」。
轉換表是在壓縮或解壓縮過程中動態生成的表,該表只在進行壓縮或解壓縮過程中需要,一旦壓縮和解壓縮結束,該表將不再起任何作用。

2.LZW演算法
LZW演算法基於轉換串表(字典)T,將輸入字元串映射成定長(通常為12位)的碼字。在12位4096種可能的代碼中,256個代表單字元,剩下3840給出現的字元串。
LZW字典中的字元串具有前綴性,即 。

LZW演算法流程:
1)初始化:將所有的單字元串放入串表
2)讀第一個輸入字元給前綴串ω
3)Step: 讀下一個輸入字元K;

if 沒有這樣的K(輸入已窮盡):

碼字(ω) 輸出;結束。

If ωK 已存在於串表中:

ωK:=ω;repeat Step;

else ωK不在於串表中:

碼字(ω) 輸出;

ωK加進串表;

K:=ω;repeat Step.

例子:ababcbababaaaaaaa

LZW編碼:a,b,c,ab,ba,abc,cb,bab,baba,aa,aaa,aaaa

3.LZW壓縮的特點

LZW碼能有效利用字元出現頻率冗餘度進行壓縮,且字典是自適應生成的,但通常不能有效地利用位置冗餘度。

具體特點如下:
l)LZW壓縮技術對於可預測性不大的數據具有較好的處理效果,常用於GIF格式的圖像壓縮,其平均壓縮比在2)1以上,最高壓縮比可達到3:1。
2)對於數據流中連續重復出現的位元組和字串,LZW壓縮技術具有很高的壓縮比。
3)除了用於圖像數據處理以外,LZW壓縮技術還被用於文本程序等數據壓縮領域。
4)LZW壓縮技術有很多變體,例如常見的ARC、RKARC、PKZIP高效壓縮程序。
5)對於任意寬度和像素位長度的圖像,都具有穩定的壓縮過程。壓縮和解壓縮速度較快。
6)對機器硬體條件要求不高,在 Intel 80386的計算機上即可進行壓縮和解壓縮。

『肆』 LZW鍘嬬緝綆楁硶錛

鍦ㄨ$畻鏈鴻嗚(CV)棰嗗煙錛岄殢鐫瀵瑰浘鍍忚瘑鍒綺懼害瑕佹眰鐨勬彁鍗囷紝浼犵粺鐨勫撫闂村帇緙╃畻娉曞侶264宸叉樉寰椾笉澶熼珮鏁堛備負姝わ紝MJPEG榪欑被鏃犲撫闂村帇緙╃殑瑙e喅鏂規堝簲榪愯岀敓錛岃繘涓姝ユ帹鍔ㄤ簡鏃犳崯鍘嬬緝綆楁硶鍦–V鑺鐗囦腑鐨勫簲鐢ㄣ傚叾涓錛孡ZW綆楁硶鍑鍊熷叾鐙鐗圭殑浼樺娍錛屾垚涓轟簡鎺㈣ㄧ殑鐒︾偣銆


LZW綆楁硶鐨勬牳蹇冨湪浜庡緩絝嬩竴涓鑷閫傚簲鐨勫瓧絎︿覆緙栫爜琛錛岄氳繃灝嗛暱瀛楃︿覆鏇挎崲涓鴻緝鐭鐨勭紪鐮侊紝瀹炵幇鏁版嵁鐨勯珮鏁堝帇緙┿榪欎竴綆楁硶婧愪簬涓や綅縐戝﹀禯iv鍜孡empel鍦1977鍜1978騫寸殑寮鍒涙у伐浣滐紝鑰孴erry Welch鍦1984騫寸殑鏀硅繘浣垮叾騫誇負浜虹煡錛屽洜姝ゅ緱鍚峀ZW銆傚湪瀹為檯搴旂敤涓錛孡ZW灝ゅ叾鍦℅IF鍥懼儚鍘嬬緝涓澶ф斁寮傚僵銆


緙栫爜榪囩▼寮濮嬩簬鍒濆嬪寲涓涓涓闂村瘎瀛樺櫒R錛屽苟灝嗘瘡涓瀛楃K閫愪竴澶勭悊銆傚傛灉褰撳墠鐨凴K瀛楃︿覆宸茬粡鍦ㄥ瓧鍏竏ict涓錛屽氨鏇存柊瀵勫瓨鍣≧錛涘惁鍒欙紝杈撳嚭R鐨勭紪鐮侊紝灝哛K娣誨姞鍒板瓧鍏鎬腑錛屽啀緇х畫澶勭悊涓嬩竴涓瀛楃︺備緥濡傦紝杈撳叆瀛椾覆"BABAABAAA"錛屽垵濮嬪瓧鍏鎬負{'A':1, 'B':2, 'C':3}錛屾渶緇堣緭鍑轟負[2,1,4,5,1,8]錛屽苟鎵╁睍浜嗗瓧鍏搞


瑙g爜鏃訛紝浠庤緭鍏ユ暟緇勪腑璇誨彇絎涓涓瀛楃K錛岃緭鍑哄瓧鍏鎬腑鐨勫瑰簲鍊礆紝鐒跺悗鏇存柊瀵勫瓨鍣≧銆傚逛簬鍚庣畫瀛楃︼紝濡傛灉鍦ㄥ瓧鍏鎬腑鎵懼埌錛屽氨杈撳嚭瀵瑰簲鍊礆紱鍚﹀垯錛屽皢瀛楀吀涓璕鐨勫煎拰褰撳墠瀛楃︾殑鍊肩浉鍔犱綔涓烘柊閿鍊煎姞鍏ュ瓧鍏革紝鍐嶈緭鍑哄瓧絎︺傚傚皢[2,1,4,5,1,8]瑙g爜錛岃緭鍑轟負鍘熷嬪瓧絎︿覆銆


LZW綆楁硶鐨勪紭鍔垮湪浜庤兘鏈夋晥鍒╃敤瀛楃﹂戠巼鐨勫啑浣欙紝鐢熸垚鑷閫傚簲鐨勫瓧鍏革紝瀵瑰彲棰勬祴鎬т笉寮虹殑鏁版嵁琛ㄧ幇鍑鴻壊銆傚湪鐩戞帶鍥懼儚榪欑被鍙樺寲杈冩參鐨勫満鏅錛屽畠鑳芥彁渚涢珮鍘嬬緝姣斻傜劧鑰岋紝LZW騫朵笉鎿呴暱鍒╃敤浣嶇疆鍐椾綑錛屽逛簬浣嶇疆鐩稿叧鎬ц緝寮虹殑榪炵畫閲嶅嶆暟鎹錛屽帇緙╂晥鏋滃彲鑳戒笉濡傚叾浠栫畻娉曘傛瘮濡傦紝zip鍘嬬緝閫氱敤鏂囦歡鏃訛紝閫夋嫨lz77綆楁硶錛堟粦鍔ㄥ瓧鍏告垨婊戝姩紿楀彛妯″瀷錛夛紝鍥犱負瀹冭兘鏇村ソ鍦板帇緙╁ぇ澶氭暟鏂囦歡銆


灝界LZW鍦ㄥ勭悊鏌愪簺鐗瑰畾綾誨瀷鐨勫浘鍍忔椂琛ㄧ幇鍑鴻壊錛屽傝儗鏅鍗曚竴銆佸浘褰㈢畝鍗曠殑GIF鍥劇墖錛屼絾zip絳夊帇緙╁伐鍏鋒洿鍊懼悜浜庨噰鐢╨z77絳夋洿閫傚悎涓鑸鏂囦歡鐨勫帇緙╃畻娉曘傚疄楠屼唬鐮佹紨紺轟簡LZW鐨勭畝鍗曞疄鐜幫紝灞曠ず浜嗗叾鍦ㄤ笉鍚岃緭鍏ュ瓧絎︿覆涓婄殑鍘嬬緝鍜岃В鍘嬬緝榪囩▼銆


鎬葷殑鏉ヨ達紝LZW綆楁硶浠ュ叾鐙鐗圭殑鍘嬬緝鏈哄埗鍦ㄧ壒瀹氶嗗煙涓灞曠幇浠峰礆紝浣嗗逛簬鏇村箍娉涚殑鏂囦歡綾誨瀷鍜屾ц兘瑕佹眰錛屽叾浠栫畻娉曞彲鑳芥洿涓洪傜敤銆傞氳繃鐞嗚В榪欎簺綆楁硶鐨勫師鐞嗗拰閫傜敤鍦烘櫙錛屾垜浠鍙浠ユ洿濂藉湴閫夋嫨鍜屽簲鐢ㄥ畠浠浠ユ弧瓚矯V棰嗗煙鐨勪笉鍚岄渶奼傘

『伍』 PS 保存tif格式時的LZW壓縮有什麼用對印刷有影響嗎

今天介紹一下使用ps存儲文件時常用的幾個文件格式。

常規的文件格式

如圖 我們可以看到存儲時有很多格式可以選擇,通常我們選擇的格式有psd、psb、bmp、jpg、pdf、png、tif幾種,下面大致說一下印前會用到的幾種格式。

photoshop格式,文件名後綴psd,通常簡稱psd文件,可以保留文件內所有的操作內容(圖層、蒙版、顏色配置等等),但是文件較大同時存儲文件上限2G,不推薦使用。

psd的一種延伸,總體上與psd沒什麼區別,但是存儲文件上限提高了,大文件存起來也沒什麼壓力(但是實際上印前輸出用不到)。

格式需要選擇基線

用途比較廣的一種圖片格式,在網頁、製作等領域通用。但是其文件存儲大小也是有限制並且會丟失顏色,所以印前製作時如果要求不高,可以使用(注意,jpg文件兼容路徑,所以文件里如果有路徑一定要刪掉,不然輸出文件就會連路徑一起列印出來)。存儲時格式需要選擇基線,否則一些列印軟體識別不了。品質關系著你存儲文件的質量(精度)和大小。

用途比較廣的一種格式,合同、印前輸出、郵件附件等常用,可以完美保存文件內容,同時作為一種矢量文件格式,文件裡面未合層的矢量元素也能得以保留(請注意,是未合層的矢量元素),另外如果做專色通道的話,最好是存pdf同時合並圖層。

常用的透明底文件格式,網頁ppt等的好朋友。

tif文件是我著重推薦的一種文件格式,他存儲文件大小的上限很高,同時可以保護圖層蒙版顏色配置等所有的文件信息,而且兼容所有的列印軟體(強烈推薦),存tif文件時,選擇lzw壓縮可以無損壓縮

『陸』 什麼是"LZW 壓縮"

首先是lzw的概念 LZW(Lempel Ziv Welch)壓縮編碼是一種先進的數據壓縮技術,屬於無損壓縮編碼,該編碼主要用於圖像數據的壓縮。對於簡單圖像和平滑且雜訊小的信號源具有較高的壓縮比,並且有較高的壓縮和解壓縮速度。

一個較大的文件經壓縮後,產生了另一個較小容量的文件。而這個較小容量的文件,我們就叫它是這些較大容量的(可能一個或一個以上的文件)的壓縮文件。而壓縮此文件的過程稱為文件壓縮。

網路上有兩種常見的壓縮格式:一種是Zip,另一種是EXE。其中Zip的壓縮文件可以通過WinZip這套解壓縮工具進行解壓縮,而EXE則是屬於自解壓文件,只要用滑鼠雙擊這類下載後的文件圖標(若您的Windows98屬於Web風格,則只需按一下),便可以自動解壓縮。


因為EXE文件內含解壓縮程序,因此會比Zip略大一些。若想充分考慮到文件容量的大小,其實Zip是一個較佳的選擇。

壓縮技術可分為通用無損數據壓縮與有損壓縮兩大類,但不管是採用何種技術模型,其本質內容都是一樣的,即都是通過某種特殊的編碼方式將數據信息中存在的重復度、冗餘度有效地降低,從而達到數據壓縮的目的。

『柒』 「LZW壓縮格式」急需各位高手講解下!

LZW壓縮格式

LZW(Lempel-Ziv Welch)表示一種演算法,它能把大文件轉變成更適合於網頁使用的較小文件。實現方法是將一系列符號壓縮成單個符號乘以該符號的出現次數。LZW壓縮格式叫做「無隕」數據壓縮格式,即盡管數據得到壓縮,但解壓後的圖像看上去同原文件完全一樣。

熱點內容
二維otsu演算法 發布:2024-10-22 21:06:23 瀏覽:634
福祿壽源碼 發布:2024-10-22 21:06:13 瀏覽:434
pythongoagent 發布:2024-10-22 20:42:05 瀏覽:78
matlabpid演算法 發布:2024-10-22 20:37:51 瀏覽:332
文件遍歷編程 發布:2024-10-22 20:37:47 瀏覽:622
nip伺服器地址在哪 發布:2024-10-22 20:17:48 瀏覽:621
戶戶通衛星鍋出廠設置密碼是什麼 發布:2024-10-22 20:11:32 瀏覽:759
怎麼將伺服器的文件導出來 發布:2024-10-22 20:09:13 瀏覽:556
直播秀場源碼 發布:2024-10-22 20:08:22 瀏覽:751
php遠程資料庫 發布:2024-10-22 20:03:05 瀏覽:730