2013-07-03 3 views
0

JPG-файлы могут содержать текстовые комментарии через маркер FE FF. У меня есть несколько вопросов по этому вопросу:Как текстовые комментарии в файлах JPG работают?

  1. Как указать длину комментария? Можно ли вообще не указывать длину, если комментарий находится в конце файла?

  2. Возможно ли иметь действительный файл 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. Пропустить длину невозможно, поскольку она является частью структуры тегов JPEG. Я не уверен, что файл JPEG считается действительным, если ему не хватает данных изображения; это зависит от конкретного автора программного обеспечения, если он будет отклонен или нет. – BitBank

+0

@BitBank Спасибо, не могли бы вы рассказать об этом немного больше (как задана длина) и добавить его в качестве ответа? – mafu

ответ

2

1: сегменты Большинство JPEG содержит 2 байта маркера (0xFFFE в случае COM), а затем на длину сегмента (2 байта). См. JPEG syntax and structure (Wikipedia).

2: Действителен только для таблиц (только для сегментов DHT и DQT) JPEG без данных изображения. Я не уверен в отсутствии таблиц и данных изображений, но, по крайней мере, вам не нужны данные изображения. Не уверен, насколько это полезно, или, как большинство программного обеспечения JPEG будет интерпретировать его, хотя ....

1

метаданные JPEG хранятся в структуре тегов следующим образом:

0xFF - тег интродьюсером
0xXX - значение тега
0xXX 0xXX - длина тега в большой Endian порядке включая длину длины (2)
< тегов данных (длина-2 байта)>

Эта структура требует, чтобы каждая метка может содержать максимум 65534 байт метаданных. Для более крупных структур значение истинной длины сохраняется в данных тега, а несколько тегов содержат всю структуру.

Пример тега комментария. Он включает в себя нулевой ограничитель, но это не требуется.

FF FE 00 08 48 45 4C 4C 4F 00 - "HELLO"

Смежные вопросы