如何解码GIF的应用程序扩展块?

时间:2014-10-14 04:14:24

标签: decode gif animated-gif

如何解码GIF的应用程序扩展块?

0000300: 73e7 d639 bdad 10ad 9c08 b5a5 0021 ff0b  s..9.........!..
0000310: 4e45 5453 4341 5045 322e 3003 0100 0000  NETSCAPE2.0.....
0000320: 21f9 0409 1900 f600 2c00 0000 0016 01b7  !.......,.......

这个“

21 ff0b  s..9.........!..
    0000310: 4e45 5453 4341 5045 322e 30

“已知,但什么是”03 0100 0000“?

1 个答案:

答案 0 :(得分:5)

以下介绍了GIF Netscape应用程序扩展程序from here

  

该块长度为19个字节。前14个字节属于通用   应用程序扩展格式,语法在GIF89a Specification, section "26. Application Extension"中描述。

     

<强>语法

 0  |     0x21      |  Extension Label
    +---------------+
 1  |     0xFF      |  Application Extension Label
    +---------------+
 2  |     0x0B      |  Block Size
    +---------------+
 3  |               | 
    +-             -+
 4  |               | 
    +-             -+
 5  |               | 
    +-             -+
 6  |               | 
    +-  NETSCAPE   -+  Application Identifier (8 bytes)
 7  |               | 
    +-             -+
 8  |               | 
    +-             -+
 9  |               | 
    +-             -+
10  |               | 
    +---------------+
11  |               | 
    +-             -+
12  |      2.0      |  Application Authentication Code (3 bytes)
    +-             -+
13  |               | 
    +===============+                      --+
14  |     0x03      |  Sub-block Data Size   |
    +---------------+                        |
15  |     0x01      |  Sub-block ID          |
    +---------------+                        | Application Data Sub-block
16  |               |                        |
    +-             -+  Loop Count (2 bytes)  |
17  |               |                        |
    +===============+                      --+
18  |     0x00      |  Block Terminator

您已经知道最多NETSCAPE2.0的数据。下一个字节0x03告诉我们下一个数据子块长度,它总是3个字节。以下0x01是子块ID。对于Netscape块,只有一个数据子块,ID为1

以下2个字节以小端指定循环计数 - 图像帧应循环多少次,即0,0表示循环永远

最后一个字节0x00用于终止数据块。因此,当我们遇到数据子块长度应该为0x00时,我们知道没有剩余子块,我们需要停止读取块。