Gif格式简要介绍

Gif格式简要介绍

Gif格式标准主要有87a和89a两个版本。

Gif由一个个的block组成,按照我的理解可以将Gif图数据分为两个部分,一个部分为头部,包含了Header(Gif的识别),Logical Screen Descriptor(描述Gif图展示的逻辑屏幕的参数),Global Color Table(全局的调色板,这个为可选)。之后就是数据主体部分,可以是图像的数据以及各种扩展块。

介绍分为两个部分,一个部分是Gif中比较通用的一些数据组织形式介绍,一个部分是Gif图的数据块的介绍。

一下如果没有特殊说明,就是87a标准中就有的,有特殊说明,为89a标准中才出现的,主要为各种扩展块。

通用的数据组织形式

Data Sub-blocks 数据子块

数据子块是包含数据的单元,它们没有一个标签(label)。无论在何种格式中指定数据块,这些块在控制块的上下文中进行处理。数据子块的第一个字节标识了跟随的数据字节的数量,一个数据子块能够包含0到255数据字节,块的大小并不包含指定大小的字节本身。空的子块指定大小的字节包含着0x00。

     7 6 5 4 3 2 1 0        Field Name                    Type
     +---------------+
  0  |               |       Block Size                    Byte
     +---------------+
  1  |               |
     +-             -+
  2  |               |
     +-             -+
  3  |               |
     +-             -+
     |               |       Data Values                   Byte
     +-             -+
 up  |               |
     +-   . . . .   -+
 to  |               |
     +-             -+
     |               |
     +-             -+
255  |               |
     +---------------+

Block Terminator 块的终结标识

这个数据子块用来终结一系列的数据子块,其包含一个单独的字节指示块的大小为0,之后并不包含其它数据。

      7 6 5 4 3 2 1 0        Field Name                    Type
     +---------------+
  0  |               |       Block Size                    Byte
     +---------------+

数据块

数据块分为四个部分介绍,第一部分为文件头和紧密跟随着文件头的相关数据块;第二部分为和数据流中图像相关的数据块;第三部分为各种扩展。最后一个部分为文件尾。

Header及Header相关

Header(文件头)

Header标识了文本中的GIF数据流,Signature字段标记了数据流的开始,Header字段是必须的,Header定义如下:

      7 6 5 4 3 2 1 0        Field Name                    Type
     +---------------+
   0 |               |       Signature                     3 Bytes
     +-             -+
   1 |               |
     +-             -+
   2 |               |
     +---------------+
   3 |               |       Version                       3 Bytes
     +-             -+
   4 |               |
     +-             -+
   5 |               |
     +---------------+

依次为

  • 3 Bytes Signature: “GIF”三个字节
  • 3 Bytes Version: 版本号 “87a” “89a”等

Logical Screen Descriptor

Logical Screen Descriptor包含了描述了在设备上呈现图像区域所需的参数。Logical Screen Descriptor字段是必须的,并且必须紧跟在Header后面。Logical Screen Descriptor定义了依次为:

    7 6 5 4 3 2 1 0        Field Name                    Type
     +---------------+
  0  |               |       Logical Screen Width          Unsigned
     +-             -+
  1  |               |
     +---------------+
  2  |               |       Logical Screen Height         Unsigned
     +-             -+
  3  |               |
     +---------------+
  4  | |     | |     |       <Packed Fields>               See below
     +---------------+
  5  |               |       Background Color Index        Byte
     +---------------+
  6  |               |       Pixel Aspect Ratio            Byte
     +---------------+
  • Unsigned(2字节) Logical Screen Width 宽度,单位为像素
  • Unsigned(2字节) Logical Screen Height 高度,单位为像素
  • Packed Fields(1字节)
    • 1 Bit Global Color Table Flag
    • 3 Bits Color Resolution
    • 1 Bit Sort Flag
    • 3 Bits Size of Global Color Table
  • 1 Byte Background Color Index
  • 1 Byte Pixel Aspect Ratio

描述一下一些字段的意思:

  • Global Color Table Flag 描述是否存在Global Color Table的标识,值分别为
    • 0 - 不会在Logical Screen Descriptor后面跟随着Global Color Table, Background Color Index字段也就没有意义
    • 1 - 在Logical Screen Descriptor后面跟随着Global Color Table,Background Color Index也就有意义
  • Color Resolution:数值为原始图像的原色的位数减去1。这个值代表了整个调色板的大小,并不是图像中实际使用的颜色数量。例如若这个值为3,代表原始图像的调色盘每个原色有4位。
  • Sort Flag 标识Global Color Table是否根据重要性递减被排序过了,数值分别为
    • 0 - 没有排序过
    • 1 - 递减排序,最重要的颜色优先
  • Size of Global Color Table:如果Global Color Table Flag为1,这个字段的值用来统计Global Color Bytes中的byte数。即使没有指定全局颜色表,根据上述公式设置此字段,以便解码器可以选择显示流的最佳图形模式。(该字段由字节的3个最低有效位组成)。
  • Background Color Index 背景颜色在Global Color Table中的索引。背景颜色用于被没被图像覆盖的区域的像素。如果Global Color Table Flag是0,这个字段应为0并且被忽视。
  • Pixel Aspect Ratio:用于计算原始图像中像素的宽高比的近似值。如果这个字段为0,则根据以下公式计算宽高比的近似值:
    Aspect Ratio = (Pixel Aspect Ratio + 15) / 64
    Pixel Aspect Ratio:像素的宽和高的商,这个值范围允许以1/64的增量从4:1到1:4

Global Color Table

该块包含一个color table,是一系列的bytes代表红-绿-蓝三原色。Global Color

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值