[ EDIT # 1 oleh OP: Ternyata pertanyaan ini cukup baik dijawab oleh pencipta / pengelola exiftool Phil Harvey dalam utas rangkap di Forum ExifTool ]
[ EDIT # 2 oleh OP: Dari ExifTool FAQ : ExifTool tidak dijamin untuk menghapus metadata sepenuhnya dari file ketika mencoba menghapus semua metadata. Lihat 'Keterbatasan Penulis'.]
Saya ingin mencari di hard drive lama saya untuk foto-foto yang tidak ada di drive cadangan saya saat ini. Format termasuk jpg, png, tif, dll ..., serta berbagai format mentah (model kamera dan pabrikan berbeda).
Saya hanya tertarik pada keunikan gambar itu sendiri dan bukan keunikan karena perbedaan dalam, katakanlah, nilai-nilai tag exif, ada / tidaknya tag exif yang diberikan itu sendiri, thumbnail yang disematkan, dll ...
Meskipun saya tidak berharap menemukan korupsi / pembusukan data antara salinan berbeda dari gambar yang identik, saya ingin mendeteksi itu, serta perbedaan karena perubahan ukuran dan perubahan warna.
[ Sunting # 3 oleh OP: Untuk klarifikasi: Sebagian kecil positif palsu dapat ditoleransi (file dianggap unik ketika tidak) dan negatif palsu sangat tidak diinginkan (file salah disimpulkan sebagai duplikat). ]
Rencana saya adalah mengidentifikasi keunikan berdasarkan md5sums setelah menghapus semua metadata.
Bagaimana saya bisa menghapus metadata?
Akankah exiftool -all= <filename>
cukup?
sumber
file
akan gagal menemukan format gambar RAW danfind
hanya akan bekerja pada ekstensi (mungkin berguna untuk menggambarkan lebih baik apa yang Anda miliki)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
mana<...>
berarti banyak sufiks lainnya.convert image.jpg - | md5sum
(ImageMagick) memberi Anda jumlah MD5 yang sesuai.Jawaban:
jhead
memiliki kemampuan untuk menghapus metadata non-gambar dari file JPEG. Halaman manual mengatakan:sumber
Saya akan menggunakan ImageMagick untuk sebagian besar gambar. Ini karena implementasi pustaka yang berbeda akan menghasilkan hasil kompresi yang berbeda, ImageMagick dapat melakukan penyatuan kompresi.
Jenis umum mudah karena OS memiliki perpustakaan untuk membaca dan menulisnya. Begitu:
Ini akan memastikan bahwa Anda memiliki gambar yang ditulis dengan cara yang sama. Dan kemudian Anda dapat melakukan:
Untuk format RAW saya percaya bahwa satu-satunya cara adalah melakukan seperti yang Phil katakan, dan karena itu:
Dan kemudian checksumnya akan sama. Anda hanya perlu menyilangkan jari agar format gambar yang lebih eksotis dapat dibuat dengan implementasi tunggal (atau memiliki format file yang kaku).
Penafian : Ini akan berfungsi untuk membandingkan checksum di antara mereka sendiri. Jika Anda menyimpan checksum dan menjalankannya kembali
-strip
setelah pembaruanzlib
ataulibjpeg
Anda dapat mengakhiri dengan checksum yang sangat berbeda. Anda perlu membuat checksum untuk setiap gambar setiap saat. Mengingat kekhawatiran tentang kualitas gambar, sebaiknya jalankan ini hanya sekali .sumber
-quality
) Semua taruhan dimatikan.-strip
. Untuk melihat ini, jalankanexiftool -a -G1 -s <filename>
file yang dibuat denganmogrify -strip
danexiftool -all=
. Untuk mengonfirmasi, jalankanexiftool -a -G1 -s <original-filename> | grep JFIF
. Menjalankan skrip di masa depan entah bagaimana harus mempertimbangkan ini jika versi JFIF berbeda.Dengan
imagemagick
paket dan tidak hanya untuk JPEG, Anda cukup:Dari manual :
Lebih banyak info dan peringatan di sini .
Catatan: Ini mirip dengan @grochmal tetapi jauh lebih mudah dan sederhana.
sumber
exiftool -all= *.jpg
data jpg.Solusi yang mungkin muncul di benak saya. Ini mengesampingkan masalah metadata. Diasumsikan bahwa file berakhir dengan gambar itu sendiri, bahwa semua metadata ada di awal file.
Mari merujuk drive cadangan saat ini sebagai drive emas.
Untuk gambar pada drive emas:
Untuk gambar di drive lama :
Kelas P akan berisi gambar yang ada di drive emas, tetapi memiliki exifdata yang berbeda, atau memiliki korupsi / data-busuk dalam byte terkemuka gambar.
Setelah selesai, periksalah CLASS P secara interaktif, membandingkannya dengan teman mereka di drive emas.
Lihat EDIT # 3 untuk OP.
Penugasan ke CLASS U dan D harus 100% akurat.
Ukuran CLASS P tergantung pada ukuran chunk M, karena M + N byte pertama dari suatu file hampir pasti berisi beberapa data gambar (dan semua metadata)
sumber
Jika drive lama sebagian besar berisi duplikat (termasuk metadata) maka gunakan dua langkah untuk menemukan uniques seperti yang didefinisikan dalam OP (yang menganggap dua file sebagai duplikat meskipun berbeda dalam metadata):
Gunakan md5sums dari file yang tidak terhenti yang utuh untuk mengidentifikasi file mana pada drive lama yang unik (dalam pengertian alternatif ini) ke drive backup saat ini, menugaskannya ke CLASS uU (unstripped-Unique) atau CLASS D (upilcate). CLASS D akan menjadi 100% akurat. KELAS uU harus kecil (dengan asumsi di atas) dan berisi campuran duplikat sejati (dalam OP Sense) dan uniques sejati.
Bekerja dengan yang kecil, yaitu dikelola, set file di CLASS uU, gunakan md5sums dan berbagai teknik pengupasan untuk merancang metode perbandingan file yang berguna untuk tujuan yang ditetapkan dalam OP.
sumber
Ini agak tua, tapi ya, exiftool bekerja dengan sangat baik.
Tampilkan metadata dari
Tampilkan metedata untuk semua file * .jpg
Catatan: Ekstensi ini peka huruf besar-kecil .
Sama seperti di atas, tetapi termasuk sub direktori.
Hapus semua metadata
Hapus semua metadata dari semua file * .jpg di direktori saat ini
Sama seperti di atas, tetapi termasuk sub direktori.
Hapus semua metadata GPS dari file * .jpg di direktori saat ini
sumber