Rotation d'une image⚓︎
Manipulation d'une image⚓︎
Le module pillow
Pour manipuler les images, nous allons utiliser le module pillow
de Python. Pour cela, il faut mettre la ligne suivante au début de votre fichier :
from PIL import Image
Vous pouvez utiliser l'image fractale.jpg
.
Afin de charger une image, il faut utiliser l'instruction suivante :
image = Image.open("fractale.jpg")
La variable image
contient un objet qui contient toutes les informations de l'image.
Pour la visualiser, il faut utiliser l'instruction :
image.show()
Avec Thonny, cela ouvre une fenêtre contenant l'image. Ici, il faudra regarder en dessous de l'IDE.
Afin de manipuler l'image, vous pouvez utiliser les deux lignes suivantes :
largeur, hauteur = image.size
pixels = image.load()
La première ligne permet d'obtenir les dimensions de l'image et la deuxième crée une matrice contenant les pixels de l'image.
L'objet pixels
fonctionne comme un tableau à deux dimensions contenant chacun des pixels. Les coordonnées fonctionnent de la manière suivante :
Les coordonnées du pixel en bas à droite sont (largeur-1, hauteur-1)
.
Pour obtenir la valeur d’un pixel ou la modifier, il faut écrire :
couleur = pixels[5, 2] # x=5 et y=2
Le module pillow
utilise une autre notation pour les tableaux qui permet d'écrire pixels[x, y]
.
Les couleurs sont généralement soit des triplets (r, g, b)
, avec chacune des valeurs qui est un entier entre 0 et 255, ou des quadruplets (r, g, b, a)
, où a
correspond à l'opacité (0 pour invisible à 255 pour opaque). Dans le premier cas, l'image est en mode RGB
et dans le deuxième elle est en RGBA
.
De la même manière, on peut changer la couleur d'un pixel :
pixels[5, 2] = (255, 125, 38) # si l'opacité n'est pas ajoutée elle sera mise à 255
Pour créer une nouvelle image, il faut utiliser la syntaxe suivante :
image2 = Image.new("RGBA", (hauteur, largeur))
Enfin, après avoir manipulé l'image, vous pouvez la sauvegarder ainsi :
image2.save("bonjour.png")
Sur le site, si vous voulez la télécharger, vous devrez utiliser cette fonction, après avoir enregistré l'image :
telecharger("bonjour.png")
Exercice 1
Tester le module pillow
.
Vous pouvez décommenter les différentes parties afin de tester leur effet.
Votre figure
Rotation naïve⚓︎
Exercice 2 (sur papier)
Pour faire une rotation d’un quart de tour, on peut créer une nouvelle image en inversant la hauteur et la largeur et ensuite copier tous les pixels.
-
Déterminer les coordonnées du pixel correspondant à
(0, 0)
dans l'image d'origine.Solution
(h-1, 0)
-
Déterminer les coordonnées du pixel correspondant à
(l-1, h-1)
dans l'image d'origine.Solution
(0, l-1)
-
Déterminer les coordonnées du pixel correspondant à
(0, h-1)
dans l'image d'origine.Solution
(0, 0)
-
Déterminer les coordonnées du pixel correspondant à
(l-1, 0)
dans l'image d'origine.Solution
(h-1, l-1)
-
Déterminer les coordonnées du pixel correspondant à
(x1, y1)
dans l'image d'origine.Solution
(h-1-y1, x1)
Exercice 3
Compléter le code de la fonction rotation_naive
qui prend en paramètre le nom d'un fichier, qui effectue cette rotation sur l'image correspondant au fichier.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
def rotation_naive(image):
largeur, hauteur = image.size
pixels = image.load()
image2 = Image.new("RGBA", (hauteur, largeur))
pixels2 = image2.load()
for x in range(largeur):
for y in range(hauteur):
pixels2[hauteur-1-y, x] = pixels[x, y]
return image2
Votre figure
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)