C1.2 : TP modifier une image

L'objectif de ce TD est de réactiver les connaissances de base liées à la programmation en Python : boucles, fonctions...

Prendre connaissance : Utilisation de la librairie PIL

Documentation officielle de la librairie PIL : pillow.readthedocs.io/en/stable/

Les couleurs des pixels

Dans la librairie PIL, les couleurs sont des tuples de trois valeurs entières comprises entre 0 et 255. Les trois valeurs correspondant respectivement à l'intensité du rouge, du vert et du bleu.

Exemple :

Créer une image vide

La méthode utilisée est Image.new(mode, taille, couleur) :

Exemple :

from PIL import Image

largeur = 40
hauteur = 30
c_blanc = (255,255,255)
objet_image = Image.new('RGB', (largeur, hauteur), c_blanc)

Enregistrer une image

L'enregistrement d'un objet image dans un fichier image se fait à l'aide de la méthode save(nom, format) :

Exemple (télécharger l'image ballon.png dans le même dossier que votre programme) :

from PIL import Image

objet_image = Image.open("ballon.png")
objet_image.save('ballon_copie.png','png')

Accéder aux couleurs des pixels de l'image

Lire la couleur d'un pixel

La méthode getpixel(position) permet de récupérer le tuple correspondant à la couleur du pixel qui est à la position position.

Exemple (télécharger l'image ballon.png dans le même dossier que votre programme) :

from PIL import Image

objet_image = Image.open("ballon.png")

couleur = objet_image.getpixel((100,100))
print("Le pixel qui est à la position (100, 100) à la couleur " + str(couleur))

Attribuer une couleur à un pixel

La méthode putpixel(position, couleur) permet d'attribuer la couleur couleur au pixel qui est à la position position.

Exemple (télécharger l'image ballon.png dans le même dossier que votre programme) :

from PIL import Image

objet_image = Image.open("ballon.png")

c_noir = (0, 0, 0)
objet_image.putpixel((0,0), c_noir)

objet_image.save('ballon_copie.png','png')

Visualiser une image

Il est possible de lancer, depuis python, le logiciel par défaut qui sert à visualiser les images, à l'aide de la méthode show().

Exemple (télécharger l'image ballon.png dans le même dossier que votre programme) :

from PIL import Image
objet_image = Image.open("ballon.png")
objet_image.show()

Charger une image

Exemple (télécharger l'image ballon.png dans le même dossier que votre programme) :

from PIL import Image
objet_image = Image.open("ballon.png")

Remarque : il est possible de récupérer quelques informations sur l'image : sa taille...

from PIL import Image
objet_image = Image.open("ballon.png")
print('largeur : '  + str(objet_image.width))
print('hauteur : ' + str(objet_image.height))
print('nom du fichier : ' + objet_image.filename)

A faire

Jouer avec les pixels

Programme n° 1 : Petit carré rouge

• Créer une image de taille 20×20 blanche avec un carré de 2×2 rouge au centre et l'enregistrer sous le nom 'rouge1.png'.

Programme n° 2 : Drapeau tricolore

• Créer une image de taille 600×400 correspondant à un drapeau tricolore et l'enregistrer sous le nom 'drapeau.png'. Écrire un programme le plus lisible possible.

Programme n° 3 : Ajout d'un contour à une image

• Écrire une fonction qui charge une image, ajoute un contour noir de 1 pixel d'épaisseur à l'image et l'enregistre dans un nouveau fichier dont le nom est le même nom suivi de '_contour'

Image d'une montgolfière
ballon.png
Flèche
Image d'une montgolfière avec un encadrement noir
ballon_contour.png

Programme n° 4 : Couleur de fond aléatoire

1) Écrire la fonction couleur_aleat_base() qui crée et renvoie une couleur (c'est-à-dire un tuple) aléatoire parmi les huit couleurs de base : rouge, vert, bleu, blanc, noir, cyan, magenta, jaune.

2) Écrire la fonction couleur_aleat() qui crée et renvoie une couleur (c'est-à-dire un tuple) aléatoire.

3) Utiliser l'une ou l'autre des deux fonctions précédentes pour créer une image de 100×100 pixels avec une couleur de fond aléatoire.

Programme n° 5 : Transformer une image en son négatif

Le but de l'exercice est de transformer une image en son négatif.

Info : la couleur négative de (r, v, b) est (255-r, 255-v, 255-b).

ballon.png
Flèche
Image d'une montgolfière en couleurs négatives
ballon_negatif.png

1) Écrire une fonction qui prend une couleur en paramètre et renvoie sa couleur négative.

2) Écrire une fonction qui prend une chaine de caractères correspondant au nom d'un fichier image et enregistre dans un nouveau fichier l'image négative correspondante.

Programme n° 6 : Un patchwork

Le but de l'exercice est de créer une image dont l'allure est la suivante :

Image des carrés côte à côte de 10×10 pixels de couleurs aléatoires

1) Écrire une fonction qui renvoie une couleur aléatoire, c'est-à-dire un tuple de trois valeurs aléatoires comprises entre 0 et 255.

2) Écrire une fonction qui prend un objet image, une couleur et une position (c'est-à-dire un tuple de deux valeurs) en paramètres et dessine un carré de 10×10 pixels de la couleur et à la position passées en paramètres.

3) Écrire le programme qui permet de créer une image de 200×200 pixels composés de 400 carrés de 10×10 pixels aux couleurs aléatoires.