Вопрос:
Файлы JPG могут содержать текстовые комментарии через маркер FE FF. У меня есть несколько вопросов по этому поводу:
-
Как указать длину комментария? Можно ли вообще не указывать длину, если комментарий находится в конце файла?
-
Возможно ли иметь действительный файл jpg без изображения, которое состоит только из комментария? Как будет выглядеть такой файл в двоичном формате? Я предполагаю, что это будет:
FF D8 — SOI: start of image (note that no frame data follow) FF D9 — EOI: end of image FF FE — COM: text comment (binary) — (text) Лучший ответ:
1: Большинство сегментов JPEG содержат 2-байтовый маркер (0xFFFE в случае COM), за которым следует длина сегмента (2 байта). См. Синтаксис и структуру JPEG (Википедия).
2: Имеет ли смысл иметь только таблицы (только сегменты DHT и DQT) JPEG без данных изображения. Я не уверен в отсутствии таблиц и данных изображений, но, по крайней мере, вам не нужны данные изображения. Не уверен, насколько это полезно, или как большинство программ JPEG будет интерпретировать его, хотя….
Ответ №1
Метаданные JPEG хранятся в структуре тегов следующим образом:
0xFF – ввод тега
0xXX – значение тега
0xXX 0xXX – длина тега в большом порядке, включая длину длины (2)
<данные тега (длина-2 байта)>
Эта структура требует, чтобы каждый тег мог содержать максимум 65534 байта метаданных. Для более крупных структур значение истинной длины сохраняется в данных тега, а несколько тегов содержат всю структуру.
Пример тега комментария. Он включает в себя нулевой ограничитель, но это не требуется.
FF FE 00 08 48 45 4C 4C 4F 00 – “HELLO”