Le module PIL (ou le fork pillow)
Le module PIL permet de manipuler divers formats d'images plus ou moins complexes sans avoir à se préoccuper de la façon dont sont réellement codés ces formats.
Exemple.
Nous allons illustrer l'utilisation des instructions essentielles de PIL à l'aide de l'image suivante :
Nous pouvons déjà faire apparaître les dimensions (largeur et hauteur en pixels)
# import d'un module de manipulation
# d'images :
from PIL import Image
# ouverture de l'image initiale :
source=Image.open('cat.jpg')
# récupération de ses dimensions :
largeur, hauteur=source.size
print(largeur, hauteur)
On obtient :
800 533
On peut alors récupérer les codes des couleurs des pixels.
Par exemple, les codes RGB des 10 premiers pixels de la colonne de pixels à gauche de l'image :
from PIL import Image
source=Image.open('cat.jpg')
for lig in range(10) :
p=source.getpixel((0,lig))
print(p)
On obtient :
(74, 97, 41) (69, 99, 37) (59, 90, 30) (53, 83, 29) (53, 83, 31) (51, 85, 25) (56, 87, 28) (61, 88, 33) (65, 90, 33) (62, 91, 33)
Le couple (x,y) est le couple (colonne, ligne) d'un pixel. La ligne 0 est celle du dessus de l'image, la colonne 0 est la colonne de gauche. La dernière ligne est donc de numéro hauteur-1 et la dernière colonne de numéro largeur-1.
Affichons par exemple les 10 derniers pixels de la ligne du bas de l'image :
from PIL import Image
source=Image.open('cat.jpg')
for col in range(largeur-10,largeur) :
p=source.getpixel((col,hauteur-1))
print(p)
On obtient :
(91, 94, 41) (92, 94, 45) (91, 93, 44) (92, 91, 45) (92, 89, 46) (93, 90, 49) (89, 87, 46) (81, 81, 43) (73, 78, 38) (68, 72, 35)
Illustrons maintenant la création d'une image à partir de notre image initiale.
On décide par exemple d'échanger largeur et hauteur.
# import d'un module de manipulation
# d'images :
from PIL import Image
# ouverture de l'image initiale :
source=Image.open('cat.jpg')
# récupération de ses dimensions :
largeur, hauteur=source.size
# ouverture d'une nv variable image
# avec échange de hauteur et largeur :
but=Image.new('RGB',(hauteur, largeur))
for y in range(hauteur) :
for x in range(largeur) :
# lecture dans l'image initiale
# de la couleur p du pixel
# de coordonnées (x,y)
p=source.getpixel((x,y))
# définition de la couleur p pour
# le pixel de coordonnées (y,x)
# dans l'image à créer
but.putpixel((y,x),p)
#sauvegarde de l'image à créer
but.save('vertical_cat.jpg')
#ouverture de l'image
but.show()
On obtient :
Vous pourrez trouver quelques compléments sur pillow et/ou les images et couleurs sur cette page
Traiter maintenant les exercices utilisant le module PIL.