Php 解析GIF应用程序';s扩展块-如何查找块大小?
我正在解析一个GIF 89a(是的,我需要)文件,我被应用程序扩展块卡住了 它们有13个字节的头(包括开始的21个FF0B字节),然后有一些数据。有多少数据?我怎么知道要读多少书 如果您知道答案,可以跳过下面的部分,只需告诉我:) 上面说: ApplicationData包含软件应用程序使用的信息。此字段在一系列子块中构成,这些子块与纯文本扩展块中的数据相同。” 每个子块都以一个字节开始,该字节指示后面的数据字节数。该字节后面可能有1到255个数据字节。该字段中可能有任意数量的子块 通过这种方式,我可以解析NETSCAPE 2.0块,这些块是: 03 01 00 00 因此,我在PHP中有一个循环:Php 解析GIF应用程序';s扩展块-如何查找块大小?,php,delphi,parsing,decode,gif,Php,Delphi,Parsing,Decode,Gif,我正在解析一个GIF 89a(是的,我需要)文件,我被应用程序扩展块卡住了 它们有13个字节的头(包括开始的21个FF0B字节),然后有一些数据。有多少数据?我怎么知道要读多少书 如果您知道答案,可以跳过下面的部分,只需告诉我:) 上面说: ApplicationData包含软件应用程序使用的信息。此字段在一系列子块中构成,这些子块与纯文本扩展块中的数据相同。” 每个子块都以一个字节开始,该字节指示后面的数据字节数。该字节后面可能有1到255个数据字节。该字段中可能有任意数量的子块 通过这种方式
for (;;)
{
$size = ord(fread($handle, 1));
if ($size == 0) break;
fseek($handle, $size);
}
如果您愿意,也可以使用德尔福:
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;
当F.位置
迭代过程如下:
大小=读取1字节;//大小=3
读取3字节
大小=读取1字节
大小=0,所以断开
到目前为止,很好,问题来了:XMP数据
因此,该块中的字节如下所示(ASCII):
21 FF 0B 58 4D 50 20 44 61 74 61 58 4D 50
!`.XMP数据XMP
然后进行ASCII XML转储:
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
大约500字节
我显然不能像读NETSCAPE 2.0块那样读它。
它似乎以00字节结尾。
它应该一直读到00字节吗?那么如果在NETSCAPE 2.0块上失败
GIF解码器在应用程序扩展块上应该如何工作?其中有多少数据?
好的-NETSCAPE 2.0块方法可能很好,但它在XML上失败了,因为我的文件可能被错误读取。我也遇到了同样的问题。因此它不是一个损坏的文件。XMP部分似乎很混乱,因为它似乎没有遵循子块模式。然而,这是故意的。XMP部分有一个神奇的预告片258字节。无论你跳到哪里,你总是会在终止块结束。有关更多信息,请参阅“XMP规范第3部分”。@Bunny83非常感谢!