[ РЕДАКТИРОВАТЬ # 1 OP: Оказывается, на этот вопрос довольно хорошо ответил создатель / сопровождающий exiftool Фил Харви в повторяющейся теме на форуме ExifTool ]
[ РЕДАКТИРОВАТЬ # 2 от OP: из ExifTool FAQ : ExifTool не гарантирует полное удаление метаданных из файла при попытке удалить все метаданные. Смотрите «Ограничения писателя».]
Я хотел бы найти на моих старых жестких дисках фотографии, которых нет на моем текущем резервном диске. Форматы включают в себя jpg, png, tif и т. Д., А также различные необработанные форматы (разные модели камер и производителей).
Меня интересует только уникальность самого изображения, а не уникальность из-за различий, скажем, в значениях тегов exif, наличии / отсутствии самого данного тега exif, встроенных миниатюр и т. Д.
Несмотря на то, что я не ожидаю обнаружить искажение / искажение данных между различными копиями идентичных изображений, я хотел бы обнаружить это, а также различия из-за изменения размера и изменения цвета.
[ Редактировать # 3 от OP: Для пояснения: допустим небольшой процент ложных срабатываний (файл считается уникальным, если это не так), а ложные отрицания крайне нежелательны (ошибочно считается, что файл является дубликатом). ]
Мой план состоит в том, чтобы определить уникальность на основе md5sums после удаления любых метаданных.
Как я могу удалить метаданные?
Хватит ли exiftool -all= <filename>
?
источник
file
не сможет обнаружить форматы изображений RAW иfind
будет работать только с расширениями (может быть полезно лучше описать, что у вас есть)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
где<...>
означает кучу других суффиксов.convert image.jpg - | md5sum
(ImageMagick) дают вам соответствующие суммы MD5.Ответы:
jhead
имеет возможность удалять метаданные не изображения из файлов JPEG. На странице руководства написано:источник
Я бы пошел с ImageMagick для большинства изображений. Это связано с тем, что разные реализации библиотеки будут давать разные сжатые результаты, ImageMagick может выполнять объединение сжатия.
Общие типы просты, потому что в ОС есть библиотеки для чтения и записи. Так:
Это гарантирует, что у вас есть изображения, написанные таким же образом. И тогда вы можете выполнить:
Для форматов RAW я считаю, что единственный способ - это делать так, как говорит Фил, и поэтому:
И тогда контрольная сумма будет такой же. Вам просто нужно скрестить пальцы, чтобы более экзотические форматы изображений можно было создать с помощью одной реализации (или иметь жесткий формат файла).
Отказ от ответственности : это будет работать, чтобы сравнить контрольные суммы между собой. Если вы сохраните контрольные суммы, а затем повторно запустите
-strip
после обновленияzlib
илиlibjpeg
вы можете закончить с совершенно другими контрольными суммами. Вы должны строить контрольные суммы для каждого изображения каждый раз. Учитывая озабоченность по поводу качества изображения, целесообразно выполнить это только один раз .источник
-quality
), все ставки выключены.-strip
. Чтобы увидеть это, запуститеexiftool -a -G1 -s <filename>
файлы, созданные с помощьюmogrify -strip
иexiftool -all=
. Чтобы подтвердить, запуститеexiftool -a -G1 -s <original-filename> | grep JFIF
. Будущие прогоны скрипта должны были бы каким-то образом принять это во внимание, если бы версия JFIF была другой.С
imagemagick
пакетом и не только для JPEG вы можете просто:Из руководства :
Гораздо больше информации и предостережений здесь .
Примечание: это похоже на @grochmal, но гораздо проще и проще.
источник
exiftool -all= *.jpg
чтобы раздеть данные JPG.Возможное решение, которое только что пришло в голову. Это обходит проблему метаданных. Предполагается, что файлы заканчиваются самим изображением, что все метаданные находятся в начале файла.
Давайте назовем текущий резервный диск золотым.
Для изображений на золотом диске:
Для изображений на старых дисках :
Класс P будет содержать изображения, которые находятся на золотом диске, но имеют разные exifdata или имеют повреждение / искажение данных в начальных байтах изображения.
Когда закончите, изучите CLASS P в интерактивном режиме, сравнивая их с их товарищами на золотом диске.
См. РЕДАКТИРОВАТЬ № 3 до ОП.
Назначение в классы U и D должно быть на 100% точным.
Размер CLASS P зависит от размера фрагмента M, поскольку первые байты M + N файла почти наверняка содержат некоторые данные изображения (и все метаданные)
источник
Если старые диски содержат в основном дубликаты (включая метаданные), используйте два шага, чтобы найти уникальные файлы, как определено в OP (который рассматривает два файла как дубликаты, даже если они различаются по метаданным):
Используйте md5 сумм неповрежденных файлов без разметки, чтобы определить, какие файлы на старых дисках являются уникальными (в этом альтернативном смысле) для текущего резервного диска, назначив их либо CLASS uU (unstripped-Unique), либо CLASS D (upilcate). Класс D будет на 100% точным. КЛАСС uU должен быть небольшим (по вышеприведенному предположению) и содержать смесь истинных дубликатов (в смысле OP) и истинных уникальных символов.
Работая с небольшим, то есть управляемым набором файлов в CLASS uU, используйте md5sums и различные методы разметки для разработки метода сравнения файлов, который полезен для целей, изложенных в OP.
источник
Это немного устарело, но да, exiftool работает очень хорошо.
Показать метаданные
Показать метеданные для всех файлов * .jpg
Примечание. Расширение чувствительно к регистру .
То же, что и выше, но есть подкаталоги.
Удалить все метаданные
Удалить все метаданные всех файлов * .jpg в текущем каталоге
То же, что и выше, но есть подкаталоги.
Удалить все метаданные GPS файлов * .jpg в текущем каталоге
источник