[ EDIT # 1 by OP: Il s'avère que cette question est très bien répondue par le créateur / mainteneur d'exiftool, Phil Harvey, dans un fil de discussion en double sur le forum ExifTool ]
[ EDIT # 2 by OP: De ExifTool FAQ : ExifTool n'est pas garanti de supprimer complètement les métadonnées d'un fichier lorsque vous essayez de supprimer toutes les métadonnées. Voir «Limitations de Writer».]
J'aimerais rechercher sur mes anciens disques durs des photos qui ne se trouvent pas sur mon lecteur de sauvegarde actuel. Les formats incluent jpg, png, tif, etc ..., ainsi que divers formats bruts (différents modèles et fabricants d'appareils photo).
Je ne m'intéresse qu'à l'unicité de l'image elle-même et non à l'unicité en raison des différences, par exemple, des valeurs des balises exif, de la présence / absence d'une balise exif donnée elle-même, des miniatures intégrées, etc.
Même si je ne m'attends pas à trouver de corruption / pourriture de données entre différentes copies d'images autrement identiques, j'aimerais détecter cela, ainsi que les différences dues au redimensionnement et aux changements de couleur.
[ Éditer n ° 3 par OP: pour clarification: un petit pourcentage de faux positifs est tolérable (un fichier est considéré comme unique lorsqu'il ne l'est pas) et les faux négatifs sont hautement indésirables (un fichier est conclu à tort comme étant un doublon). ]
Mon plan est d'identifier l'unicité basée sur les sommes md5 après avoir supprimé toutes les métadonnées.
Comment puis-je supprimer les métadonnées?
Sera exiftool -all= <filename>
suffisant?
la source
file
ne découvrira pas les formats d'image RAW etfind
ne fonctionnera que sur les extensions (il peut être utile de mieux décrire ce que vous avez)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
où<...>
signifie un tas d'autres suffixes.convert image.jpg - | md5sum
(ImageMagick) vous donnent les sommes MD5 appropriées.Réponses:
jhead
a la possibilité de supprimer les métadonnées non-image des fichiers JPEG. La page de manuel indique:la source
J'irais avec ImageMagick pour la plupart des images. En effet, différentes implémentations de bibliothèque produiront des résultats compressés différents, ImageMagick peut effectuer une unification de compression.
Les types courants sont faciles car le système d'exploitation dispose de bibliothèques pour les lire et les écrire. Donc:
Cela garantira que les images sont écrites de la même manière. Et puis vous pouvez effectuer:
Pour les formats RAW, je crois que la seule façon est de faire comme le dit Phil, et donc:
Et puis la somme de contrôle serait la même. Il vous suffit de croiser les doigts pour que les formats d'image les plus exotiques puissent être créés avec une seule implémentation (ou avoir un format de fichier rigide).
Avertissement : Cela fonctionnera pour comparer les sommes de contrôle entre eux. Si vous stockez les sommes de contrôle puis réexécutez le
-strip
après une mise à jour dezlib
oulibjpeg
vous pouvez vous retrouver avec des sommes de contrôle complètement différentes. Vous devez à chaque fois créer les sommes de contrôle pour chaque image. Compte tenu des préoccupations concernant la qualité de l'image, il est sage de ne l'exécuter qu'une seule fois .la source
-quality
), tous les paris sont désactivés.-strip
. Pour voir cela, exécutezexiftool -a -G1 -s <filename>
sur des fichiers créés avecmogrify -strip
etexiftool -all=
. Pour confirmer, exécutezexiftool -a -G1 -s <original-filename> | grep JFIF
. Les futures exécutions du script devraient en quelque sorte en tenir compte si la version JFIF était différente.Avec le
imagemagick
package et pas seulement pour les JPEG, vous pouvez simplement:Du manuel :
Beaucoup plus d'informations et mises en garde ici .
Remarque: Ceci est similaire à @grochmal mais beaucoup plus simple et simple.
la source
exiftool -all= *.jpg
pour supprimer les données jpg.Une solution possible qui vient à l'esprit. Il évite le problème des métadonnées. Il suppose que les fichiers se terminent par l'image elle-même, que toutes les métadonnées se trouvent au début du fichier.
Faisons référence au lecteur de sauvegarde actuel comme le lecteur d'or.
Pour les images sur le disque d'or:
Pour les images sur les anciens disques :
La classe P contiendra des images qui se trouvent sur le disque d'or, mais qui ont des exifdata différentes, ou qui ont une corruption / pourriture de données dans les octets de tête de l'image.
Une fois terminé, examinez la CLASSE P de manière interactive, en les comparant à leurs camarades sur le disque d'or.
Voir EDIT # 3 à OP.
L'affectation en CLASSE U et D doit être précise à 100%.
La taille de la CLASSE P dépend de la taille du bloc M, car les premiers M + N octets d'un fichier contiennent presque certainement des données d'image (et toutes les métadonnées)
la source
Si les anciens lecteurs contiennent principalement des doublons (y compris les métadonnées), utilisez deux étapes pour trouver les uniques tels que définis dans l'OP (qui considère deux fichiers comme des doublons même s'ils diffèrent dans les métadonnées):
Utilisez md5sums de fichiers non dépouillés intacts pour identifier les fichiers sur les anciens lecteurs qui sont uniques (dans ce sens alternatif) au lecteur de sauvegarde actuel, en les affectant à CLASS uU (unstripped-unique) ou à la classe D (upilcate). LA CLASSE D sera précise à 100%. La CLASSE uU doit être petite (selon l'hypothèse ci-dessus) et contenir un mélange de vrais doublons (dans le sens OP) et de vrais uniques.
En travaillant avec le petit ensemble de fichiers, c'est-à-dire gérable, dans CLASS uU, utilisez des sommes md5 et diverses techniques de suppression pour concevoir une méthode de comparaison de fichiers utile aux fins énoncées dans OP.
la source
C'est un peu vieux, mais oui, exiftool fonctionne très bien.
Afficher les métadonnées de
Afficher les métadonnées pour tous les fichiers * .jpg
Remarque: L'extension est sensible à la casse .
Identique à ci-dessus, mais inclut des sous-répertoires.
Supprimer toutes les métadonnées
Supprimez toutes les métadonnées de tous les fichiers * .jpg du répertoire actuel
Identique à ci-dessus, mais inclut des sous-répertoires.
Supprimez toutes les métadonnées GPS des fichiers * .jpg du répertoire actuel
la source