GIF文件格式详细说明.docx

上传人:b****3 文档编号:5487760 上传时间:2022-12-17 格式:DOCX 页数:20 大小:24.01KB
下载 相关 举报
GIF文件格式详细说明.docx_第1页
第1页 / 共20页
GIF文件格式详细说明.docx_第2页
第2页 / 共20页
GIF文件格式详细说明.docx_第3页
第3页 / 共20页
GIF文件格式详细说明.docx_第4页
第4页 / 共20页
GIF文件格式详细说明.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

GIF文件格式详细说明.docx

《GIF文件格式详细说明.docx》由会员分享,可在线阅读,更多相关《GIF文件格式详细说明.docx(20页珍藏版)》请在冰豆网上搜索。

GIF文件格式详细说明.docx

GIF文件格式详细说明

GIF文件格式

一、简介

GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号概念为GIF89a。

GFI图像文件以数据块(block)为单位来存储图像的相关信息。

一个GIF文件由表示图形/图像的数据块、数据子块和显示图形/图像的操纵信息块组成,称为GIF数据流(DataStream)。

数据流中的所有操纵信息块和数据块都必需在文件头(Header)和文件终止块(Trailer)之间。

GIF文件格式采纳了LZW(Lempel-Ziv Walch)紧缩算法来存储图像数据,概念了许诺用户为图像设置背景的透明(transparency)属性。

另外,GIF文件格式可在一个文件中寄存多幅彩色图形/图像。

若是在GIF文件中寄存有多幅图,它们能够像演幻灯片那样显示或像动画那样演示。

二、文件结构

GIF文件结构的典型结构如图6-01所示。

为下文说明方便,在构件左侧加了编号。

1

Header

 

GIF文件头

 

2

LogicalScreenDescriptor

 

逻辑屏幕描述块

 

3

GlobalColorTable

 

全局彩色表

 

 

…扩展模块(任选)…

 

 

 

4

ImageDescriptor

 

图形描述块

 

5

LocalColorTable

 

局部彩色表(可重复n次)

6

TableBasedImageData

 

表式压缩图像数据

7

GraphicControlExtension

 

图像控制扩展块

8

PlainTextExtension

 

无格式文本扩展块

n

9

CommentExtension

 

注释扩展块

10

ApplicatonExtension

 

应用程序扩展块

 

 

…扩展模块(任选)…

 

 

 

11

GIFTrailer

 

GIF文件结束块

 

图6-01GIF文件结构

数据块可分成3类:

操纵块(ControlBlock),图形刻画块(Graphic-RenderingBlock)和专用块(SpecialPurposeBlock)。

(1)操纵块:

操纵块包括有效来操纵数据流(DataStream)或设置硬件参数的信息,其成员包括:

GIF文件头(Header)

逻辑屏幕描述块(LogicalScreenDescriptor)

图形操纵扩展块(GraphicControlExtension)

文件终止块(Trailer)

(2)图形刻画块:

包括有效来刻画在显示设备上显示图形的信息和数据,其成员包括:

图像描述块(ImageDescriptor)

无格式文本扩展块(PlainTextExtension)

(3)特殊用途数据块;包括有与图像处置无关的信息,其成员包括:

注释扩展块(CommentExtension)

应用扩展块(ApplicationExtension)

除在操纵块中的逻辑屏幕描述块(LogicalScreenDescriptor)和全局彩色表(GlobalColorTable)的作用范围是整个数据流(DataStream)之外,所有其他操纵块仅操纵跟在它们后面的图形刻画块。

三、构件详解

1.GIF文件头

文件头描述块(Header)概念GIF数据流(GIFDataStream),它的结构如图6-02所示。

文件头描述块(Header)由GIF标记域(Signature)和版本号(Version)域组成,是一个由6个固定字节组成的数据块,它们用来讲明利用的文件格式是GIF格式及当前所用的版本号。

