Существуют ли маркеры конца-exif/end-of-xmp/end-of-iptc/start-of-data, которые я мог бы использовать для получения контрольной суммы только данных часть jpg/jpeg (и других форматов изображений)?Данные контрольной суммы JPEG (не весь файл)
ответ
MediaTags поддерживает контрольную сумму для JPEG, MP3, M4A, и т.д.
Один простой способ получить хеш-сумму только данных пикселя будет состоять в том, чтобы преобразовать JPEG в 32-битный BMP или, альтернативно, в PNG и вычислить хэш-аут от этого. Это приведет к удалению всей связанной информации из JPEG-файлов и даже соответствует JPEG-файлам с различными кодировками, которые приводят к тем же данным пикселя. Разумеется, вы также можете использовать данные в пикселях памяти из полученных BMP напрямую, если у вас есть (то есть Windows имеет несколько функций API, чтобы получить их из любого поддерживаемого типа изображения).
Вам нужно будет посмотреть на каждый формат. Для JPEG это выглядит так: the structure подразумевает, что вы можете просто выполнить контрольную сумму секций, начинающихся с FFEn (например, 0xFFE1), и контрольной суммы байтов, указанных после каждого маркера (похоже, длина следует за маркером и составляет 2 байта в формате big- endian). Для получения дополнительной информации см. here.
Из чего я могу сказать 0xFFE? маркеры - метаданные. Что вы читали, что заставляет вас думать об этом? – CoolAJ86
Кажется, что это граница метаданных (например, начать с FFE1, чтобы получить длину, тогда этот объем длины - это данные EXIF). См. Http://www.media.mit.edu/pia/Research/deepview/exif.html # ExifMarker –
Да, чтобы jpeg и exif, я не знаю других.
Спектр JPEG, который у меня есть, называется JFIF (формат обмена файлами JPEG), он исходит из Приложения B стандарта ISO 10918-1 и, как и все спецификации ISO, тщательно изучает, как преобразовать спецификацию в структуры данных , Я думаю, что this намного проще следовать
Формат EXIF разбирает, как формат TIFF. каждый кусок имеет тип и размер, поэтому вы просто ходите по кускам, пока не дойдете до фрагмента данных изображения. он имеет указатель на данные изображения (фактически указывает на полосы, но я уверен, что вы можете считать все после того, как первая полоска данных изображения в конец файла будет представлять собой данные изображения.
Формат exif имеет its own website
Какой маркер совпадает с указателем на данные изображения? – CoolAJ86
Поскольку вы хотите сделать это для различных форматов изображений, вы должны просто использовать библиотеку декомпрессии общего назначения и запустить свою контрольную сумму для несжатых данных. Это позволит вам сопоставлять одинаковые изображения, даже если они закодированы по-разному на диске.
Если вы хотите ограничить себя JPEG, вы можете проверять данные между SOI и EOI. This answer может быть немного приспособленный для того, чтобы делать то, что вам нужно.
Я думаю, что этот вопрос связан с этим один Compute hash of only the core image data (excluding metadata) for an image, 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 может варьироваться в зависимости от округления, используемого в декодере. Обычно вы не сможете увидеть разницу, но она изменит контрольную сумму. –