C #: вынуть часть изображения JPEG для резервного копирования метаданных? - PullRequest
0 голосов
/ 03 апреля 2010

Это будет немного назад по сравнению с типичным подходом.

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

Что я хочу сделать, так это удалить сжатую часть изображения из файла JPEG, чтобы оставить все остальное без изменений. Это резервное копирование EXIF, Makernotes, IPTC, XMP и т. Д. В начале или в конце файла.

То, что я до сих пор пробовал, - это убрать все метаданные из копии исходного JPEG и использовать его как основу для того, какие байты будут извлечены из оригинала. После просмотра необработанных данных не кажется, что вырезанная копия является смежной в исходной копии. Может быть некоторая информация заголовка, все еще остающаяся в урезанной версии. Я действительно не знаю. Полагаю, это не очень хороший способ.

Существуют ли какие-либо маркеры, которые абсолютно точно сообщают мне, где начинается и заканчивается сжатые данные изображения JPEG? Я понимаю, что файлы JPEG имеют 0xFFD8 и 0xFFD9 для обозначения начала и конца изображения, но выяснилось, что метаданные действительно находятся между этими маркерами.

Я использую C #.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 августа 2015

Вы можете использовать класс JpegSegmentReader из моей библиотеки MetadataExtractor для извлечения определенных сегментов из изображения JPEG.

0 голосов
/ 19 ноября 2010

Чтобы сделать это правильно, вам нужно полностью проанализировать формат JPEG / JFIF и удалить все, что вам не нужно. Все метаданные хранятся в сегментах или трейлерах приложения после EOI JPEG, так что, вероятно, вы бросите все остальное. Полный анализ JPEG / JFIF не является тривиальным, и для этого я отсылаю вас к спецификации JPEF / JFIF.

...