J'utilise actuellement PIL.
from PIL import Image
try:
im=Image.open(filename)
# do stuff
except IOError:
# filename not an image file
Cependant, bien que cela couvre suffisamment la plupart des cas, certains fichiers image tels que, xcf, svg et psd ne sont pas détectés. Les fichiers PSD lèvent une exception OverflowError.
Y a-t-il moyen de les inclure également?
python
image
identification
imghdr
Sujoy
la source
la source
Réponses:
Souvent, les deux premiers caractères seront un nombre magique pour différents formats de fichiers. Vous pouvez vérifier cela en plus de la vérification des exceptions ci-dessus.
la source
Je viens de trouver le module imghdr intégré. À partir de la documentation python:
Voilà comment cela fonctionne:
L'utilisation d'un module est bien meilleure que la réimplémentation de fonctionnalités similaires
la source
imghdr.what(path)
renvoieNone
sipath
le type de fichier image n'est pas reconnu. Liste des types d'images actuellement reconnus: rgb , gif , pbm , pgm , ppm , tiff , rast , xbm , jpeg , bmp , png , webp , exr .En plus de ce que Brian suggère que vous pouvez utiliser PIL est de vérifier la méthode pour vérifier si le fichier est cassé.
la source
En plus de la
PIL
vérification d'image, vous pouvez également ajouter une vérification d'extension de nom de fichier comme ceci:Notez que cela ne vérifie que si le nom du fichier a une extension d'image valide, cela n'ouvre pas réellement l'image pour voir si c'est une image valide, c'est pourquoi vous devez utiliser en plus
PIL
ou l'une des bibliothèques suggérées dans les autres réponses.la source
from PIL import Image img = Image.open(filename) print(img.format)
, puis le vérifier comme ceci:img.format.lower() in ['png', 'jpg', 'jpeg', 'tiff', 'bmp', 'gif']
Mettre à jour
J'ai également implémenté la solution suivante dans mon script Python ici sur GitHub .
J'ai également vérifié que les fichiers endommagés (jpg) ne sont souvent pas des images «cassées», c'est-à-dire qu'un fichier image endommagé reste parfois un fichier image légitime, l'image d'origine est perdue ou modifiée mais vous pouvez toujours la charger sans erreur. Mais, la troncature de fichier provoque toujours des erreurs.
Mettre fin à la mise à jour
Vous pouvez utiliser le module Python Pillow (PIL), avec la plupart des formats d'image, pour vérifier si un fichier est un fichier image valide et intact.
Dans le cas où vous souhaitez détecter des images également cassées, @Nadia Alramli suggère correctement la
im.verify()
méthode, mais cela ne détecte pas tous les défauts d'image possibles , par exemple,im.verify
ne détecte pas les images tronquées (que la plupart des téléspectateurs chargent souvent avec une zone grisée).Pillow est également capable de détecter ce type de défauts, mais vous devez appliquer une manipulation d'image ou un décodage / recodage d'image ou déclencher la vérification. Enfin, je suggère d'utiliser ce code:
En cas de défauts d'image, ce code lèvera une exception. Veuillez noter que im.verify est environ 100 fois plus rapide que la manipulation d'image (et je pense que le retournement est l'une des transformations les moins chères). Avec ce code, vous allez vérifier un ensemble d'images à environ 10 Mo / s avec Pillow standard ou 40 Mo / s avec le module Pillow-SIMD (processeur 2.5Ghz x86_64 moderne).
Pour les autres formats psd , xcf , .. vous pouvez utiliser le wrapper Wand Imagemagick , le code est le suivant:
Mais, d'après mes expériences, Wand ne détecte pas les images tronquées, je pense qu'il charge les parties manquantes sous forme de zone grisée sans invite.
Je rouge qu'Imagemagick a une identification de commande externe qui pourrait faire le travail, mais je n'ai pas trouvé de moyen d'invoquer cette fonction par programme et je n'ai pas testé cette route.
Je suggère de toujours effectuer une vérification préliminaire, de vérifier que la taille du fichier n'est pas nulle (ou très petite), c'est une idée très bon marché :
la source
Sous Linux, vous pouvez utiliser python-magic ( http://pypi.python.org/pypi/python-magic/0.1 ) qui utilise libmagic pour identifier les formats de fichiers.
AFAIK, libmagic regarde dans le fichier et essaie de vous en dire plus que juste le format, comme les dimensions du bitmap, la version du format, etc. Vous pourriez donc voir cela comme un test superficiel de «validité».
Pour d'autres définitions de «valide», vous devrez peut-être écrire vos propres tests.
la source
Vous pouvez utiliser les liaisons Python avec libmagic, python-magic puis vérifier les types mime. Cela ne vous dira pas si les fichiers sont corrompus ou intacts, mais cela devrait être en mesure de déterminer de quel type d'image il s'agit.
la source
Eh bien, je ne connais pas les entrailles de psd, mais je sais, bien sûr, que, en fait, svg n'est pas un fichier image en soi, - il est basé sur xml, donc c'est, essentiellement, un fichier texte brut.
la source
Une option est d'utiliser le
filetype
package.Installation
python -m pip install filetype
Avantages
Exemple de solution
Informations supplémentaires sur le repo officiel: https://github.com/h2non/filetype.py
la source
La vérification des extensions de fichier serait-elle acceptable ou essayez-vous de confirmer que les données elles-mêmes représentent un fichier image?
Si vous pouvez vérifier l'extension du fichier, une expression régulière ou une simple comparaison pourrait satisfaire l'exigence.
la source
la source