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年,所以对它的使用已经没有限制了