如何确定图像埋藏在ID3v2标记中的哪个位置?

时间:2011-04-16 05:15:47

标签: flash mp3 id3v2

我正在尝试从mp3中加载jpg(我在Flash中这样做,但这既不在这里也不在那里),我已经在十六进制编辑器中打开了一些MP3,而剩下的标签非常清晰,图像部分是个谜。有一个标签“image / jpeg”,但后来我希望图像的字节长度类似,或者字符串键划分图像的结尾,但我看不到任何类型,标签上的文档完全没有用。

会喜欢我在这里寻找的指导。对于结果如此不直观感到惊讶!

TIA

2 个答案:

答案 0 :(得分:1)

虽然我通常会提倡msw的解决方案,但该网站似乎没有Flash的lib。但是,它有ID3v2 specification。如果您查看第4节ID3v2 frame overview,您会看到帧标题包含帧的大小,不包括标题。我相信可以安全地假设图像大小可以从那里计算出来。

PD:我假设你知道ID3v2标签是如何工作的。如果你不这样做,我建议你至少粗略地看一下规格。基本上,有一个标题,一个扩展标题,然后是一个或多个包含标记数据的帧(每个数据一帧),最后是填充。

编辑:出于测试目的,我在我的十六进制编辑器中打开了一个带有已知标签数据的MP3。找到名为APIC的帧,将指定的字节数复制到新文件中并将其保存为test.jpg。不太好用。

进一步挖掘,我找到了frame spec。具体来说,第4.14节attached picture,它描述了帧的各种“子标题”(1字节文本编码,零分隔模式,1字节图像类型和零分隔描述)。因此,我从数据中删除了这些信息,并将剩余部分复制到Windows能够显示的新jpg上。

因此,该技术是:

  • 从帧头获取帧大小。
  • 解析帧子标题的帧的开头并将其删除。 (4到无限字节之间的任何地方)
  • 根据剩余字节数计算图像大小。

答案 1 :(得分:0)

除非你喜欢疼痛,否则不要重新发明轮子。这是but one source for libraries为您完成的工作。