Le module PIL - Rappels☘
Le module PIL permet de manipuler un grand nombre de formats d'images. Ce module n'est pas inclus d'office dans Python, il faut télécharger puis installer la bibliothèque pillow. Pour cela, on peut utiliser pip
:
>>> pip install pillow
sudo apt install python3-pil
Pour plus d'informations sur les possibilités de ce module, on pourra consulter le site de référence.
Dans cette page de rappels, vous allez travailler sur l'image ci-dessous
(nommée Logo_NSI.png
) après l'avoir enregistrée dans le même
répertoire que le programme Python.
Manipuler des fichiers externes avec Python
Le langage Python permet de créer, d'ouvrir et de manipuler des fichiers. En utilisant un IDE (interface de développement), le répertoire courant n'est pas forcément bien identifié.
La bibliothèque os
comporte de nombreuses commandes permettant d'interagir avec le système d'exploitation.
Voici les instructions à placer en début de programme qui permettent de se placer dans le répertoire courant si besoin :
1 2 3 4 |
|
Obtenir des informations sur une image☘
Copier/coller le code ci-dessous dans un programme Python :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Après exécution, ce programme affiche :
Le nombre de colonnes est 400, le nombre de lignes est 250.
L'encodage des couleurs est RGB.
Le pixel en haut à gauche (colonne 0, ligne 0) a pour couleur (255, 255, 255).
Le pixel en bas à droite (colonne 399, ligne 249) a pour couleur (255, 255, 255).
Résumé☘
On considère que l'image est affectée à la variable source
.
-
source.mode
permet d'obtenir l'encodage des couleurs d'une image. La valeur renvoyée peut être :'RGBA'
: couleurs avec gestion de la transparence (quadruplet d'entiers compris entre 0 et 255) ;'RGB'
: couleurs sur trois composantes (triplet d'entiers compris entre 0 et 255) ;'L'
: nuances de gris (un entier compris entre 0 et 255) ;'1'
(le chiffre « 1 ») : noir & blanc (un entier, soit 0, soit 1).
-
source.size
permet d'obtenir les dimensions de l'image (en pixels) sous forme d'un tuple(largeur, hauteur)
. -
Les coordonnées d'un pixel sont représentées par le couple
(x, y)
. L'illustration ci-contre présente comment sont repérés les pixels d'une image. Les coordonnées du pixel rouge de cette image sont donc(3, 1)
. -
Pour récupérer (et stocker dans une variable nommée
couleur
) la couleur du pixel de coordonnées(x, y)
, on utilise l'instruction :Selon l'encodage couleur de l'image (cf. point 1.), la variablecouleur = source.getpixel( (x, y) )
couleur
peut être un quadruplet (mode RGBA), un triplet (mode RGB) ou un entier (modes L ou 1).
Modifier une image existante☘
Téléchargez l'image ci-dessous (clic droit, enregistrer sous...) dans votre répertoire courant :
Nous allons voir comment remplacer la couleur marron par un « joli » bleu.
Le principe pour réaliser cette transformation :
- Parcourir chaque pixel de l'image.
- Pour chaque pixel parcouru, remplacer les composantes (155, 63, 52) par (20, 60, 153).
Pour cela :- on récupère le triplet du pixel grâce à la méthode
.getpixel()
; - on injecte à la place le nouveau triplet grâce à la méthode
.putpixel( (abscisse, ordonnee), composantes )
.
- on récupère le triplet du pixel grâce à la méthode
- On sauvegarde ensuite l'image sous un nouveau nom puis on l'affiche à l'écran.
Copiez/collez/complétez le code ci-dessous afin de faire apparaître le logo modifié.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Une image à partir de rien☘
Le module PIL permet de créer très facilement une image « ex nihilo » en suivant ce protocole :
- Importer le module PIL.
- Définir les propriétés de l'image (dimensions et encodage de couleur).
- Créer et stocker la nouvelle image dans une variable à l'aide de l'instruction
Image.new(encodage, dimensions)
. - Parcourir chaque pixel de l'image pour le coloriser.
- Sauvegarder puis afficher l'image ainsi conçue.
Créez une image de dimension 100 x 100 au format « nuances de gris » (L
) dans laquelle chaque pixel est soit blanc, soit noir. La probabilité d'apparition d'un pixel noir est 30 %.
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|