gif图片格式解析

 
gif 图片格式解析
飘飘白云 整理
参考 :
网络中文gif资料
 
简介:
GIF(Graphics Interchange Format) CompuServe 公司 开发 像文件存 格式, 1987 开发 GIF 文件格式版本号是 GIF87a 1989 行了 充, 充后的版本号定 义为 GIF89a
 
GFI 像文件以数据 (block) 为单 位来存 储图 像的相 信息。一个 GIF 文件由表示 / 像的数据 、数据子 以及 / 像的控制信息 块组 成,称 GIF 数据流 (Data Stream) 。数据流中的所有控制信息 和数据 都必 在文件 (Header) 和文件 (Trailer)
 
GIF 文件格式采用了 LZW(Lempel-Ziv Walch) 压缩 算法来存 储图 像数据,定 了允 户为图 置背景的透明 (transparency) 属性。此外, GIF 文件格式可在一个文件中存放多幅彩色 / 像。如果在 GIF 文件中存放有多幅 ,它 可以像演幻灯片那 样显 示或者像 画那 演示。
 
GIF .
   法是用来表达序列的一 符号形式,并用 个表达序列中的一些 象来形成更大的 象。 法也用于表达在 定的位置出 现对 象的数目。在此 出的 法用来 明形成 gif 数据流的 序列,用一些 规则 列表来表达。下面列出用于 gif 法的符号定
: <>
::= 符号定
* 0 个或更多的事件
+ 1 个或更多的事件
| 替代元素
[] 元素
gif 法的符号定 :
<GIF 数据流 > ::= < 逻辑视 > < 数据 >* 记录
规则 <Gif 数据流 > 体定 如下。它必 始, 部后面接一个 逻辑视 体, 该实 用其他 规则 来定 。最后,数据 体接 束符。数据 体后面的 * 表示数据 体可以在此位置出 0 或多次。
:
<Gif 数据流 > ::= < 逻辑视 > < 数据 >* 记录
< 逻辑视 > ::= 逻辑视 屏描述 [ 全局色表 ]
< 数据 > ::= < 成象 > |< 特殊用途 >
< 成象 > ::= [ 象控制 ] < 成象 >
< 成象 > ::= < 基于表的 > | 文本
<
基于表的 > ::= 象描述符 [ 局部色表 ] 象数据
<
特殊用途 > ::= | 释扩
 
gif 数据流中的数据 可以分 :控制 、成象 和特殊用途
控制 ,如: 部、 逻辑视 屏描述 像控制 充和尾 记录 ,包含用于控制 理数据流或 置硬件参数的信息。
成像 ,如: 像描述符和 文本 充,包含用于在 设备 上成像的信息和数据。
特殊用途 ,如:注 释扩 充和 充,包含那些既不用于 理数据流也不用于在 设备 上成象的信息。
除了 逻辑视 屏描述 和全局色表之外,特殊用途 的作用域是整个数据流,而其他控制 的作用域是有限的, 限于 后面的成象 起作用。特 殊用途 任何控制 构成限制,它 于解 码过 程来 是透明的。成象 充用于控制 充的作用域限定。 标记 三段:除尾 记录 0x3b 之外, 0x00 0x7f 用于成象 ;0x80 0xf9 用于控制 0xfa 0xff 用于特殊用途 。解 器通 过识别块标记 的作用域。
 
解释 :
色表 - gif 格式利用色表来 示基于光 像。色表分 全局色表和局部色表。全局色表 于那些没有 置局部色表的 像起作用。全局色表的作用域是整个数据流。局部色表 接在其后的 单张图 像起作用。 色表都是可 的。
/*
全局色表这东西是我们感兴趣的东西 , 它有点像 png 格式定义种的调色板 , 如果要修改 gif 图片的颜色 , 哈哈 , 修改这个全局色表就可以 . 如果有全局色表块 , 那么它一定从 gif 流的 14 个字节开始 ( 头部 6 + 逻辑视频描述块 7 )
*/
 
以下是各数据块的说明 , 如果注明为版本 89a 的话 , 则说明这个数据块不会在 87a 版的协议中出现 .
 
(6 个字节 )
              标识 ( 3 ) ---GIF
       版本 ( 3 )    --- 87a (or 89a)
 
