Renversant☘
Dans cette page, on continue à travailler sur les images avec le module PIL, et notamment sur les tuples utilisés dans ce contexte: le couple des dimensions de l'image, les couples de coordonnées (colonne, ligne) des pixels, et les tuples définissant la couleur des pixels,
Symétrie axiale☘
On travaille avec cette image à télécharger.
L'exercice consiste à fabriquer une nouvelle image à partir de celle-ci. Cette nouvelle image sera obtenue par symétrie de la précédente par rapport à la droite horizontale coupant l'image au milieu... En d'autres termes:
- la ligne en haut de l'image devient la ligne du bas (les pixels sont par contre dans le même ordre de gauche à droite),
- la ligne 2 en partant du haut devient la ligne 2 en partant du bas,
- etc...
Un début de code à compléter (en utilisant getpixel
et putpixel
déjà utilisés
dans les pages précédentes).
from PIL import Image
# ouverture de l'image:
source = Image.open('ange.png')
# récupération de ses dimensions :
largeur, hauteur = source.size
# ouverture d'une nouvelle "image"
# codée en RGB, de mêmes dimensions que la précédente:
but = Image.new("RGB",(largeur,hauteur))
# boucle de parcours des pixels de l'image source
# et de placement dans la nouvelle image:
PARTIE DE CODE A ECRIRE
# sauvegarde de l'image créée :
but.save("renversee.png")
# on montre l'image :
but.show()
Solution
Un code:
from PIL import Image
# ouverture de l'image:
source = Image.open('ange.png')
# récupération de ses dimensions :
largeur, hauteur = source.size
# ouverture d'une nouvelle "image":
but = Image.new("RGB",(largeur,hauteur))
# boucle de parcours des pixels de l'image source
# et de placement dans la nouvelle image:
for lig in range(0, hauteur):
for col in range(0, largeur):
# on récupère la couleur d'un pixel:
p = source.getpixel((col, lig))
# on la place dans la nouvelle image:
but.putpixel((col, hauteur-lig-1),p)
# sauvegarde de l'image créée :
but.save("renversee.png")
# on montre l'image :
but.show()
Symétrie centrale☘
On travaille maintenant avec cette image à télécharger.
L'objectif est de créer une nouvelle image à partir de celle-ci mais cette foisen lui faisant subir une symétrie centrale.
En d'autres termes:
- la ligne du haut devient la ligne du bas, mais en plus les pixels sont réécrits de droite à gauche,
- la ligne 2 du haut devient la ligne 2 en partant du bas, pixels inversés de droite à gauche,
- etc...
A vous d'écrire le code.
Solution
Un code:
from PIL import Image
# ouverture de l'image:
source = Image.open('fauxvrai.png')
# récupération de ses dimensions :
largeur, hauteur = source.size
# ouverture d'une nouvelle "image":
but = Image.new("RGB",(largeur,hauteur))
# on modifie les données de certains pixels dans source:
for lig in range(0, hauteur):
for col in range(0, largeur):
# on récupère la couleur d'un pixel:
p = source.getpixel((col, lig))
# on la place dans la nouvelle image:
but.putpixel((largeur-col-1, hauteur-lig-1),p)
# sauvegarde de l'image créée :
but.save("renversee.png")
# on montre l'image :
but.show()
Note
Utilisez ce petit programme pour résoudre l'énigme suivante:
quel est le numéro de la place de parking de la voiture garée ?