GIF标记域(Signature)寄存的是“GIF”,版本号域寄存的是1987年5月发布的“87a”或1989年7月发布的“89a”,或加倍新的版本号。

7

6

5

4

3

2

1

0

字节号

域的名称

数据类型

 

0

 

 

Signature

1

GIF标记

3Bytes

 

2

 

 

 

3

 

 

Version

4

版本号

3Bytes

 

5

 

 

图6-02标记/版本数据块的结构

2.逻辑屏幕描述块

逻辑屏幕描述块(LogicalScreenDescriptor)包括概念图像显示区域的参数,包括背景颜色信息。

那个数据块中的坐标相关于虚拟屏幕的左上角,不必然是指显示屏的绝对坐标,这就意味能够参照窗口软件环境下的窗口坐标或打印机坐标来设计图像显示程序。

逻辑屏幕描述块的结构如图6-03所示:

7

6

5

4

3

2

1

0

字节号

域的名称

类型

LogicalScreenWidth

0

逻辑屏幕宽度

Unsigned

 

1

(以像素为定单位)

 

LogicalScreenHeight

2

逻辑屏幕高度

Unsigned

 

3

(以像素为定单位)

 

G

CR

S

Size

4

包装域

见图6-04

BackgroundColorIndex

5

背景颜色索引

Byte

PixelAspectRatio

6

像素宽高比

Byte

图6-03屏幕描述块的结构

逻辑描述块包括7个字节。

字节0和字节1用来讲明逻辑显示屏的宽度,字节3和字节4用来讲明逻辑显示屏的高度,字节4用来描述彩色表的属性,字节5用来指定背景颜色索引,字节6用来计算像素的宽高比。

现作如下说明:

(1)屏幕描述块中的第5个字节称为包装域(PackedFields),它的位结构如图6-04所示,它由4个子域组成:

①全局彩色表标志(GlobalColorTableFlag)域G用来讲明是不是有全局彩色表存在。

若是G=1,表示有一个全局彩色表(GlobalColorTable)将紧跟在那个逻辑屏幕描述块(LogicalScreenDescriptor)以后;那个标志也用来选择背景颜色索引(BackgroundColorIndex)。

若是G=1,背景颜色索引(BackgroundColorIndex)域中的值就用作背景颜色的索引。

②彩色分辨率(ColorResolution)域CR用来表示原始图像可用的每种基色的位数(实际值减1)。

那个位数表示整个调色板的大小,而不是这幅图像利用的实际的颜色数。

例如,若是该域的值CR=3,说明原始图像可用每一个基色有4位的调色板来生成彩色图像。

③彩色表排序标志(SortFlag)域S用来表示全局彩色表(GlobalColorTable)中的颜色是不是按重要性(或称利用率)排序。

若是S=0,表示没有重要性排序;若是S=1表示最重要的颜色排在前。

如此做的目的是辅助颜色数比较少的解码器能够选择最好的颜色子集,在这种情形下解码器就可选择彩色表中开始段的彩色来显示图像。

④全局彩色表大小(SizeofGlobalColorTable)域Size表示表示每一个像素的位数,它用来计算全局彩色表(GlobalColorTable)中包括的字节数。

在全局彩色表标志(GlobalColorTableFlag)域G=0时就不需要计算,G=1时就要计算彩色表的大小,具体计算见下文的“3.全局彩色表”。

7

6

5

4

3

2

1

0

GlobalColorTableFlag

ColorResolution

SortFlag

SizeofGlobalColorTable

图6-04逻辑屏幕描述块中的包装域结构

(2)屏幕描述块中的第6个字节是背景颜色索引(BackgroundColorIndex),它是彩色表的一个索引值,用来指定背景颜色。

若是全局彩色表标志(GlobalColorTableFlag)域G=0,那个域的值也设置为0。

(3)像素宽高比(PixelAspectRatio)域中的值是一个因数,是计算原始图像像素的宽高比的一个近似值。

