Cette page présente comment réaliser des opérations sur les images avec
PIL
en construisant ligne par ligne un programme.
On commence toujours par importer le module en en-tête du fichier :
from PIL import Image
Opérations sur les images avec le module PIL
Cette page présente comment réaliser des opérations sur les images avec
PIL
en construisant ligne par ligne un programme.
On commence toujours par importer le module en en-tête du fichier :
from PIL import Image
Téléchargez l'image ci-contre en cliquant dessus puis placez-la dans le répertoire courant.
Dans toute la suite, on considère que l'image est située dans le répertoire courant, c'est-à-dire dans le répertoire qui contient le script Python qui fait appel à cette image.
Pour ouvrir un fichier image au format .jpg
(par exemple)
située dans le répertoire courant, on utilise :
im = Image.open('Logo_ISN-IREM.jpg')
Afin d'être « manipulée », cette image est affectée à la
variable nommée im
dans le programme.
Une fois le fichier ouvert, on peut connaître et utiliser :
'RGBA'
(couleurs avec gestion de la transparence), 'RGB'
,
'L'
(gris) ou '1'
(noir &
blanc).
couleur = im.mode
print("L'encodage des couleurs est ", couleur)
(largeur, hauteur)
.
l, h = im.size
print('largeur : {} et hauteur : {}'.format(l, h))
(x, y)
dans
l'image. L'illustration ci-contre présente comment PIL
« lit » une image. Les coordonnées du pixel rouge de cette
image sont donc (3, 1)
: à nouveau, c'est un
tuple (il doit être entouré de parenthèses...).
x, y = 120, 120 # Coordonnées choisies au hasard
triplet = im.getpixel((x, y))
print("Ce pixel a pour composantes : ", triplet)
Dans le cas d'une image encodée en 'RGB'
, triplet
prend pour valeur le triplet d'entier (r, v, b)
correspondant
aux composantes couleurs du pixels de coordonnées x
en colonne
et y
en ligne. Par conséquent,
triplet = im.getpixel((x, y))
r = triplet[0]
v = triplet[1]
b = triplet[2]
r, v, b = im.getpixel((x, y))
Dans ce paragraphe, nous allons détailler un programme permettant d'obtenir l'image ci-contre, transposée de l'image originale du paragraphe précédent.
# couleur est l'encodage du fichier d'origine
# l, h sont les dimensions du fichier d'origine
im2 = Image.new(couleur, (h,l))
# h, l sont les dimensions de la nouvelle image
(x, y)
:
for x in range(l): # Abscisse de l'image d'origine
for y in range(h): # Ordonnée de l'image d'origine
triplet = im.getpixel((x, y)) # On récupère le code couleur du pixel
im2.putpixel((y, x), triplet) # On l'injecte dans le pixel correspondant
.jpg
, .gif
,
.bmp
, etc...)
im2.save('Logo_transpose.jpg')
im2.show()
##----- Importation des modules -----##
from PIL import Image
##----- Ouverture des Fichiers -----##
im = Image.open('Logo_ISN-IREM.jpg')
##----- Obtenir des informations -----##
couleur = im.mode
print("L'encodage des couleurs est ", couleur)
l, h = im.size
print('largeur : {} et hauteur : {}'.format(l, h))
x, y = 120, 120 # Coordonnées choisies au hasard
triplet = im.getpixel((x, y))
print("Ce pixel a pour composantes : ", triplet)
##------ Nouvelle image ------##
im2 = Image.new(couleur, (h,l)) # couleur est l'encodage du fichier d'origine
# l, h sont les dimensions du fichier d'origine
# h, l sont les dimensions de la nouvelle image
for x in range(l): # Abscisse de l'image d'origine
for y in range(h): # Ordonnée de l'image d'origine
triplet = im.getpixel((x, y)) # On récupère le code couleur du pixel
im2.putpixel((y, x), triplet) # On l'injecte dans le pixel correspondant
##----- Fermeture et affichage -----##
im2.save('Logo_transpose.jpg')
im2.show()