2009-12-28 7 views

ответ

0

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

+1

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

0

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

+0

Из чего я могу сказать 0xFFE? маркеры - метаданные. Что вы читали, что заставляет вас думать об этом? – CoolAJ86

+0

Кажется, что это граница метаданных (например, начать с FFE1, чтобы получить длину, тогда этот объем длины - это данные EXIF). См. Http://www.media.mit.edu/pia/Research/deepview/exif.html # ExifMarker –

0

Да, чтобы jpeg и exif, я не знаю других.

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

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

Формат exif имеет its own website

+0

Какой маркер совпадает с указателем на данные изображения? – CoolAJ86

0

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

Если вы хотите ограничить себя JPEG, вы можете проверять данные между SOI и EOI. This answer может быть немного приспособленный для того, чтобы делать то, что вам нужно.

1

Я думаю, что этот вопрос связан с этим один 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] + - в конец файла, и его не следует читать. Безопасное решение, если возможно, для контрольной суммы пикселей (хотя вы все еще можете иметь влияние ориентации, цветового профиля, ..).

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

  • Нет связанных вопросов^_^