若是该域的值范围为1~255,若是不等于0,宽高比的近似值按下式计算:

AspectRatio=(PixelAspectRatio+15)/64像素宽高比(PixelAspectRatio)定义成像素的宽度与高度之比,比值的范围在4:

1~1:

4之间,其增量为1/64。

3.全局彩色表

由于一个GIF文件能够包括多幅彩色图像,每幅彩色图像或许都包括适合自身特点的彩色表,因此一个GIF文件能够有好几个彩色表。

但归纳起来只有两类:

全局彩色表(GlobalColorTable)或局部彩色表(LocalColorTable)。

全局彩色表可用于图像本身没有带彩色表的所有图像和无格式文本扩展块(PlainTextExtension),而局部彩色表只用于紧跟在它后面的一幅图像。

在处置全局彩色表和局部彩色表时需要注意下面一些规那么。

①若是GIF文件包括全局彩色表(GlobalColorTable),而且要显示的图像本身又带有局部彩色表,那末显示该幅彩色图像时就用它自己的彩色表,而不用全局彩色表。

在这种情形下,解码器就第一保留全局彩色表(GlobalColorTable),然后利用局部彩色表(LocalColorTable)来显示图像,最后再答复全局彩色表(GlobalColorTable)。

②全局彩色表(GlobalColorTable)和局部彩色表(LocalColorTable)都是可选择的。

由于那个缘故,解码器最好要保留全局彩色表(GlobalColorTable),一直到显现另一个全局彩色表(GlobalColorTable)为止。

如此做以后,关于包括完全没有彩色表的一幅或多幅彩色图像的GIF文件就能够够利用最后保留的全局彩色表(GlobalColorTable)进行处置。

③若是同类型的图像能够利用相同的彩色表来显示,编码器就要尽可能利用一个全局彩色表(GlobalColorTable);若是没有彩色表可用,解码器就能够够利用运算机系统提供的彩色表或解码器自身的彩色表。

④全局彩色表(GlobalColorTable)存在与否由逻辑屏幕描述块(LogicalScreenDescriptor)中字节5的全局彩色表标志(GlobalColorTableFlag)域G的值确信。

若是存在,彩色表就紧跟在逻辑屏幕描述块(LogicalScreenDescriptor)以后。

彩色表的表项数量等于2(n +1),其中n=b2b1b0,每一个表项由3个字节组成,别离代表R、G、B的相对强度,因此彩色表的字节数就等于3×2(n +1)。

彩色表的结构如图6-05所示。

76543210

字节号

域的名称

数据类型

redintensity

0

红色索引000

Byte

greenintensity

1

绿色索引000

Byte

blueintensity

2

蓝色索引000

Byte

redintensity

3

红色索引001

Byte

greenintensity

4

绿色索引001

Byte

blueintensity

5

蓝色索引001

Byte

 

 

redintensity

745

红色索引255

Byte

greenintensity

746

绿色索引255

Byte

blueintensity

767

蓝色索引255

Byte

图6-05彩色表结构

局部彩色表与全局彩色表有相同的存储格式。

4.图像描述块

GIF图像文件格式可包括数量不限的图像,而且也没有一个固定的寄存顺序,仅用一个字节的图像分隔符(ImageSeparator)来判定是不是图像描述块。

每一幅图像都由一个图像描述块(ImageDescriptor)、可有可无的局部彩色表(LocalColorTable)和图像数据组成。

每幅图像必需要落在逻辑屏幕描述块(LogicalScreenDescriptor)中概念的逻辑屏(LogicalScreen)尺寸范围里。

图像描述块(ImageDescriptor)之前能够有一个或多个操纵块,例如图形操纵扩展块(GraphicControlExtension),其后能够随着一个局部彩色表(LocalColorTable)。

不管前后是不是有各类数据块,图像描述块(ImageDescriptor)老是带有图像数据。

