Manipuler des images.

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 :
gentil chat

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 :
gentil chat

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.