Le module PIL
permet de manipuler un grand nombre de formats
d'image. Ce module n'est pas inclus d'office dans
Python, il faut télécharger puis
installer la bibliothèque pillow
comme indiqué en
page d'accueil.
Pour plus d'informations sur les possibilités de ce module, on pourra
consulter le
site
de référence.
Cette page présente comment concevoir une nouvelle image avec PIL
en construisant ligne par ligne un programme. On commence par importer le module
en en-tête du fichier :
Le module PIL
permet de créer très facilement l'image représentée
ci-contre qui est un rectangle de 100
pixels de largeur et
256
pixels de hauteur, de couleur dégradée du noir (en
haut) vers le rouge.
Pour créer une nouvelle image, il faut indiquer :
- le nom de la variable qui « contiendra » cette image ;
- l'encodage des couleurs de cette image
'RGBA'
: couleurs avec gestion de la transparence (4 octets)
'RGB'
: couleurs sans gestion de la transparence
'L'
: nuances de gris
'1'
: noir & blanc
- les dimensions en pixels (largeur et hauteur)
de cette image (sous forme de tuple - liste non modifiable).
Dans notre exemple, on stockera l'image dans la variable im
,
avec un encodage couleur en 'RGB'
et des dimensions
100 x 256
:
im2 = Image.new('RGB', (100, 256))
Application
Copiez/collez le programme Python ci-dessous
puis exécutez-le.
##----- Importation des modules -----##
from PIL import Image
##----- Variables et constantes -----##
largeur = 100
hauteur = 256
couleur = 'RGB'
##------ Nouvelle image ------##
im = Image.new(couleur, (largeur, hauteur))
##----- Fermeture et affichage -----##
im.save('Degrade.jpg')
im.show()
Vérifiez qu'une image de dimensions 100 x 256
a bien été définie.
Quelle remarque peut-on faire ?
Par défaut, une image conçue de cette façon voit tous ses pixels
initialisés avec une couleur noire...
Contrairement à la lecture et à l'écriture dans un
fichier texte,
le module PIL
permet «d'atteindre» et de modifier
directement n'importe quel pixel de l'image grâce à ses coordonnées.
- Les coordonnées d'un pixel de l'image sont sous la forme d'un
tuple (
x
, y
).
- Selon l'encodage des couleurs du fichier, il faudra saisir une valeur
entière différente pour le pixel correspondant :
'RGBA'
: un quadruplet (r
, g
,
b
, a
) de valeurs comprises entre 0
et 255
'RGB'
: un triplet (r
, g
,
b
) de valeurs comprises entre 0
et 255
'L'
: une valeur g
comprise entre
0
et 255
'1'
: une valeur nb
comprise entre
0
et 1
Illustration
L'illustration ci-contre présente comment PIL
« agit »
sur une image pour colorier le pixel de coordonnées (3, 1)
en
rouge :
# On injecte dans le pixel de coordonnées (3, 1) la couleur rouge (255, 0, 0) en RGB
im.putpixel((3, 1), (255, 0, 0))
Application
Compléter le programme précédent afin d'obtenir l'image d'un rectangle
de 100
pixels de largeur et 256
pixels de hauteur,
de couleur dégradée du noir (en haut) vers le rouge.
##----- Importation des modules -----##
from PIL import Image
##----- Variables et constantes -----##
largeur = 100
hauteur = 256
couleur = 'RGB'
##------ Nouvelle image ------##
im = Image.new(couleur, (largeur, hauteur))
##----- Fermeture et affichage -----##
im.save('Degrade.jpg')
im.show()
##----- Importation des modules -----##
from PIL import Image
##----- Variables et constantes -----##
largeur = 100
hauteur = 256
couleur = 'RGB'
##------ Nouvelle image ------##
im = Image.new(couleur, (largeur, hauteur))
for x in range(largeur):
for y in range(hauteur):
im.putpixel((x, y), (y, 0, 0)) # Composante R en fonction de la hauteur
##----- Fermeture et affichage -----##
im.save('Degrade.jpg')
im.show()