Memperbarui
Saya juga menerapkan solusi berikut dalam skrip Python saya di sini di GitHub .
Saya juga memverifikasi bahwa file yang rusak (jpg) seringkali bukan gambar yang 'rusak', misalnya file gambar yang rusak terkadang tetap menjadi file gambar yang sah, gambar asli hilang atau diubah tetapi Anda masih dapat memuatnya tanpa kesalahan. Namun, pemotongan file selalu menyebabkan error.
Akhiri Pembaruan
Anda dapat menggunakan modul Python Pillow (PIL), dengan sebagian besar format gambar, untuk memeriksa apakah suatu file adalah file gambar yang valid dan utuh.
Jika Anda bertujuan untuk mendeteksi gambar yang juga rusak, @Nadia Alramli menyarankan metodenya dengan benar im.verify()
, tetapi ini tidak mendeteksi semua kemungkinan cacat gambar , misalnya, im.verify
tidak mendeteksi gambar yang terpotong (yang sering dimuat oleh sebagian besar pemirsa dengan area berwarna abu-abu).
Pillow juga dapat mendeteksi jenis cacat ini, tetapi Anda harus menerapkan manipulasi gambar atau decode / pengodean ulang gambar atau untuk memicu pemeriksaan. Akhirnya saya menyarankan untuk menggunakan kode ini:
try:
im = Image.load(filename)
im.verify() #I perform also verify, don't know if he sees other types o defects
im.close() #reload is necessary in my case
im = Image.load(filename)
im.transpose(PIL.Image.FLIP_LEFT_RIGHT)
im.close()
except:
#manage excetions here
Jika gambar cacat, kode ini akan memunculkan pengecualian. Harap pertimbangkan bahwa im.verify sekitar 100 kali lebih cepat daripada melakukan manipulasi gambar (dan menurut saya flip adalah salah satu transformasi yang lebih murah). Dengan kode ini Anda akan memverifikasi sekumpulan gambar dengan kecepatan sekitar 10 MBytes / detik dengan Pillow standar atau 40 MBytes / detik dengan modul Pillow-SIMD (CPU 2.5Ghz x86_64 modern).
Untuk format lain psd , xcf , .. bisa menggunakan Imagemagick wrapper Wand , kodenya sebagai berikut:
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
Tapi, dari percobaan saya Wand tidak mendeteksi gambar yang terpotong, saya pikir itu memuat bagian yang kurang sebagai area abu-abu tanpa disuruh.
Saya merah bahwa Imagemagick memiliki identifikasi perintah eksternal yang dapat melakukan pekerjaan itu, tetapi saya belum menemukan cara untuk menjalankan fungsi itu secara terprogram dan saya belum menguji rute ini.
Saya sarankan untuk selalu melakukan pemeriksaan awal, periksa ukuran file menjadi tidak nol (atau sangat kecil), adalah ide yang sangat murah :
statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
#manage here the 'faulty image' case