图像描述块(ImageDescriptor)的结构如图6-06所示。

7

6

5

4

3

2

1

0

字节号

域的名称

类型

ImageSeparator

0

图像分隔符

Byte

ImageLeftPosition

1

图像左边位置

Unsigned

 

2

(以像素为定单位)

 

ImageTopPosition

3

图像顶部位置

Unsigned

 

4

(以像素为定单位)

 

ImageWidth

5

图像宽度

Unsigned

 

6

(以像素为定单位)

 

ImageHeight

7

图像高度

Unsigned

 

8

(以像素为定单位)

 

 

9

包装域

见图6-07

图6-06图像描述块的结构

在图6-06中,图像分隔符(ImageSeparator)用来标识图像描述块的开始,该域包括固定的值:

0x2C;图像左侧位置(ImageLeftPosition)是相关于逻辑屏幕(LogicalScreen)最左侧的列号,逻辑屏幕最左侧的列好概念为0;图像顶部位置(ImageTopPosition)是相关于逻辑屏幕(LogicalScreen)顶部的行号,逻辑屏幕顶部的行号概念为0。

7

6

5

4

3

2

1

0

LocalColorTableFlag

InterlaceFlag

SortFlag

Reserved

SizeofLocalColorTable

图6-07图像描述块中的包装域结构

图像描述块(ImageDescriptor)中的第9个字节称为包装域(PackedFields)字节,它的位结构如图6-07所示,它由5个子域组成:

①局部彩色表标志(LocalColorTableFlag)域L用来讲明是不是有局部彩色表存在。

若是L=1,表示有一个局部彩色表(LocalColorTable)将紧跟在那个图像描述块(ImageDescriptor)以后;若是G=0,表示图像描述块(ImageDescriptor)后面没有局部彩色表(LocalColorTable),该图像要利用全局彩色表(GlobalColorTable)。

②交插显示标志(InterlaceFlag)域I用来表示该图像是不是交插图像(InterlacedImages)。

若是I=0,表示该图像不是交插图像,若是I=1表示该图像是交插图像。

利用该位标志可明白图像数据是如何寄存的。

GIF文件格式概念了两种数据存储方式:

一种是按图像行持续顺序存储,那个顺序与显示器上显示行的顺序相同;另一种按交插方式存储。

交插图像按行分成如下所示的4组(Group):

Group1:

每隔8行组成一组,从第0行开始显示/第1遍交插

Group2:

每隔8行组成一组,从第4行开始显示/第2遍交插

Group3:

每隔4行组成一组,从第2行开始显示/第3遍交插

Group4:

每隔2行组成一组,从第1行开始显示/第4遍交插

由于显示图像需要较长的时刻,利用这种方式寄存和显示图像数据,人们就能够够在图像显示完成之前看到这幅图像的概貌,而不感觉显示时刻长。

图6-08说明了这种交插图像的存储和显示顺序。

行号

像 点

交插遍次

0

……………………………………

1

 

 

 

1

……………………………………

 

 

 

4

2

……………………………………

 

 

3

 

3

……………………………………

 

 

 

4

4

……………………………………

 

2

 

 

5

……………………………………

 

 

 

4

6

……………………………………

 

 

3

 

7

……………………………………

 

 

 

4

8

……………………………………

1

 

 

 

9

……………………………………

 

 

 

4

10

……………………………………

 

 

3

 

11

……………………………………

 

 

 

4

12

……………………………………

 

2

 

 

13

……………………………………

 

 

 

4

14

……………………………………

 

 

3

 

15

……………………………………

 

 

 

4

16

……………………………………

1

 

 

 

17

……………………………………

 

 

 

4

18

……………………………………

 

 

3

 

19

……………………………………

 

 

 

4

图6-08交插图像显示顺序

③彩色表排序标志(SortFlag)域的含义与全局彩色表(GlobalColorTable)中(SortFlag)域的含义相同。

