Attention
Ce TP est à rendre, et noté.
Vous devez écrire les réponses sur une feuille et me rendre cette feuille à la fin.
Ce n'est pas une interro. Je vous aide à répondre. Posez-moi des questions.
Dans cette première partie, nous allons voir comment récupérer une image dans Basthon, l'ouvrir, et obtenir ses propriétés, notamment sa définition, c'est à dire le nombre de pixels qui la composent.
Pour manipuler des images dans Basthon, il faut:
Nous allons travailler sur une image d'émoji, que vous devez télécharger sur votre ordinateur: smiley.png. Retrouvez ce fichier sur le disque dur en utilisant l'explorateur de fichier.
Ensuite, ouvrez Basthon en cliquant sur ce lien. Vous verrez que l'éditeur de code de Basthon contient déjà ce programme:
### --- Exercice 1 ---
from PIL import Image
# Lecture du fichier image
img = Image.open("smiley.png")
# Récupération et affichage de la définition
largeur, hauteur = img.size
print(largeur, "x", hauteur)
Question 1: si vous exécutez ce code, que se passe-t-il? À votre avis, pourquoi ?
Il faut ensuite télécharger votre fichier smiley.png sur Basthon, pour qu'il soit accessible. Pour ça, dans la fenêtre de Basthon, cliquez sur l'icône qui ressemble à un dossier:
Cherchez le fichier smiley.png présent sur votre disque dur, et validez. Il est désormais disponible sur Basthon.
Question 2: exécutez à nouveau le code. Que s'affiche-t-il?
Question 3: quelle est la largeur de l'image ? sa hauteur ? sa définition ?
Vous allez maintenant placer des pixels sur l'image afin de reconstituer les yeux du smiley. L'objectif est de comprendre le système de coordonnées de l'image. Vous devez trouver où se trouve le point de coordonnées (0, 0) (l'origine) et comment sont orientés les axes X et Y.
Si votre onglet ou fenêtre Basthon est encore ouverte, fermez-la, et cliquez sur ce lien. Vous verrez que l'éditeur de code de Basthon contient désormais ce code:
### --- Exercice 2 ---
from PIL import Image, ImageDraw
# Ouverture de l'image
img = Image.open("smiley.png")
# Coordonnées (x,y) de chaque oeil
oeil_gauche = (102, 20)
oeil_droit = (50, 49)
# Dessin du pixel de chaque oeil
draw = ImageDraw.Draw(img)
draw.point(oeil_gauche, fill='black')
draw.point(oeil_droit, fill='black')
# Afficher de l'image
img.show()
Il vous faut à nouveau télécharger l'image smiley.png sur Basthon pour qu'elle soit disponible pour ce programme.
Après avoir téléchargé l'image smiley.png, exécutez le code. Si l'image ne s'affiche pas, cliquez sur l'icône en forme d'image dans la partie droite de Basthon.
Sur l'image de smiley, vous verrez deux pixels
noirs. Ces pixels sont censés représenter les yeux de
l'emoji, mais ils sont mal placés. Dans le code
python, ce sont les deux lignes commençant par draw.point
qui dessinent ces pixels.
Question 4: modifiez les coordonnées
comme (102, 20) pour que les pixels soient au bon endroit
pour représenter des yeux. Quelles coordonnées obtenez-vous pour les
deux points?
Question 5: dans un couple de coordonnées comme
(102, 20), que signifie le premier nombre ? Que
signifie le deuxième ?
Question 6: Par déduction, laquelle de ces propositions indique l'origine des coordonnées ? C'est à dire, à quel endroit sur l'image correspond le point (0, 0) qui est l'intersection des axes X et Y ?
(le sens des flèches sur les axes est important pour savoir dans quelle direction les valeurs des coordonnées augmentent.)
En informatique, les couleurs peuvent être représentées en faisant varier l'intensité des trois composantes rouge, vert et bleu. Chaque intensité est codée sous forme d'une valeur entière comprise entre 0 et 255.
À nouveau, fermez votre onglet ou fenêtre Basthon si elle est ouverte, puis cliquez sur ce lien. L'éditeur de code Basthon contient désormais ce code:
### --- Exercice 3 ---
from PIL import Image
# Les 3 composantes d'une couleur
# La valeur de chaque composante
# est comprise entre 0 et 255
couleur = (0, 0, 0)
# Affichage de l'image
image = Image.new('RGB', (200, 200), couleur)
image.show()
Vous allez modifier la ligne couleur = (0, 0, 0) pour
changer la couleur de l'image. (Cliquez sur l'icône d'image, à droite de Basthon, pour voir le résultat.)
Question 7: essayez les triplets de valeurs (255, 0, 0), puis (0, 255, 0), puis (0, 0, 255). À quelle couleur correspond chacun des triplets ?
Question 8: Trouvez les triplets de valeurs qui permettent d'avoir du blanc, du jaune et du rose.
Question 9: chaque valeur d'un triplet (rouge, vert, bleu) peut prendre 256 valeurs différentes. Combien de possibilités de couleurs cela permet-il de représenter ? Comment avez-vous fait le calcul ?
Vous allez maintenant modifier la couleur de l'ensemble des pixels d'une image. Vous commencerez par suivre quelques instructions d'expérimentation avant de laisser libre cours à votre imagination.
On va utiliser une autre image que l'émoji. Téléchargez l'image fraise.jpg et enregistrez-la sur votre ordinateur.
Là encore, fermez l'onglet ou la fenêtre Basthon précédente, et cliquez sur ce lien. Le code est désormais:
### --- Exercice 4 ---
from PIL import Image, ImageDraw
# Ouverture de l'image
img = Image.open("fraise.jpg")
# Parcours de tous les pixels de l'image
colonnes, lignes = img.size
for x in range(colonnes):
for y in range(lignes):
# Récupération de la couleur du pixel
position = (x, y)
r, v, b = img.getpixel(position)
# Manipulation de la couleur
couleur = (r, v, b)
# Modification du pixel
img.putpixel(position, couleur)
# Affichage de l'image
img.show()
Cette fois, téléchargez l'image fraise.jpg pour qu'elle soit disponible sur Basthon. Exécutez le programme pour voir ce qu'il fait. (Cliquez sur l'icône en forme d'image, à droite de Basthon, pour voir le résultat.)
Dans les questions suivantes, vous allez devoir modifier la
ligne couleur = (r, v, b). Attention, ne modifiez
pas l'indentation (c'est à dire le décalage à droite
de cette ligne).
Essayez les modifications suivantes:
Question 9: on va essayer de mettre la même chose pour les trois valeurs. Remplacez chaque valeur r, v, b par (r+v+b)//3. Décrivez le résultat.