Маркеры размера файла JPEG, вставка байтов, метаданные IPTC

StackOverflow https://stackoverflow.com/questions/6095123

Вопрос

Я заинтересован в ручном вводе полей IPTC в JPG-файл на уровне байтов.Файл JPEG содержит несколько сегментов метаданных с маркерами приличного размера.Сегментами-контейнерами для IPTC являются:

Приложение 13 - начинается с FF ED XX XX ..

8БИМ Текстовые метаданные IPTC - начинаются с 38 42 49 4D 04 04 00 00 00 00 XX XX ..

IPTC поле начинается с 1C 02 50 XX XX .. (0x50 = 80, поле IPTC #80).

(XX XX = 2 байта длины - слово, описывающее размер упомянутых сегментных данных).

Есть ли какие-либо другие маркеры размера в файле JPEG и метаданных, на которые следует обратить внимание?Должен ли я увеличивать их размер при добавлении сегмента метаданных с пользовательскими полями IPTC?

Как я могу добавить пользовательское поле метаданных (например, #225), которое будет работать со всеми изображениями в формате JPEG, которые уже содержат сегмент IPTC?

Работаю на C#, но это вопрос об операциях с байтами, так что я думаю, язык не имеет значения.

Это было полезно?

Решение

Поскольку никто не ответил, я объясню, что я сделал.

объявление 1.Файловых маркеров, о которых я упоминал выше, достаточно для манипулирования IPTC.

объявление 2.Во время ручных манипуляций с IPTC на уровне байтов вы можете легко повредить файл, если случайно удалите или перезапишете существующие байты, особенно если они являются маркерами (заголовками какой-либо части файла JPEG).

объявление 3.Необходимо найти и увеличить App13 и соответствующие маркеры 8BIM и IPTC с длиной нового поля метаданных (размер содержимого + 5 байт для заголовка IPTC).Так, например, чтобы добавить новое поле #09, вам нужно найти сегмент IPTC 8BIM (38 42 49 4D 04 04 00 00 00 00 XX XX) и увеличить XX XX байт с новым размером слова.Затем увеличьте размер сегмента обертывания App13 (найдите последний сегмент FF ED XX XX перед 8BIM) и, наконец, в конце 8BIM (вы знаете конец благодаря байтам длины сегмента), вы просто добавляете новое поле IPTC, например 1C 02 09 00 05 - добавляет поле метаданных #09 длиной 5.Следующие 5 байт будут считаться содержимым поля = слову, которое вы добавляете.

Да, это немного хаотично, но работает :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top