GIF格式
标准介绍
GIF(Graphics Interchange Format)的原义是"图像互换格式",是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。
GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,是一种连续色调的无损压缩格式,其压缩率一般在50%左右,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。
GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。所以GIF的图像深度从lbit到8bit,也即GIF最多支持256种色彩的图像。
GIF解码较快,因为采用隔行存放的GIF图像,在边解码边显示的时候可分成四遍扫描。第一遍扫描虽然只显示了整个图像的八分之一,第二遍的扫描后也只显示了1/4,但这已经把整幅图像的概貌显示出来了。在显示GIF图像时,隔行存放的图像会给您感觉到它的显示速度似乎要比其他图像快一些,这是隔行存放的优点。
GIF格式的文件是8为图像文件,最多为256色,不支持Alpha通道。gif格式产生的文件较小,常用于网络传输,做网页上见到的图片大多是gif和jpeg格式的。gif格式与jpeg格式相比,其优点在于gif格式的文件可以保持动画效果。
GFI图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。
文件结构
GIF文件结构的典型结构如图所示。为下文说明方便,在构件左边加了编号。
1 | Header |
| GIF文件头 |
|
2 | Logical Screen Descriptor |
| 逻辑屏幕描述块 |
|
3 | Global Color Table |
| 全局彩色表 |
|
| … 扩展模块(任选) … |
|
|
|
4 | Image Descriptor |
| 图形描述块 |
|
5 | Local Color Table |
| 局部彩色表(可重复n次) | 可 |
6 | Table Based Image Data |
| 表式压缩图像数据 | 重 |
7 | Graphic Control Extension |
| 图像控制扩展块 | 复 |
8 | Plain Text Extension |
| 无格式文本扩展块 | n |
9 | Comment Extension |
| 注释扩展块 | 个 |
10 | Applicaton Extension |
| 应用程序扩展块 |
|
| … 扩展模块(任选) … |
|
|
|
11 | GIF Trailer |
| GIF文件结束块 |
|
GIF文件结构
数据块可分成3类:控制块(Control Block),图形描绘块(Graphic-Rendering Block)和专用块(Special Purpose Block)。
(1) 控制块:
GIF文件头(Header)
逻辑屏幕描述块(Logical Screen Descriptor)
图形控制扩展块(Graphic Control Extension)
文件结束块(Trailer)
(2) 图形描绘块:
图像描述块(Image Descriptor)
无格式文本扩展块(Plain Text Extension)
(3) 特殊用途数据块;
注释扩展块(Comment Extension)
应用扩展块(Application Extension)
除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩色表(Global Color Table)的作用范围是整个数据流(Data Stream)之外, 所有其他控制块仅控制跟在它们后面的图形描绘块。