Вопрос

Существуют ли маркеры конца exif/конца-xmp/конца-iptc/начала данных, которые я мог бы использовать для получения контрольной суммы только части данных jpg/jpeg (и других форматов изображений) ?

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

Решение 6

Медиа-теги имеет поддержку контрольных сумм для JPEG, MP3, M4A и т. д.

Другие советы

Я думаю, что этот вопрос связан с этим Вычислить хэш только основных данных изображения (исключая метаданные) для изображения., https://stackoverflow.com/a/10075170/890106 дает элемент ответа, если вы ищете код.

Однако это может работать не со всеми вариантами JPG:некоторые из них могут вставлять несколько изображений (формат нескольких изображений MPF/CIPA, дополнительную информацию можно найти на сайте). http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF.html), и у вас могут еще остаться метаданные.Кроме того, некоторые программы помещают UID в виде --[0-9A-F]+-- в конец файла, и его нельзя читать.Самое безопасное решение, если, вероятно, использовать контрольную сумму пикселей (хотя вы все равно можете влиять на ориентацию, цветовой профиль и т. д.).

Одним из простых способов получить хеш-сумму только пиксельных данных является преобразование JPEG в 32-битный BMP или, альтернативно, в PNG и вычисление на его основе хеш-суммы.Это удалит всю связанную информацию из файлов JPEG и даже сопоставит файлы JPEG с разными кодировками, которые приводят к одним и тем же пиксельным данным.Конечно, вы также можете использовать данные пикселей в памяти полученных BMP напрямую, если они у вас есть (т.В Windows есть несколько функций API, позволяющих получить его из любого поддерживаемого типа изображения).

Да для jpeg и exif, для остальных не знаю.

Спецификация JPEG, которая у меня есть, называется JFIF (формат обмена файлами JPEG). Она взята из Приложения B к стандарту ISO 10918-1 и, как и все спецификации ISO, требует внимательного прочтения, чтобы понять, как преобразовать спецификацию в структуры данных.Я думаю этот гораздо легче следовать

Формат EXIF ​​анализируется так же, как формат TIFF.каждый фрагмент имеет тип и размер, поэтому вы просто перемещаетесь по фрагментам, пока не дойдете до фрагмента данных изображения.у него есть указатель на данные изображения (на самом деле указатели на полосы, но я почти уверен, что вы можете предположить, что все, что находится после первой полосы данных изображения и до конца файла, является данными изображения.

Формат exif имеет свой собственный сайт

Вам придется просмотреть каждый формат.Для JPEG это выглядит так структура подразумевает, что вы можете просто выполнить контрольную сумму разделов, которые начинаются с FFEn (например.0xFFE1) и суммируйте контрольную сумму байтов, указанных после каждого маркера (похоже, что длина следует за маркером и составляет 2 байта в формате с прямым порядком байтов).Более подробную информацию см. здесь.

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

Если вы хотите ограничиться JPEG, вы можете выполнить контрольную сумму данных между SOI и EOI. Этот ответ можно немного адаптировать под то, что вам нужно.

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