[ EDYCJA nr 1 autorstwa OP: Okazuje się, że na dość dobre odpowiedzi twórca / opiekun exiftool Phil Harvey w duplikacie wątku na forum ExifTool ]
[ EDYCJA 2 przez OP: Z FAQ ExifTool : Nie gwarantuje się, że ExifTool całkowicie usunie metadane z pliku podczas próby usunięcia wszystkich metadanych. Zobacz „Ograniczenia pisarza”.]
Chciałbym przeszukać moje stare dyski twarde w poszukiwaniu zdjęć, których nie ma na bieżącym dysku z kopią zapasową. Formaty obejmują jpg, png, tif itp., A także różne surowe formaty (różne modele kamer i producentów).
Interesuje mnie tylko wyjątkowość samego obrazu, a nie wyjątkowość z powodu różnic, powiedzmy, wartości tagów exif, obecności / braku samego tagu exif, osadzonych miniatur itp.
Mimo że nie spodziewam się, że znajdę jakiekolwiek uszkodzenie / rotację danych między różnymi kopiami w przeciwnym razie identycznych obrazów, chciałbym to wykryć, a także różnice wynikające z zmiany rozmiaru i zmiany kolorów.
[ Edytuj nr 3 przez OP: Dla wyjaśnienia: niewielki odsetek fałszywych trafień jest dopuszczalny (plik jest uznawany za wyjątkowy, gdy nie jest), a fałszywe negatywy są wysoce niepożądane (plik jest błędnie uznawany za duplikat). ]
Mój plan polega na zidentyfikowaniu unikatowości na podstawie sum md5 po usunięciu wszystkich metadanych.
Jak mogę usunąć metadane?
Czy exiftool -all= <filename>
wystarczy?
źródło
file
nie uda się odkryć formatów obrazów RAW ifind
będzie działał tylko na rozszerzeniach (przydatne może być lepsze opisanie tego, co masz)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
gdzie<...>
oznacza kilka innych sufiksów.convert image.jpg - | md5sum
(ImageMagick) dają odpowiednie sumy MD5.Odpowiedzi:
jhead
ma możliwość usuwania metadanych innych niż obrazy z plików JPEG. Strona podręcznika mówi:źródło
Wybrałbym ImageMagick dla większości obrazów. Wynika to z faktu, że różne implementacje bibliotek dają różne skompresowane wyniki, ImageMagick może przeprowadzić ujednolicenie kompresji.
Typowe typy są łatwe, ponieważ system operacyjny ma biblioteki do ich odczytu i zapisu. Więc:
Zapewni to, że masz obrazy zapisane w ten sam sposób. A potem możesz wykonać:
W przypadku formatów RAW uważam, że jedynym sposobem jest zrobienie tego, co mówi Phil, a zatem:
A potem suma kontrolna byłaby taka sama. Musisz tylko trzymać kciuki, aby bardziej egzotyczne formaty obrazu można było utworzyć za pomocą jednej implementacji (lub mieć sztywny format pliku).
Oświadczenie : To zadziała, aby porównać sumy kontrolne między sobą. Jeśli przechowujesz sumy kontrolne, a następnie uruchom ponownie
-strip
po aktualizacjizlib
lublibjpeg
możesz zakończyć z zupełnie innymi sumami kontrolnymi. Za każdym razem musisz zbudować sumy kontrolne dla każdego obrazu. Biorąc pod uwagę obawy dotyczące jakości obrazu, mądrze jest uruchomić to tylko raz .źródło
-quality
), Wszystkie zakłady są wyłączone.-strip
. Aby to zobaczyć, uruchomexiftool -a -G1 -s <filename>
pliki utworzone za pomocąmogrify -strip
iexiftool -all=
. Aby potwierdzić, uruchomexiftool -a -G1 -s <original-filename> | grep JFIF
. Przyszłe uruchomienia skryptu musiałyby w jakiś sposób wziąć to pod uwagę, gdyby wersja JFIF była inna.Dzięki
imagemagick
pakietowi i nie tylko dla plików JPEG możesz po prostu:Z instrukcji :
O wiele więcej informacji i ostrzeżeń tutaj .
Uwaga: Jest to podobne do @grochmal, ale o wiele prostsze i prostsze.
źródło
exiftool -all= *.jpg
do usuwania danych jpg.Możliwe rozwiązanie, które właśnie przyszło mi do głowy. Pomija kwestię metadanych. Zakłada, że pliki kończą się samym obrazem, a wszystkie metadane znajdują się na początku pliku.
Odwołajmy się do aktualnego dysku do tworzenia kopii zapasowych jako do złotego dysku.
W przypadku obrazów na złotym dysku:
W przypadku obrazów na starych dyskach :
Klasa P będzie zawierać obrazy, które znajdują się na złotym dysku, ale mają różne exifdata lub mają uszkodzenie / rotację danych w wiodących bajtach obrazu.
Po zakończeniu zbadaj interaktywnie KLASĘ P, porównując ich do swoich towarzyszy na złotym dysku.
Zobacz EDYCJA nr 3 do OP.
Przypisanie do KLASY U i D powinno być 100% dokładne.
Rozmiar KLASY P zależy od wielkości porcji M, ponieważ pierwsze M + N bajtów pliku prawie na pewno zawierają pewne dane obrazu (i wszystkie metadane)
źródło
Jeśli stare dyski zawierają głównie duplikaty (w tym metadane), wykonaj dwa kroki, aby znaleźć unikaty zdefiniowane w OP (który uznaje dwa pliki za duplikaty, nawet jeśli różnią się metadanymi):
Skorzystaj z md5 sum nienaruszonych, niepasowanych plików, aby zidentyfikować, które pliki na starych dyskach są unikalne (w tym alternatywnym znaczeniu) na bieżącym dysku kopii zapasowej, przypisując je do klasy uU (bez pasów - unikatowy) lub do klasy D (upilcate). KLASA D będzie w 100% dokładna. Klasa uU powinna być mała (przy powyższym założeniu) i zawierać mieszankę prawdziwych duplikatów (w OP Sense) i prawdziwych unikatów.
Pracując z małym, tzn. Zarządzalnym zestawem plików w CLASS uU, użyj md5sums i różnych technik usuwania, aby zaprojektować metodę porównywania plików, która jest przydatna do celów określonych w OP.
źródło
To jest trochę stare, ale tak, exiftool działa bardzo dobrze.
Pokaż metadane z
Pokaż metedane dla wszystkich plików * .jpg
Uwaga: w rozszerzeniu rozróżniana jest wielkość liter .
Tak jak powyżej, ale zawierają podkatalogi.
Usuń wszystkie metadane
Usuń wszystkie metadane wszystkich plików * .jpg z bieżącego katalogu
Tak jak powyżej, ale zawierają podkatalogi.
Usuń wszystkie metadane GPS plików * .jpg z bieżącego katalogu
źródło