Saya saat ini menggunakan PIL.
from PIL import Image
try:
im=Image.open(filename)
# do stuff
except IOError:
# filename not an image file
Namun, meskipun ini cukup mencakup sebagian besar kasus, beberapa file gambar seperti, xcf, svg dan psd tidak terdeteksi. File Psd menampilkan pengecualian OverflowError.
Apakah ada cara agar saya bisa memasukkannya juga?
python
image
identification
imghdr
Sujoy
sumber
sumber
Jawaban:
Sering kali karakter pasangan pertama akan menjadi angka ajaib untuk berbagai format file. Anda dapat memeriksa ini selain pemeriksaan pengecualian Anda di atas.
sumber
Saya baru saja menemukan modul imghdr bawaan . Dari dokumentasi python:
Begini Cara kerjanya:
Menggunakan modul jauh lebih baik daripada menerapkan kembali fungsionalitas serupa
sumber
imghdr.what(path)
mengembalikanNone
jika diberikanpath
jenis file gambar yang tidak dikenali. Daftar jenis saat ini diakui image: rgb , gif , pbm , PGM , ppm , tiff , rast , xbm , jpeg , bmp , png , webp , EXR .Selain apa yang disarankan Brian, Anda dapat menggunakan metode verifikasi PIL untuk memeriksa apakah file rusak.
sumber
Selain
PIL
pemeriksaan gambar, Anda juga dapat menambahkan pemeriksaan ekstensi nama file seperti ini:Perhatikan bahwa ini hanya memeriksa apakah nama file memiliki ekstensi gambar yang valid, itu tidak benar-benar membuka gambar untuk melihat apakah itu gambar yang valid, itulah mengapa Anda perlu menggunakan tambahan
PIL
atau salah satu pustaka yang disarankan dalam jawaban lain.sumber
from PIL import Image img = Image.open(filename) print(img.format)
dan kemudian memeriksanya seperti ini:img.format.lower() in ['png', 'jpg', 'jpeg', 'tiff', 'bmp', 'gif']
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:
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:
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 :
sumber
Di Linux, Anda dapat menggunakan python-magic ( http://pypi.python.org/pypi/python-magic/0.1 ) yang menggunakan libmagic untuk mengidentifikasi format file.
AFAIK, libmagic melihat ke dalam file dan mencoba memberi tahu Anda lebih banyak tentangnya daripada hanya formatnya, seperti dimensi bitmap, versi format, dll. Jadi, Anda mungkin melihat ini sebagai tes dangkal untuk "validitas".
Untuk definisi lain dari "valid", Anda mungkin harus menulis pengujian Anda sendiri.
sumber
Anda dapat menggunakan pengikatan Python ke libmagic, python-magic dan kemudian memeriksa jenis mime. Ini tidak akan memberi tahu Anda jika file rusak atau utuh tetapi harus dapat menentukan jenis gambar apa itu.
sumber
Yah, saya tidak tahu tentang bagian dalam psd, tapi saya, yakin, tahu bahwa, pada kenyataannya, svg bukanlah file gambar itu sendiri, - ini didasarkan pada xml, jadi pada dasarnya, a file teks biasa.
sumber
Salah satu opsinya adalah menggunakan
filetype
paket.Instalasi
python -m pip install filetype
Keuntungan
Contoh solusi
Informasi tambahan di repo resmi: https://github.com/h2non/filetype.py
sumber
Apakah memeriksa ekstensi file dapat diterima atau Anda mencoba memastikan bahwa data itu sendiri mewakili file gambar?
Jika Anda dapat memeriksa ekstensi file, ekspresi reguler atau perbandingan sederhana dapat memenuhi persyaratan.
sumber
sumber