④保留(Reserved)。

⑤局部彩色表大小(SizeofLocalColorTable)域的值用来计算局部彩色表(GlobalColorTable)中包括的字节数。

5.局部彩色表

局部彩色表(LocalColorTable)用于紧跟在它后面的图像。

彩色表是不是存在取决于图像描述块(ImageDescriptor)中局部彩色表标志(LocalColorTableFlag)位的设置。

彩色表的结构和大小与全局彩色表(GlobalColorTable)完全相同。

6.表基图像数据

GIF图像采纳了LZW算法对实际的图像数据进行紧缩。

为了提高紧缩编码的效率,对LZW编码器输出的代码采纳可变长度码VLC(variable-length-code),不是用位数高度的代码来表示输出,而且代表码字的位数是可变的。

表基图像数据(TableBasedImageData)由LZW最小代码长度(LZWMinimumCodeSize)和图像数据(ImageData)组成,如图6-09所示。

LZW最小代码长度域的值用来确信图像数据中LZW代码利用的初始位数。

图像数据(ImageData)由数据子块(DataSub-blocks)序列组成。

7

6

5

4

3

2

1

0

 

域的名称

类型

LZWMinimumCodeSize

 

LZW最小代码长度

Byte

ImageData

 

图像数据

Data Sub-blocks

图6-09图像数据的存储格式

数据子块(DataSub-blocks)的结构如图6-10所示,这是一个可变长度的数据块,其长度由块大小域(BlockSize)域中的值确信,字节数在0~255之间。

76543210

字节号

域的名称

数据类型

BlockSize

0

块大小

Byte

 

1

 

Byte

 

 

 

Byte

DataValues

 

数值

Byte

 

 

 

Byte

 

 

 

 

 

 

 

Byte

 

 

Byte

 

 

Byte

 

255

 

Byte

图6-10数据子块的结构

7.图形操纵扩展块

图形操纵扩展块(GraphicControlExtension)包括处置图形刻画块时要利用的参数,它的结构如图6-11所示。

现说明如下:

(1)扩展导入符ExtensionIntroducer)用于识别扩展块的开始,域中的值是一个数值等于0x21的固定值。

(2)图形操纵标签(GraphicControlLabel)用于标识当前块是一个图形操纵扩展块,域中的值是一个数值等于0xF9的固定值。

(3)块大小(BlockSize)用来讲明该扩展块所包括字节数,该字节数是从那个块大小(BlockSize)域以后到块终止符之间的字节数。

7

6

5

4

3

2

1

0

字节号

域的名称

类型

ExtensionIntroducer

0

扩展导入符

Byte

GraphicControlLabel

1

图形扩展标签

Byte

 

 

 

 

BlockSize

0

块大小

Byte

1

包装域

Seebelow

DelayTime

2

延时时间

Unsigned

 

 

 

 

TransparentColorIndex

3

透明彩色索引

Byte

 

 

 

 

BlockTerminator

0

块结束符

Byte

图6-11图像描述块的结构

(4)包装域的结构如图6-12所示。

处置方式(DisposalMethod)规定图形显示以后译码器要用表6-03中所述方式进行处置。

表6-03包装域规定的处置方式

域值

处理方法

0

没有指定要做任何处理

1

不处理,图形留在原处

2

显示图形的区域必须要恢复成背景颜色

3

恢复成以前显示的图形

4~7

(未定义)

用户输入标志(UserInputFlag)域表示在继续处置之前是不是需要用户输入响应。

在延不时刻(DelayTime)和用户输入标志(UserInputFlag)都设置为1的情形下,继续处置的开始时刻取决于用户响应输入在前仍是延不时刻终止在前。

7

6

5

4

3

2

1

0

Reserved(保留)

DisposalMethod(处理方法)

UserInputFlag

TransparentColorFlag

图6-12图形操纵扩展块的包装结构

(5)透明(Tr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1