我正在解析GIF 89a(是的,我需要)文件而且我被困在Application Extension块上。
它们有13个字节的标题(包括开头的21个FF 0B字节)然后有一些数据。有多少数据?我怎么知道读书多了?
如果您知道答案,可以跳过以下部分,并告诉我:)
这page说:
ApplicationData包含软件应用程序使用的信息。该字段由一系列子块构成,这些子块与纯文本扩展块中的数据相同。“
每个子块以一个字节开头,该字节指示后面的数据字节数。此字节后面可以包含1到255个数据字节。该字段中可以有任意数量的子块。
这样我可以解析NETSCAPE 2.0块:
03 01 00 00 00
所以我在PHP中有一个循环:
for (;;)
{
$size = ord(fread($handle, 1));
if ($size == 0) break;
fseek($handle, $size);
}
如果您愿意,可以在Delphi中使用或相同的内容:
while F.Position < F.Size do begin
F.Read(Size, 1); // F is TFileStream
if Size = 0 then break;
F.Position := F.Position + Size;
end;
迭代:
size =读取1个字节; // size = 3;
读取3个字节;
size =读取1个字节;
size = 0所以打破
到目前为止,非常好,问题出现了:XMP数据
所以这个块中的字节就像这样(下面的ASCII):
21 FF 0B 58 4D 50 20 44 61 74 61 58 4D 50
!`.XMP DataXMP
然后转到ASCII XML转储:
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
大约500字节。
我显然无法以与读取NETSCAPE 2.0块相同的方式阅读它。 它似乎以00字节终止。 它应该一直读到00字节吗?然后,如果在NETSCAPE 2.0块上失败!
GIF解码器应该如何在Application Extension块上运行?它们中有多少数据?
答案 0 :(得分:1)
好的 - NETSCAPE 2.0块方法可能没问题,因为我的文件可能被错误地读取了。