GIF(Graphics Interchange Format,图形交换格式)文件是由 CompuServe公司开发的图形文件格式,非常适合于较简单的图像,可利用于小动画或低分辨率电影剪辑等。
简介
图形交换格式(其缩写GIF)是由总部位于美国的软件作家史蒂夫Wilhite于1987年在互联网服务提供商CompuServe公司工作时开发的位图图像格式,并且由于其广泛的认可和可移植性已经在万维网上广泛使用。
该格式对每个图像支持高达8位像素,允许单个图像参考其自己的调色板,其中多达256种不同颜色可以从24位RGB颜色空间中选择。它还支持动画,并允许为每帧选择最多256个颜色的单独调色板。这些调色板限制使得GIF格式不太适合于再现具有连续颜色的彩色照片和其它图像,但是它非常适合于较简单的图像,例如具有实心颜色区域的图形或标志。
使用Lempel-Ziv-Welch(LZW)
无损数据压缩技术压缩GIF图像以减小文件大小而不降低视觉质量。这种压缩技术在1985年被授予专利。1994年软件专利持有人Unisys和CompuServe之间的许可协议的争论推动了便携式网络图形(PNG)标准的发展。到2004年,所有相关专利已过期。
历史
CompuServe在1987年推出了GIF格式,为其文件下载区域提供彩色图像格式,取代了它们之前的运行长度编码(
RLE)。从那之后, GIF变得非常流行,因为它使用LZW数据压缩,这比
PCX和MacPaint等格式的编码更有效,因此即使是非常慢的
调制解调器,也可以在相当短的时间内下载相当大的图像。
原始版本的GIF格式被称为87a。1989年,CompuServe发布了一个增强版本,称为89a,它增加了对动画延迟,透明背景颜色和特定应用程序数据存储的支持。 89a规范还支持将文本标签作为文本,但由于对显示字体的控制很少,所以该特征不被广泛使用。这两个版本可以通过查看文件的前六个字节(“幻数”或“签名”)来区分,当解释为ASCII时,分别称为“GIF87a”和“GIF89a”。
CompuServe鼓励通过为计算机提供可下载的转换实用程序来使用GIF。例如,到1987年12月,苹果IIGS用户可以查看在Atari ST或Commodore 64上创建的图片。GIF是网站上最常用的两种图像格式之一,另一种是黑白
XBM。
用途
GIF适用于有限颜色的锐边线条艺术(例如徽标)。 这利用了格式的无损压缩,有利于均匀颜色和边缘。
GIF可以用于存储游戏的低色彩数据。
GIF可以用于小动画和低分辨率电影剪辑。
GIF通常用作幽默效应的介质。 可以编辑,重新排列或组合一个或多个视频用以创建荒谬的作品,以创建原始作品的创建者所想要的相反效果,或者强调和夸大细节。
文件格式
在概念上,GIF文件描述了填充有零个或多个“图像”的固定大小的图形区域(逻辑屏幕)。许多GIF文件具有填充整个该区域的单个图像。其他将该区域划分为单独的子图像。图像也可以用作动画GIF文件中的动画帧,但是这些图像也不需要填充整个区域。
GIF文件从提供版本的固定长度头(“GIF87a”或“GIF89a”)开始,随后是固定长度的逻辑屏幕描述符,给出逻辑屏幕的大小和其他特征。屏幕描述符还可以指定全局颜色表的存在和大小。
此后,文件被分成段,每个段由1字节的标志引入:一个图像(由0x2C引入,逗号“,”),一个扩展块(由0x21引入,一个感叹号'!')以及预告片(值为0x3B的单个字节,分号';'),它应该是文件的最后一个字节。
图像以固定长度的图像描述符开始,该图像描述符可以指定本地颜色表(如果存在的话,其在下面)的存在和大小。
扩展块由指定扩展类型的附加字节和具有扩展数据的子块的链接列表组成。修改图像的扩展块(例如,指定可选动画延迟时间和可选透明背景颜色的Graphic Control扩展)必须紧跟在段之前。
由图像数据和扩展块使用的链接列表由一系列子块组成,每个子块从给出子块中的后续数据字节数目的字节开始(1到255)。一系列子块由空子块(0字节)终止。
交错
GIF规范允许GIF文件的逻辑屏幕内的每个图像是交错的; 即,其数据块中的栅格线的顺序不是顺序的。 这允许在绘制完整图像之前可以识别的部分显示的图像。
隔行图像从上到下分成8个像素高的条,并且图像的行按以下顺序呈现:
1:每个条带的行0(最顶行)。
2:从每个条的线4。
3:从每个条带的线2和6。
4:从每个条带的行1,3,5和7。
每行内的像素不是隔行扫描的,而是从左到右连续呈现。图像交织的指示符是在图像的头部块中设置的位来决定。