Хотя я обычно поддерживаю решение msw, на этом сайте, похоже, нет места для Flash. Тем не менее, он имеет ID3v2 спецификацию . Если вы посмотрите на раздел 4., ID3v2 frame overview
, вы увидите, что заголовок фрейма включает размер фрейма, не включая заголовок. Я полагаю, можно с уверенностью предположить, что размер изображения можно рассчитать оттуда.
PD: Я полагаю, вы знаете, как работают теги ID3v2. Если вы этого не сделаете, я рекомендую вам хотя бы бегло взглянуть на спецификацию. По сути, есть заголовок, расширенный заголовок, затем один или несколько кадров, содержащих данные тега (один кадр на элемент данных) и, наконец, заполнение.
РЕДАКТИРОВАТЬ: В целях тестирования я открыл один из моих MP3-файлов с известными данными тегов в моем шестнадцатеричном редакторе. Нашел фрейм с именем APIC
, скопировал указанное количество байтов в новый файл и сохранил его как test.jpg
. Не совсем сработало.
Копая дальше, я нашел спецификацию кадра . В частности, раздел 4.14, attached picture
, в котором описывается своего рода «подзаголовок» для кадра (1-байтовое кодирование текста, mimetype с нулевым разделителем, 1-байтовый тип изображения и описание с нулевым разделителем). Поэтому я урезал эту информацию из данных и скопировал оставшуюся часть в новый jpg, который Windows смогла показать.
Следовательно, методика:
- Получить размер кадра из заголовка кадра.
- Разобрать начало кадра для подзаголовка кадра и удалить его. (Где-нибудь между 4 и бесконечными байтами)
- Рассчитать размер изображения на основе оставшегося количества байтов.