逻辑视 屏描述
              逻辑 屏幕 ( 2 )
              逻辑 屏幕高 ( 2 )
              Packed Fields ( 1 )
              背景色索引 ( 1 )
              象素高 ( 1 )
Packed Fields 说明 :
全局色表 1 Bit
色方案 3 Bits
1 Bit
全局色表尺寸 3 Bits
解释 :
              背景 色索引 - 背景 色指向全局色表。背景 色是指那些没有背 像覆盖的 屏部分的 色。若全局色表 志位置 0 则该 字段也被 0 ,并且被忽略。
象素高 - 用于 算原 像中像素的近似高 比。如果 字段的 值为 0 象素的高 比由下面的公式
= ( 象素高 + 15) / 64
字段的取 从最 的比 4 1 到最高的比 1 4 增的 1/64
0 - 没有比 1 255 - 用于 算的
全局色表 - 指示有没有全局色表,如果 该标 志位置 1 全局色表会 接在 该块 之后出 位也用于解 是否 用背景 色索引字段。若 位置 1 背景 色索引字段的 将指向背景 色表。
色彩方案 - 提供 原始 像的 色的位数减 1 代表 像中所使用的整个 色板的大小,而不是 像中所使用的 色的数量。例如,若 字段的 值为 3 则图 像中所使用的 色板的 个色 4 位。
- 表明全局色表是否被排序。如果 位置 1 全局色表按照重要性 减的原 则进 行了排序。典型地,是按照 色的使用 减排序,使用 度最高的 色排在色表的最前面。 这样 便可帮助解 选择 最好的 色子集来成象。
全局色表的尺寸 - 如果全局色表 志位置 1 则该 字段的 值记录 全局色表中所占用的字 数。
 
