Un grand nombre de fonctions sont disponibles dans la bibliothèque PIL (Python Imaging Library) disponible dans le paquetage Pillow, dont voici un manuel.
Après avoir installé Pillow si nécessaire :
# Par exemple : pip install pillow # à adapter selon distribution de Python (conda etc.)
On dispose de la bibliothèque PIL proposant plusieurs modules, dont Image, qui met à disposition une classe d'objets du même nom.
De très nombreux formats de fichiers d'images sont utilisables, et reconnus par leur extension.
L'exemple suivant consiste à ouvrir une image couleur dans un fichier jpg, la charger en mémoire, créer une autre image - en niveaux de gris cette fois - dont les pixels auront pour valeur la moyenne des composantes de l'image couleur, et enfin enregistrer cette nouvelle image dans un fichier png.
from PIL import Image # Ouverture d'un fichier et affectation à un objet de la classe Image mon_image = Image.open("lena.jpg")
Ici, mon_image
, objet de la classe Image
est un tableau de pixels, composé de 1 à 4 valeurs numériques en fonction du type de fichier (1 entier pour une image en niveau de gris, 3 pour une image couleur RVB et 4 pour une image couleur CMYK.
Par ailleurs, un objet de la classe Image
, est un tuple : il n'est pas mutable. On ne peut donc pas modifier directement un élément, il faudra passer par une recopie dans un autre objet.
On peut obtenir des caractéristiques de cet objet :
print("Format : ", mon_image.format) # Format de fichier largeur, hauteur = mon_image.size # Tuple l, h en pixels print("Taille : ", largeur, "x", hauteur) print("Mode : ", mon_image.mode) # L (luminance), RGB, CMYK... mon_image.show() # affichage de l'image via le programme par défaut du système
Pour les méta-données exif, et en particulier GPS, voir mon_image._getexif() en particulier.
Exemples ici et là.
Pour accéder à un pixel :
pixou = (10,10) # par exemple... pixel de coordonnées (10,10). La numérotation commence à 0 couleurs = mon_image.getpixel(pixou) # Retourne un tuple contenant les 3 composantes r, g, b print(couleurs)
Pour créer une nouvelle image :
nouvelle_image = Image.new("L", mon_image.size) # L : mode niveaux de gris
Écrire des pixels dans l'image :
for i in range(largeur): for j in range (hauteur): r, g, b = mon_image.getpixel((i,j)) moy = int((r + g + b)/3) nouvelle_image.putpixel((i,j), moy)
Enregistrer l'image dans un fichier :
nouvelle_image.save("image_modif.png") # L'extension détermine le format de fichier # fermeture des fichiers mon_image.close() nouvelle_image.close()