![](https://img.haomeiwen.com/i16703396/d32bd658b22d0d10.gif)
![](https://img.haomeiwen.com/i16703396/f49a397c9d0fc7ad.png)
上图是一个简单的100x100的gif图片,使用16进制程序打开的数据是:
![](https://img.haomeiwen.com/i16703396/24c09591ecfef941.png)
数据头(Header)数据:47 49 46 38 39 61。ASCII表示GIF89a,89a表示版本。
逻辑图像描述(Logical Screen Descriptor):0A 00 0A 00 91 00 00。
第一二个字节0A 00表示宽度。
第三四个字节0A 00表示高度。
第五个字节91转换成二进制是10010001。1表示颜色表标记,001表示颜色解析度,0表示排序标记,001表示颜色表的尺寸大小。
第六个字节00表示背景颜色的索引值。
第七个字节00表示像素宽高比。
全局颜色表(Global Color Table):FF FF FF FF 00 00 00 00 FF 00 00 00。
每三个字节表示一种颜色,如:FFFFFF。
在图形控制拓展块中(Graphic Control Extension)中的数据:21 F9 04 00 00 00 00 00
第一个字节(21)表示拓展块的头。
第二个字节(F9)表示块的类型,F9表示图像控制扩展块。
第三个字节(04)表示后面的有效数据是四个字节。
第四个字节(00)拆成2进制000(保留字段) 000(标识下一帧的渲染方法) 0(用户输入标记,0表示用户不用输入) 0(透明颜色处理,0表示不处理) 。
第五和第六字节的数据(00 00)就表示延迟时间。
第七个字节(00)表示透明颜色索引。
第八个字节(00)表示拓展块的尾。
图像描述块(ImageDescriptor)数据:2C 00 00 00 00 0A 00 0A 00 00。
第一个字节(2C)表示图像的描述。
第二三个字节(00 00)表示图像的左偏移。
第四五个字节(00 00)表示图像的上偏移。
左偏移和上便宜就意味着图像是否是从画布坐标(0,0)开始绘制。
第六七个字节(0A 00)表示图像的宽度。
第八九个字节(0A 00)表示图像的高度。
第十个字节(00)转换为二进制是00000000,0表示局部颜色表的标识,0表示图像是否是逐行扫描,0表示排序标志,00表示保留字段,000表示局部颜色表的尺寸大小。
局部颜色表(Local Color Table):在我们这个图片中,数据为空。大概意思是如果ImageDescriptor中第十个字节中的局部颜色表标识为1,,此处数据就会跟在ImageDescriptor块后面。主要作用是根据索引寻找颜色数据。
图像数据(Image Data):02 16 8C 2D 99 87 2A 1C DC 33 A0 02 75 EC 95 FA A8 DE 60 8C 04 91 4C 01 00。
第一个字节(02)表示LZW编码初始表大小的位数,LZW算法。
中间的字节表示数据块。
最后一个字节(00)表示图像结尾。
纯文本拓展名(Plain Text Extension):这部分是可选的,用来绘制一个简单的文本图像。这里我们没有数据。就说下各个字节所代表的意思。
第一个字节标识拓展块,固定值21。
第二个字节表示图形文本拓展块01。
第三个字节表示块大小,通常是0C。
第四五字节表示文本左边界距离。
第六七字节表示文本上边界距离。
第八九字节表示文本宽度。
第十十一字节表示文本高度。
第十二字节表示单个单元格宽度。
第十三字节表示单个单元格高度。
第十四字节表示前景色在全局颜色列表中的索引。
第十五字节表示背景色在全局颜色列表中的索引。
中间代表数据块,最后以00结尾。
应用程序扩展(Application Extension):应用程序可以在这里定义自己的标识、信息等。这里我们没有数据。就说下各个字节所代表的意思。
第一个字节固定是21,标识一个拓展块。
第二个字节表示图形控制扩展标签,固定值FF。
第三个字节块大小,一般是0B。
第四到十一个字节表示用来鉴别应用程序自身的标识(8个连续)。
第十二到十四字节表示应用程序定义的特殊标识码(3个连续ASCII字符)。
文件终结器(Trailer):3B固定值。
网友评论