155 votes

Comment vérifier si un fichier est un fichier image valide ?

J'utilise actuellement le LIP.

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 d'image comme xcf, svg et psd ne sont pas détectés. Les fichiers psd provoquent une exception OverflowError.

Y a-t-il un moyen de les inclure également ?

258voto

Nadia Alramli Points 40381

Je viens de trouver l'intégré imghdr module. Extrait de la documentation python :

Le module imghdr détermine le type d'image contenu dans un fichier ou un d'octets.

Voici comment cela fonctionne :

>>> import imghdr
>>> imghdr.what('/tmp/bass')
'gif'

L'utilisation d'un module est bien plus efficace que la réimplémentation d'une fonctionnalité similaire.

56voto

Nadia Alramli Points 40381

En plus de ce que Brian suggère, vous pouvez utiliser les LIP. vérifier pour vérifier si le fichier est cassé.

im.verify()

Tente de déterminer si le fichier est cassé, sans décoder le code données de l'image. Si cette méthode trouve des problèmes, elle soulève des exceptions appropriées. Cette méthode ne fonctionne que sur une image nouvellement ouverte ; si l'image a déjà été chargée, le résultat est indéfini. En outre, si vous devez charger l'image après avoir utilisé cette méthode, vous devez rouvrir le fichier image. Attributs

30voto

lilith Points 26

En plus de la PIL la vérification de l'image, vous pouvez également ajouter la vérification de l'extension du nom du fichier comme ceci :

filename.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff', '.bmp', '.gif'))

Notez que cette fonction vérifie seulement si le nom du fichier a une extension d'image valide, elle n'ouvre pas réellement l'image pour voir s'il s'agit d'une image valide. PIL ou l'une des bibliothèques proposées dans les autres réponses.

16voto

Brian R. Bondy Points 141769

Souvent, les deux premiers caractères sont un nombre magique pour différents formats de fichiers. Vous pouvez vérifier cela en plus de votre vérification des exceptions ci-dessus.

15voto

Une option consiste à utiliser le filetype paquet.

Installation

python -m pip install filetype

Avantages

  1. Rapide : Effectue son travail en chargeant uniquement les premiers octets de votre image ( vérifier le nombre magique )
  2. Supporte différents types de mime : Images, Vidéos, Polices, Audio, Archives.

Exemple

filetype >= 1.0.7

import filetype

filename = "/path/to/file.jpg"

if filetype.is_image(filename):
    print(f"{filename} is a valid image...")
elif filetype.is_video(filename):
    print(f"{filename} is a valid video...")

filetype <= 1.0.6

import filetype

filename = "/path/to/file.jpg"

if filetype.image(filename):
    print(f"{filename} is a valid image...")
elif filetype.video(filename):
    print(f"{filename} is a valid video...")

Informations supplémentaires sur le dépôt officiel : https://github.com/h2non/filetype.py

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X