全局色表
该块 包含一个按照字 节顺 序表示 - 绿 - 三元色的色表。全局色表用于那些没有局部色表 像和 文本 充。在 逻辑视 屏描述 中的全局色表 志位置 1 表示有全局色表。全局色表 接在 逻辑视 屏描述 之后,占用的字
3*2^ (全局色表尺寸 +1
数据组成格式为:
              Red 0
              Green 0
              Blue 0
              ……
              Red n
              Green n
              Blue n
 
像控制 ( 版本 -89a)
       像控制 充包含在 理一个成象 块时 所需的参数。 充只包括一个数据子 该块 是可 的。通常只有一个 像控制 充在成象 之前。 也是在一个数据流中 成象控制 充的唯一限制。
数据组成格式为:
       入符 ( 1 )
象控制 标记 ( 1 )
尺寸 ( 1 )
<Packed Fields>
长时间 ( 2 )
透明 色索引 ( 1 )
块结 ( 1 )
Packed Fields 说明 :
保留 3 Bits
配置方法 3 Bits
户输 1 Bit
透明 1 Bit
解释 :
充引入 - 用于 识别 一个 始, 字段 固定 0x21
像控制 - 识别 当前 是否 为图 形控制 充。 字段 固定 0xF9
尺寸 - 中所包含的字 数。从 尺寸字段 始到快 束符(不含 束符)。 字段包含固定 4
配置方法 - 指示 示后的 理方法。 :
0 - 无指定的配置,解 器不需要做任何 理。
1 - 不做配 像将被留在原位置。
2 - 背景 色。 像所占的区域必 须备 复为 背景 色。
3 - 以前的 色。解 器需要将 像区域恢 复为 原来成象的 色。
4-7 - 未定
户输 - 明在 继续处 理之前是否需要用 户输 入。可以和 入延 一起使用。
透明 - 表明在透明索引字段是否 定透明索引。
- 如果不 0, 字段指定以 1/100 为单 位的 延数。
透明索引 - 如果遇到透明索引, 则显 设备 的相 象素不被改 继续处 理下一个象素。
块终 止符 - 0 度字段 志着 像控制 充得 束。
 
像描述符
一幅 像必 逻辑视 屏描述 中所定 逻辑视 屏界限之内。 像描述符包含 理一个基于 像的表的必要参数。在 定的坐 是参照 逻辑视 屏的像素坐 该块 是一个成象 ,在其前面可以 选择 加上一个或多个控制 ,如: 像控制 充,或者是后面接有局部色表; 像描述符后面 像数据。它是一幅 所必需的。一幅 对应 一个 像描述符。
数据组成格式为:
       象分隔符 ( 1 )
              象左坐 ( 2 )
       ( 2 )
              ( 2 )
       象高度 ( 2 )
       ( 2 )
       <Packed Fields> ( 1 )
Packed Fields 说明 :
局部色表 1 Bit
隔行 1 Bit
1 Bit
保留 2 Bits
局部色表尺寸 3 Bits
解释 :
像分隔符 - 用于 识别图 像描述符的 始。取固定 0x2c
 
局部色表
该块 包含一个按照 - 绿 - 三原色的 序排列的色表。 表作用于 跟其后的 数据 。当局不色表 志位置 1 表出 ,且其后 像的描述符,它所包含的字 数等于
3*2^ (局部色表尺寸 +1
数据组成格式为:
              Red 0
              Green 0
              Blue 0
              ……
              Red n
              Green n
              Blue n
基于表的 像数据
基于表的 像数据由一系列子 块组 成, 个子 最多 255 ,包含一个 为图 个象素所指定的有效色表的索引。索引的 序用 LZW 算法 编码
数据组成格式为:
           LZW 最小 编码 尺寸 ( 1 )
       象数据 数据子 ( n )
解释 :
LZW 最小 编码 尺寸 用于决定在 像数据中用 LZW 编码 最初的位数。
 
释扩 ( 版本 -89a)
释扩 充包含 实际 不属于 gif 数据流的文本信息。它适用于包括 像注 、描述或者任何其他非控制和非 像数据。注 释扩 充将被解 器忽略,或者被保留到以后 理。在任何情况下注 释扩 充也不能中断 数据流的 理。 该块 是可 的;在数据流中的出 量不加限制。
数据组成格式为:
       入符 ( 1 )
       释标记 ( 1 )
       数据 数据子 ( n )
块结 束符 ( 1 )
解释 :
入符 - 标识扩 充的 始。 字段 固定 0x21
释标 - 示某 块为 释扩 充。 固定 0xFE
数据 - 按照子 块顺 序, 个注 最少 1 最多 255 。序列 尾用 块结 束符 标识
块结 束符 - 用来 标识 释扩 充的 束。
 
文本 ( 版本 -89a)
文本 充包括 文本数据和将数据 为图 像所必需的参数。文本数据将用 7 位可印刷 ASCII 字符 编码 。文本数据用在 字段中定 元格字符元素来成象。 个字符用一个 元成象。 该块 使用全局色表。它可以被 形控制 充来修改。 该块为 选块
数据组成格式为:
       入符 ( 1 )
       文本 标记 ( 1 )
尺寸 ( 1 )
文本格左坐 ( 2 )
文本格 ( 2 )
文本格 ( 2 )
文本格高度 ( 2 )
字符 ( 1 )
字符 ( 1 )
文本前景色索引 ( 1 )
文本背景色索引 ( 1 )
文本数据 数据子 ( n )
块结 束符 ( 1 )
解释 :
入符 - 标识 一个 始。取固定 0x21.
文本 标记 - 标识 当前 块为 原文 充。取固定 0x01.
尺寸 - 充中的字 数,取固定 12.
文本格左位置 - 逻辑视 屏的左 ,用象素表示的左 列数,
文本格 位置 - 逻辑视 屏的上 ,用象素表示的上 行数。
原文数据 - 序列, 个子 最少 1 最多 255 序列遇到 块结 束符 时结 束。
块结 束符 – 0 , 用来 块结 束。
 
( 版本 -89a)
充包含 明信息;它遵守如下所述的 法, 块标记为 0xff.
数据组成格式为:
       入符 ( 1 )
       标记 ( 1 )
              尺寸 ( 2 )
       标识 ( 8 )
( 3 )
用数据 数据子 ( n )
块结 束符 ( 1 )
解释 :
充引入符 - 义该块 。取固定 0x21.
标记 - 标识该块为应 。取固定 0xFF.
尺寸 - 指示 该块 中包含的字 数。取固定 11.
标识 - 8 格可印刷 ASCII 字符用来 标识该应 用所属的 充。
- 3 格字 的序列用于 标识 符。一个 用程序可以一 算法来 算一个二 来唯一地 识别这 用是否数于 充。
 
记录
该块为 一个 字段 ,用来指示 数据流的 束。取固定 0x3b.
 
 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值