如何解码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
“?
答案 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
时,我们知道没有剩余子块,我们需要停止读取块。