Как определить, где в теге ID3v2 закопано изображение? - PullRequest
1 голос
/ 16 апреля 2011

Я пытаюсь загрузить jpg из mp3 (я делаю это во Flash, но это ни здесь, ни там), и я открыл несколько MP3 в редакторе hex, а остальныетег довольно понятен, часть изображения загадка.Есть метка "image / jpeg", но тогда я ожидаю что-то, напоминающее длину байта для изображения, или строковый ключ, который разграничивает конец изображения, но я не вижу ничего подобного, и документация по тегу совершенно бесполезна.

Буду рад некоторым указаниям относительно того, что я ищу здесь.Удивлен тем, насколько неубедительно это получается!

TIA

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Хотя я обычно поддерживаю решение msw, на этом сайте, похоже, нет места для Flash. Тем не менее, он имеет ID3v2 спецификацию . Если вы посмотрите на раздел 4., ID3v2 frame overview, вы увидите, что заголовок фрейма включает размер фрейма, не включая заголовок. Я полагаю, можно с уверенностью предположить, что размер изображения можно рассчитать оттуда.

PD: Я полагаю, вы знаете, как работают теги ID3v2. Если вы этого не сделаете, я рекомендую вам хотя бы бегло взглянуть на спецификацию. По сути, есть заголовок, расширенный заголовок, затем один или несколько кадров, содержащих данные тега (один кадр на элемент данных) и, наконец, заполнение.

РЕДАКТИРОВАТЬ: В целях тестирования я открыл один из моих MP3-файлов с известными данными тегов в моем шестнадцатеричном редакторе. Нашел фрейм с именем APIC, скопировал указанное количество байтов в новый файл и сохранил его как test.jpg. Не совсем сработало.

Копая дальше, я нашел спецификацию кадра . В частности, раздел 4.14, attached picture, в котором описывается своего рода «подзаголовок» для кадра (1-байтовое кодирование текста, mimetype с нулевым разделителем, 1-байтовый тип изображения и описание с нулевым разделителем). Поэтому я урезал эту информацию из данных и скопировал оставшуюся часть в новый jpg, который Windows смогла показать.

Следовательно, методика:

  • Получить размер кадра из заголовка кадра.
  • Разобрать начало кадра для подзаголовка кадра и удалить его. (Где-нибудь между 4 и бесконечными байтами)
  • Рассчитать размер изображения на основе оставшегося количества байтов.
0 голосов
/ 16 апреля 2011

Не изобретай это колесо, если тебе не нравится боль. Это , но один источник для библиотек , которые делают всю работу за вас.

...