[ПРАВКА №1 от OP:Оказывается, на этот вопрос довольно хорошо ответил создатель/сопровождающий exiftool Фил Харви вдублирующая тема на форуме ExifTool]
[ПРАВКА №2 от OP:ОтЧасто задаваемые вопросы по ExifTool:ExifTool — этонетгарантированно полностью удаляет метаданные из файла при попытке удалить все метаданные.См. «Ограничения для авторов».]
Я хотел бы поискать на своих старых жестких дисках фотографии, которых нет на моем текущем резервном диске. Форматы включают jpg, png, tif и т. д., а также различные форматы raw (разные модели камер и производители).
Меня интересует только уникальность самого изображения, а не уникальность, обусловленная, скажем, различиями в значениях exif-тегов, наличием/отсутствием самого exif-тега, встроенными миниатюрами и т. д.
Хотя я и не ожидаю обнаружить какие-либо повреждения/порчу данных между разными копиями в остальном идентичных изображений, я хотел бы это обнаружить, а также различия, вызванные изменением размера и цвета.
[Правка №3 от OP:Для пояснения: небольшой процент ложных срабатываний допустим (файл считается уникальным, хотя на самом деле это не так), а ложные срабатывания крайне нежелательны (файл ошибочно считается дубликатом).]
Мой план состоит в том, чтобы определить уникальность на основе md5sums после удаления всех метаданных.
Как удалить метаданные?
Будет exiftool -all= <filename>
достаточно?
решение1
Сimagemagick
пакет ине только для JPEGВы можете просто:
mogrify -strip ./*.jpg
Это ./
делается для того, чтобы избежать проблем с именами файлов, начинающимися с «-».
Отруководство:
-strip
удалите из изображения все профили, комментарии или следующие фрагменты PNG: bKGD,cHRM,EXIF,gAMA,iCCP,iTXt,sRGB,tEXt,zCCP,zTXt,date.
Многодополнительная информация и предостереженияздесь.
Это похоже на @grochmal, но гораздо понятнее и проще.
решение2
jhead
имеет возможность удалять не-изображения метаданных из файлов JPEG. На странице руководства говорится:
-dc
Удалить поле комментария из заголовка JPEG. Обратите внимание, что комментарий не является частью заголовка Exif.
-de
Полностью удалить заголовок Exif. Оставить другие разделы метаданных нетронутыми.
-di
Удалить раздел IPTC, если он есть. Оставить другие разделы метаданных нетронутыми.
-dx
Удалить раздел XMP, если он есть. Оставить другие разделы метаданных нетронутыми.
-du
Удалите разделы jpeg, которые не являются Exif, не комментируются и иным образом не влияют на изображение, например, данные, которые Photoshop может оставить на изображении.
-purejpg
Удалить все разделы JPEG, которые не нужны для рендеринга изображения. Удаляет все метаданные, которые могли остаться в изображении от различных приложений. Сочетание параметров
-de
-dc
и-du
.
решение3
Это немного устарело, но да, exiftool работает очень хорошо.
Показать метаданные
exiftool photo.jpg
Показать метаданные для всех файлов *.jpg
Примечание: расширениес учетом регистра.
exiftool -ext jpg
То же, что и выше, но с включением подкаталогов.
exiftool -r -ext jpg .
Удалить все метаданные
exiftool -all= -overwrite_original photo.jpg
Удалить все метаданные всех файлов *.jpg в текущем каталоге.
exiftool -all= -overwrite_original -ext jpg
То же, что и выше, но с включением подкаталогов.
exiftool -all= -r -overwrite_original -ext jpg .
Удалить все метаданные GPS из файлов *.jpg в текущем каталоге.
exiftool -gps:all= *.jpg
решение4
Вместо MD5 используйте ImageMagick identify
для печатиподписьфайлов изображений. Найдите файлы с одинаковой подписью. Файлы с одинаковой подписью имеют одинаковое содержимое.
Например, файлы a.png
, b.png
и c.png
различны, так как имеют разные контрольные суммы MD5:
$ md5sum *
a9ee60d8237a4b3f6cdd6e57c24b1caf a.png
e8661c4fd7761984a74945e273fd4d09 b.png
21c808d62ff9c7675c1f9ca20d2f6578 c.png
Однако у них есть общая подпись:
$ identify -format "%# %f\n" *
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 a.png
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 b.png
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 c.png
Следовательно, они являются дубликатами.