Я пытаюсь написать код для извлечения информации Exif из JPG.Кодировка длины сегмента JPG
Exif хранится в сегменте APP1 файла JPG. Согласно the Exif spec, формат сегмента APP1 предполагается начать так:
FF E1 // APP1 segment marker
nn nn // Length of segment
45 // 'E'
78 // 'x'
69 // 'i'
66 // 'f'
И это продолжается до тех пор, пока это FF
следует нечто иное, чем FF
или 00
.
Глядя на JPG в шестнадцатеричном редакторе, я вижу FF E1
и строку Exif
, но у меня возникают проблемы с декодированием байтов длины. Пример: в одном jpg мой шестнадцатеричный редактор сообщает мне, что сегмент APP1 имеет длину 686 байт, но байты длины - F7 C8
.
Как я должен использовать эти байты, чтобы получить число из 686 десятичных чисел?
Edit: Вот первая часть примера файла:
FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08
Edit: На самом деле, я думаю, я мог знать, что здесь происходит. Действительно ли сегмент APP1 «содержит» другие сегменты? Например, если данные эскизов считаются внутри APP1, то эта длина представляется более разумной. Может ли кто-нибудь подтвердить/опровергнуть это?
Вы уверены, что сегмент APP1 не 63432 байта? Откуда вы знаете, что это 686? Это, вероятно, 686 плюс размер миниатюры. – Gabe
@gabe Я искал следующие байты маркеров 'FF xx' нового сегмента. Это верно? – Blorgbeard
Да, я бы ожидал, что FFDB станет следующим маркером (DQT). – Gabe