lzw壓縮演算法
LZW壓縮演算法
LZW演算法流程圖
LZW演算法基於轉換串表(字典)T,將輸入字元串映射成定長(通常為12位)的碼字。在12位4096種可能的代碼中,256個代表單字元,剩下3840給出現的字元串。
LZW字典中的字元串具有前綴性,即 ωK∈T=>;ω
T。
LZW演算法流程:
步驟1: 開始時的詞典包含所有可能的根(Root),而當前前綴P是空的;
步驟2: 當前字元(C) :=字元流中的下一個字元;
步驟3: 判斷綴-符串P+C是否在詞典中
(1) 如果「是」:P := P+C // (用C擴展P) ;
(2) 如果「否」
① 把代表當前前綴P的碼字輸出到碼字流;
② 把綴-符串P+C添加到詞典;
③ 令P := C //(現在的P僅包含一個字元C);
步驟4: 判斷碼字流中是否還有碼字要譯
(1) 如果「是」,就返回到步驟2;
(2) 如果「否」
① 把代表當前前綴P的碼字輸出到碼字流;
② 結束。
LZW解壓演算法
具體解壓步驟如下:
(1)解碼開始時Dictionary包含所有的根。
(2)讀入在編碼數據流中的第一個碼字 cW(它表示一個Root)。
(3)輸出String.cW到字元數據流Charstream。
(4)使pW=cW 。
(5)讀入編碼數 據流 的下一個碼字cW 。
(6)目前在字典中有String.cW嗎?
YES:1)將String.cW輸出給字元數據流;
2)使P=String.pW;
3)使C=String.cW的第一個字元;
4)將字元 串P+C添 加進Dictionray。
NO :1)使P=String.pW ;
2)使C=String.pW的第一個字元;
3)將字元串P+C輸出到字元數據流並將其添加進Dictionray(現在它與cW相一致)。
(7)在編碼數據 流中還有Codeword嗎?
YES:返回(4)繼 續進行 解碼 。
NO:結束解碼 。
❷ LZW演算法問題
LZW演算法全名叫做Lempel-Ziv-Welch Encoding,是一種數據壓縮演算法,它是有專利的,不過現今大部分專利都己經過期。它可以對文本進行簡單的壓縮,壓縮比對於一般場合還是可以適用的,另外使用的比較多的就是GIF圖像了。
LZW演算法中有幾個比較重要的概念:字元,字元串,編碼表。它把數據流看成一個字元序列,並將字元序列組織成一系列的字元串,並給每個字元串一個編碼,最後存儲的就是字元串的編碼,這樣就節省了空間。如將ababba表示為編碼1532,而1523用12bit就可以表示出來,比原來5*8bit就節省了不少空間。LZW的編碼表是動態創建的,並且通過編碼後的數據流可以恢復出與編碼時同樣的編碼表,這樣在數據存儲與傳輸的時候就不需要保存原始的編碼表,這也是與一些在編碼之前就有固定的編碼表的演算法有著巨大的區別。
1.編碼過程:
LZW是一個固長編碼的演算法的,即對於每一個字元或字元串的編碼都是等長的。為了說明的方便,我決定用16bit作為編碼,前255作為字元編碼,256,257另作它用,這將在3中進行說明。所以字元串的編碼將從258開始。
編碼的整個過程如下:
1. 初始化編碼表,編碼起始號,並置當前字元串為空;
2. 讀入一個字元,如果為EOF,輸出當前字元串,並結束,否則進入3;
3. 將新讀入的字元與當前字元串組成新的字元串,如果新的字元串在編碼表中出現,則繼續進行2,否則進入4;
4. 將新的字元串加入到編碼表中,分配編號,設當前字元串的長度為N,輸入新字元串的N-1長度前綴的編碼,並將當前字元串置為當前字元串的一個長度為1的後綴,再執行2。
2.解碼過程:
對於解碼,唯一需要知道的就是編碼的長度了,每次從編碼流中讀取相應bit的長度,就形成一個編碼,再通過該編碼從編碼表中找出相對應的串輸出即可。由於沒有存儲編碼時對應的編碼表,在解碼時需要同時構造編碼表。
解碼過程如下:
1. 初始化編碼表,並置前一個編碼為空;
2. 取一個編碼,如果編碼為結束,則結束。否則進行3;
3. 輸出編碼所代表的字元串,如果前一個編碼不為空,將前一個編碼的字元串與當前字元串的第一個字元作為新的串加入編碼表中,置前一個編碼為當前編碼,並執行2。
❸ 用ps做的圖存儲為TIFF格式時,選用LZW壓縮,會不會影響圖片的印刷質量
用ps做的圖存儲為TIFF格式時,選用LZW壓縮,會影響圖片的印刷質量。最好不要壓縮.要是實在大的話,建議用移動硬碟拷過去。不過,印刷物對質量不是特別嚴格的話也可以.那隻是損失5%左右。或者存儲為jpg的格式,這樣導出點陣圖。
tiff是一種比較靈活的圖像格式,它的全稱是tagged image file format,文件擴展名為tif或tiff。該格式支持256色、24位真彩色、32位色、48位色等多種色彩位,在此同時支持rgb、cmyk以及ycbcr等多種色彩模式,支持多平台等。
tiff文件可以是不壓縮的,文件體積較大,也可以是壓縮的,支持raw、rle、lzw、jpeg、 ccitt3組和4組等多種壓縮方式。
LZW就是通過建立一個字元串表,用較短的代碼來表示較長的字元串來實現壓縮。 LZW壓縮演算法是Unisys的專利,有效期到2003年,所以對它的使用是有限制的。
❹ LZW演算法的對壓縮數字流的實現
一般採用字典壓縮方法:LZW即是其中一種
目前廣泛採用的字典壓縮方法包括兩種類型:一種是在數據壓縮過程中,尋找當前等待進行壓縮處理的數據串中是否在已經處理過的數據串中出現過,如果確實曾經出現過,則利用指向該已經進行處理數據串的指針代替當前等待進行壓縮的數據串。此時,字典是隱式的,它用曾經處理過的數據描述。這類字典壓縮演算法都是基於Abraham與Jakob Ziv於1977年提出並發表的LZ77演算法,該演算法提出後,Storer與Szymanski於1982年對其進行了改進,並提出相應的LZSS演算法,成為現在實踐中廣泛使用的該類演算法的基礎。如流行的壓縮程序:WINZIP,PKZIP等就是基於這種演算法的。另外一種字典壓縮演算法是為輸入數據創建一個短語字典,如果在當前等待進行壓縮的數據流中發現字典中已經存在相應的短語,則利用該短語在字典中的相應索引值取代原始數據,這種類型的演算法基於Lampel與Ziv在1978年提出並發表的LZ78演算法。後來該壓縮演算法由Sperry公司的研究員Welch於1984年在硬體設計過程中,改進並用於高性能磁碟控制器的設計,同時,由Lempel和Ziv在實際工作中實現,LZW編碼也由此而得名。這種編碼不僅可以用於文字數據的壓縮,而且也可以成功地用於某些圖像數據的壓縮處理,如GIF和TIFF等圖像格式。
❺ 「LZW壓縮格式」急需各位高手講解下!
LZW壓縮格式
LZW(Lempel-Ziv Welch)表示一種演算法,它能把大文件轉變成更適合於網頁使用的較小文件。實現方法是將一系列符號壓縮成單個符號乘以該符號的出現次數。LZW壓縮格式叫做「無隕」數據壓縮格式,即盡管數據得到壓縮,但解壓後的圖像看上去同原文件完全一樣。
❻ 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壓縮有三個重要的對象:數據流(CharStream)、編碼流(CodeStream)和編譯表(String Table)。在編碼時,數據流是輸入對象(文本文件的據序列),編碼流就是輸出對象(經過壓縮運算的編碼數據);在解碼時,編碼流則是輸入對象,數據流是輸出對象;而編譯表是在編碼和解碼時都須要用藉助的對象。字元(Character):最基礎的數據元素,在文本文件中就是一個位元組,在光柵數據中就是一個像素的顏色在指定的顏色列表中的索引值;字元串(String):由幾個連續的字元組成; 前綴(Prefix):也是一個字元串,不過通常用在另一個字元的前面,而且它的長度可以為0;根(Root):一個長度的字元串;編碼(Code):一個數字,按照固定長度(編碼長度)從編碼流中取出,編譯表的映射值;圖案:一個字元串,按不定長度從數據流中讀出,映射到編譯表條目. LZW壓縮演算法的基本原理:提取原始文本文件數據中的不同字元,基於這些字元創建一個編譯表,然後用編譯表中的字元的索引來替代原始文本文件數據中的相應字元,減少原始數據大小。看起來和調色板圖象的實現原理差不多,但是應該注意到的是,我們這里的編譯表不是事先創建好的,而是根據原始文件數據動態創建的,解碼時還要從已編碼的數據中還原出原來的編譯表.
❽ LZW演算法的LZW壓縮的特點
LZW碼能有效利用字元出現頻率冗餘度進行壓縮,且字典是自適應生成的,但通常不能有效地利用位置冗餘度。
具體特點如下:
l)LZW壓縮技術對於可預測性不大的數據具有較好的處理效果,常用於TIF格式的圖像壓縮,其平均壓縮比在2:1以上,最高壓縮比可達到3:1。
2)對於數據流中連續重復出現的位元組和字串,LZW壓縮技術具有很高的壓縮比。
3)除了用於圖像數據處理以外,LZW壓縮技術還被用於文本程序等數據壓縮領域。
4)LZW壓縮技術有很多變體,例如常見的ARC、RKARC、PKZIP高效壓縮程序。
5)對於任意寬度和像素位長度的圖像,都具有穩定的壓縮過程。壓縮和解壓縮速度較快。
6)對機器硬體條件要求不高,在 Intel 80386的計算機上即可進行壓縮和解壓縮。
❾ 壓縮演算法原理
哈夫曼
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。
哈夫曼演算法在改變任何符號二進制編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重復或序號的序列。
2.1 原理
我不打算探究哈夫曼編碼的所有實際的細節,但基本的原理是為每個符號找到新的二進製表示,從而通常符號使用很少的位,不常見的符號使用較多的位。
簡短的說,這個問題的解決方案是為了查找每個符號的通用程度,我們建立一個未壓縮數據的柱狀圖;通過遞歸拆分這個柱狀圖為兩部分來創建一個二叉樹,每個遞歸的一半應該和另一半具有同樣的權(權是 ∑ N K =1 符號數 k , N 是分之中符號的數量,符號數 k 是符號 k出現的次數 )
這棵樹有兩個目的:
1. 編碼器使用這棵樹來找到每個符號最優的表示方法
2. 解碼器使用這棵樹唯一的標識在壓縮流中每個編碼的開始和結束,其通過在讀壓縮數據位的時候自頂向底的遍歷樹,選擇基於數據流中的每個獨立位的分支,一旦一個到達葉子節點,解碼器知道一個完整的編碼已經讀出來了。
壓縮後的數據流是 24 位(三個位元組),原來是 80 位( 10 個位元組)。當然,我應該存儲哈夫曼樹,這樣解碼器就能夠解碼出對應的壓縮流了,這就使得該例子中的真正數據流比輸入的流數據量大。這是相對較短的數據上的副作用。對於大數據量來說,上面的哈夫曼樹就不佔太多比例了。
解碼的時候,從上到下遍歷樹,為壓縮的流選擇從左 / 右分支,每次碰到一個葉子節點的時候,就可以將對應的位元組寫到解壓輸出流中,然後再從根開始遍歷。
2.2 實現
哈夫曼編碼器可以在基本壓縮庫中找到,其是非常直接的實現。
這個實現的基本缺陷是:
1. 慢位流實現
2. 相當慢的解碼(比編碼慢)
3. 最大的樹深度是 32 (編碼器在任何超過 32 位大小的時候退出)。如果我不是搞錯的話,這是不可能的,除非輸出的數據大於 2 32位元組。
另一方面,這個實現有幾個優點:
1. 哈夫曼樹以一個緊密的形式每個符號要求 12 位(對於 8 位的符號)的方式存儲,這意味著最大的頭為 384 。
2. 編碼相當容易理解
哈夫曼編碼在數據有噪音的情況(不是有規律的,例如 RLE )下非常好,這中情況下大多數基於字典方式的編碼器都有問題。
❿ LZW演算法的介紹
LZW演算法又叫「串表壓縮演算法」就是通過建立一個字元串表,用較短的代碼來表示較長的字元串來實現壓縮。 LZW壓縮演算法是Unisys的專利,有效期到2003年,所以對它的使用已經沒有限制了