2011-04-16 60 views
1

我试图从mp3中加载jpg(我在Flash中执行此操作,但这不是在这里或那里),并且我在一个十六进制编辑器中打开了几个MP3,而其余的标签非常清晰,图像部分是一个谜。有一个标签“image/jpeg”,但是我希望图像的字节长度类似于字符串,或者是一个字符串键来标记图像的结尾,但我没有看到类似内容,标签上的文档完全没有帮助。如何确定图像埋入ID3v2标签的位置?

想了解一下我在这里寻找的一些指导。惊讶于这是多么不直观的!

TIA

回答

0

除非你喜欢痛苦,否则不要重塑那个车轮。这是为你工作的but one source for libraries

+0

哈哈。不,我不是在寻找苦难,但我确实想在闪存中建立这个,并且找不到一个这样做的库。我拒绝相信这是非常复杂的。 – 2011-04-16 15:43:07

+0

我看的越多,我相信这比我最初确信它不是更复杂:) – 2011-04-16 20:01:36

1

虽然我通常会主张msw的解决方案,但该网站似乎没有Flash的库。但是,它有ID3v2 specification。如果你看第4部分,ID3v2 frame overview,你会看到帧头包含帧的大小,不包括头部。我相信假设可以从那里计算图像大小是安全的。

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

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

挖掘更深一层,我找到了frame spec。具体来说,第4.14节,attached picture,它描述了帧的种类(1字节文本编码,零分隔mimetype,1字节图片类型和零分隔描述)的“subheader”。因此,我从数据中删除了这些信息,并将其余部分复制到Windows能够显示的新jpg中。

因此,这种技术是:从帧头

  • 获得帧大小。
  • 解析出帧副标题的帧的开始并将其删除。 (4位和无限字节之间的任意位置)
  • 根据剩余字节数计算图像大小。
+0

是的......我明白了,但文档有点密集。我希望田地会更直接一点。前几个字段(曲目名称,艺术家名称等)都是非常明显的,但后来是图像标签,后面是相当长的一系列字符,这些字符在每个mp3中都是相同的,所以它们必须是某种指示符,但他们是什么意思?然后是没有明显结束的图像数据......我很惊讶这是“标准”。 :) – 2011-04-16 20:00:36

+0

那么,原来它是标准的,只是记录在另一个地方。检查编辑。 – Kyte 2011-04-17 00:59:24

+0

@ Dr.Dredel:如果您不添加@part,您会收到通知吗?我一直在想...... – Kyte 2011-04-17 16:09:39