尽管tiff是那么的复杂,但仍是一种最好的跨平台格式。因为他很灵活,无论在视觉上还是其他方面,都能把任何图象编码成二进制形式而不丢失任何属性。
gif文档
当许多图象方面的权威一想到lzw的时候,他们也会想到gif(graphicsinterchangeformat,读作jiff)这是一种常用的跨平台的位图文档格式,最初为compuserve公司所创。Gif文档通常带有.gif的扩展名,而且在compuseve上大量存在。
gif文档的结构取决于他属于哪一个版本,现在的两种版本分别是gif87a和gif89a,前者较简单。无论是哪个版本,他都以一个长13字节的文档头开始,文档头中包含判定此文档是gif文档的标记、版本号和其他的一些信息。假如这个文档只有一幅图象,文档头后紧跟一个全局色表来定义图象中的颜色。假如含有多幅图象(gif和tiff格式相同,允许在一个文档里编码多个图象),那么全局色表就被各个图象自带的局部色表所替代。
在gif87a文档中,文档头和全局色表之后是图象,他可能会是头尾相接的一串图象中的第一个,每个图象由三部分组成,一个10字节长的图象描述,一个可选的局部色表和位图数据。为有效利用空间,位图数据用lzw算法来压缩。
gif89a结构和此类似,但他还包括可选的扩展块来存放每个图象的附加信息。Gif89a周详定义了四种扩展块:图象控制扩展块,他用来描述图象怎样被显示(例如,显示是应该象一个透明物去覆盖上一个图象,还是简单的替换他);简单文本扩展块,他包含显示在图象中的文本;注释扩展块,他以ascii文本形式存放注释;应用扩展块,他存放生成该文档的应用程式的私有数据。这些扩展块能够出现在文档中全局色表的任何地方。
gif最显著的长处是他的广泛使用和他的紧密性。但他有两个弱点,一个是用gif格式存放的文档最多只能含有256种颜色。另一个可能更重要,就是那些使用了gif格式的软件研发者必须征得compuserve的同意,他们每卖出一个拷贝都要向compuserve付版税。这个政策是compuserve仿效unisys公司作出的,他抑制了那些程式员在他的图象应用程式中支持gif文档。
png文档
png(portablenetworkgraphic,发音做ping)文档格式是作为gif的替代品研发的,他能够避免使用gif文档所碰到的常见问题。他从gif那里继承了许多特征,而且支持真彩色图象。更重要的是,在压缩位图数据时他采用了一种颇受好评的lz77算法的一个变种,lz77则是lzw的前身,而且能够免费使用。由于篇幅所限,在这里就不花时间来具体讨论png格式了。
jpeg文档
jpeg(jointphotographicexpertsgroup,发音做jay-peg)文档格式最初由c-cubemicrosystems推出,是为了提供一种存储深度位象素的有效方法,例如对于照片扫描,颜色很多而且差别细微(有时也不细微)。Jpeg和这里讨论的其他格式的最大区别是jpeg使用一种有损压缩算法,无损压缩算法能在解压后准确再现压缩前的图象,而有损压缩则牺牲了一部分的图象数据来达到较高的压缩率。但是这种损失很小以至于人们很难察觉。
jpeg图象压缩是个复杂的过程,经常需要专门的硬件来帮助。首先图象以象素为单位分成8*8的块。然后,每个块分三个步骤被压缩。第一步使用dct(discretecosinetransform)离散余弦变换把8*8的象素矩阵变成8*8的频率(也就是颜色改变的速度)矩阵。第二步对频率矩阵中的值用量化矩阵进行量化,滤掉那些总体上对图象不重要的部分。第三步,也就是最后一步,对量化后的频率矩阵使用无损压缩。
因为被量化后的频率矩阵缺了许多高频信息,通常能被压缩到一半甚至更少。无损压缩一般根本不能压缩真正的照片图象,所以50%的压缩率已是相当不错了,但另一方面,无损压缩能把一些图象文档尺寸减少90%,这样的图象文档就不适合用jpeg来压缩。
jpeg的有损部分产生在第二步,量化矩阵的值越高,从图象中丢掉的信息就越多,从而压缩率就越高,可是同时图象的质量就越差。在jpeg压缩时能够选择一个量化因子,这个因子的值决定了量化矩阵中的数值。理想的量化因子要在压缩率和图象质量间达到平衡,所以对不同的图象要选择不同的量化因子,通常要经过若干次尝试后方可确定.




