Formation I.S.N.

Créer une nouvelle image avec le module PIL

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 :


from PIL import Image

Caractéristiques de la nouvelle image

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 ?

  • Réponse
Par défaut, une image conçue de cette façon voit tous ses pixels initialisés avec une couleur noire...

Colorier chaque pixel de l'image

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()
  • Solution

##----- 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()