Tkinter et pillow : gestion des images
Pillow est une bibliothèque Python puissante pour le traitement d’images. Elle est construite au-dessus de la bibliothèque PIL (Python Image Library) et est considérée comme son successeur, car PIL a été abandonnée depuis 2011.
Installation :
Pillow n’est pas inclus par défaut dans
Python. Pour l’installer, utilisez la commande suivante dans le terminal :
pip install pillow
Ouverture et affichage d’une image :
Pillow fournit les fonctions open() et show() pour lire et afficher
une image, respectivement.
Lors de l’affichage, Pillow convertit
d’abord l’image au format .png (sur Windows) et la stocke dans un tampon
temporaire avant de l’afficher. Cela peut entraîner la perte de certaines
propriétés de l’image d’origine (comme l’animation).
Exemple :
from PIL import
Image
img = Image.open("geek.jpg")
img.show()
Informations sur l’image ouverte :
La méthode size renvoie un tuple contenant
la largeur et la hauteur de l’image. La méthode format renvoie le format du
fichier image (par exemple, “JPEG”). Exemple :
img = Image.open("geek.jpg")
print(img.size) # (287, 70)
print(img.format) # "JPEG"
Modes de couleur de l’image :
Le mode de l’image indique le type et la
profondeur des pixels. Quelques modes courants :
1 : Pixels en noir et
blanc (1 bit).
L : Pixels en niveaux de
gris (8 bits).
P : Pixels indexés via une
palette de couleurs (8 bits).
RGB : Pixels en couleur
vraie (3x8 bits).
RGBA : Pixels en couleur
vraie avec canal alpha (4x8 bits). Exemple :
print(img.mode) # "RGB"
Intégrer une Image PIL sur tkinter
Importer les modules nécessaires :
Dans votre script Python, importez les
modules Image et ImageTk depuis Pillow :
from PIL import
Image, ImageTk
Ouvrir l’image avec Pillow :
Chargez votre image à l’aide de
Image.open() :
img = Image.open("chemin/vers/votre_image.jpg")
Redimensionner l’image (si nécessaire) :
Vous pouvez redimensionner l’image en
utilisant la méthode resize() :
img_resized = img.resize((largeur,
hauteur), Image.ANTIALIAS)
Créer un objet PhotoImage :
Utilisez ImageTk.PhotoImage() pour créer un objet PhotoImage à partir de votre image :
img_tk = ImageTk.PhotoImage(img_resized)
Afficher l’image dans Tkinter :
Créez un widget Label dans votre fenêtre
Tkinter et utilisez l’objet PhotoImage comme image :
import tkinter as
tk
root = tk.Tk()
label = tk.Label(root, image=img_tk)
label.pack()
root.mainloop()
Assurez-vous de remplacer "chemin/vers/votre_image.jpg" par le
chemin d’accès réel vers votre image. Vous pouvez également personnaliser la
taille et la position de l’image en ajustant les paramètres du widget Label.
Fonctions utiles de le librairie Pillow
ImageEnhance
La bibliothèque Pillow propose le
module ImageEnhance, qui contient plusieurs classes pour améliorer les
images. Voici les principales classes, leurs rôles et des exemples
d’utilisation :
From PIL import ImageEnhance
ImageEnhance.Color(image) :
Rôle : Ajuste l’équilibre des
couleurs de l’image. Une valeur d’amélioration de 0.0 donne une image en noir
et blanc, tandis
qu’une valeur de 1.0 conserve les couleurs
d’origine.
Exemple :
from PIL import
Image, ImageEnhance
img = Image.open("mon_image.jpg") enhancer = ImageEnhance.Color(img)
enhanced_img = enhancer.enhance(0.5) # Réduit la saturation des couleurs
ImageEnhance.Contrast(image) :
Rôle : Contrôle le contraste
de l’image. Une valeur d’amélioration de 0.0 donne une image en gris solide,
1.0 conserve l’image d’origine, et des valeurs plus élevées augmentent le
contraste.
Exemple :
enhancer = ImageEnhance.Contrast(img)
high_contrast_img = enhancer.enhance(1.5) # Augmente le contraste
ImageEnhance.Brightness(image) :
Rôle : Ajuste la luminosité
de l’image. Une valeur d’amélioration de 0.0 donne une image noire, 1.0
conserve l’image d’origine, et des valeurs plus élevées augmentent la
luminosité.
Exemple :
enhancer = ImageEnhance.Brightness(img)
brighter_img = enhancer.enhance(1.2) # Augmente la luminosité 4.
ImageEnhance.Sharpness(image) :
Rôle : Ajuste la netteté de
l’image. Une valeur d’amélioration de 0.0 donne une image floue, 1.0 conserve
l’image d’origine, et 2.0 donne une image plus nette.
Exemple :
enhancer = ImageEnhance.Sharpness(img)
sharper_img = enhancer.enhance(1.5) # Augmente la netteté
Ces classes vous permettent de manipuler facilement les propriétés
visuelles de vos images.
ImageDraw
Le module ImageDraw de la bibliothèque Pillow (également
connue sous le nom de PIL Fork) permet de dessiner sur des images. Voici
quelques-unes des fonctions courantes, leurs rôles et des exemples
d’utilisation :
From PIL import ImageDraw
ImageDraw.line(xy, fill, width=1) :
Rôle : Dessine une ligne
entre les points spécifiés.
Exemple :
from PIL import
Image, ImageDraw
img = Image.open("mon_image.jpg") draw = ImageDraw.Draw(img) draw.line((0,
0) + img.size, fill=128)
draw.line((0, img.size[1], img.size[0],
0), fill=128)
ImageDraw.rectangle(xy, fill,
outline=None, width=1) :
Rôle : Dessine un rectangle
délimité par les coins spécifiés.
Exemple :
draw.rectangle([50, 50, 200, 150], fill="blue", outline="red", width=2)
ImageDraw.ellipse(xy, fill, outline=None,
width=1) :
Rôle : Dessine une ellipse
délimitée par le rectangle spécifié.
Exemple :
draw.ellipse([100, 100, 300, 200], fill="green", outline="black", width=2)
ImageDraw.text(xy, text, font=None,
fill=None) :
Rôle : Écrit du texte à la
position spécifiée.
Exemple :
from PIL import
ImageFont
font = ImageFont.truetype("arial.ttf", size=24) draw.text((10, 10), "Hello, Pillow!", font=font, fill="white")
ImageDraw.polygon(xy, fill, outline=None,
width=1) :
Rôle : Dessine un polygone
défini par les points spécifiés.
Exemple :
draw.polygon([(50, 50), (100, 150), (200,
100)], fill="yellow", outline="purple", width=2)
Ces fonctions vous permettent de créer des formes, d’ajouter du texte et de
personnaliser vos images.
Image :
Image.open(filename) :
Rôle : Ouvre une image à
partir du fichier spécifié.
Exemple :
from PIL import
Image
img = Image.open("mon_image.jpg")
img.show() :
Rôle : Affiche l’image dans
le visualiseur d’images par défaut.
Exemple :
img.show()
img.size :
Rôle : Renvoie un tuple
contenant la largeur et la hauteur de l’image.
Exemple :
largeur, hauteur = img.size
img.format :
Rôle : Renvoie le format du
fichier image (par exemple, “JPEG”).
Exemple :
format_image = img.format
img.mode :
Rôle : Renvoie le mode de
couleur de l’image (par exemple, “RGB”).
Exemple :
mode_couleur = img.mode
img.crop(box) :
Rôle : Récupère une région
rectangulaire de l’image.
Exemple :
region = img.crop((100, 50, 200, 150))
img.rotate(angle) :
Rôle : Fait pivoter l’image
de l’angle spécifié (en degrés).
Exemple :
img_rotated = img.rotate(90)
img.resize((largeur, hauteur)) :
Rôle : Redimensionne l’image
aux dimensions spécifiées.
Exemple :
img_resized = img.resize((300, 200))
img.convert(mode) :
Rôle : Convertit l’image dans
un nouveau mode de couleur.
Exemple :
img_gris = img.convert("L")
img.filter(filter_type) :
Rôle : Applique un filtre à
l’image (par exemple, flou, netteté, etc.).
Exemple :
img_floue = img.filter(ImageFilter.BLUR)
img.transpose(method) :
Rôle : Transpose l’image (par
exemple, miroir horizontal ou vertical).
Exemple :
img_miroir_horizontal =
img.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
img.convert("RGBA").putalpha(alpha_channel)
:
Rôle : Ajoute un canal alpha
(transparence) à l’image.
Exemple :
img_transparente = img.convert("RGBA").putalpha(128)
Image.new(mode, size, color) :
Rôle : Crée une nouvelle
image avec le mode, la taille et la couleur spécifiés.
Exemple :
nouvelle_image = Image.new("RGB", (800, 600), color=(255, 0, 0))
ImageChops.add(img1, img2) :
Rôle : Effectue une addition
pixel par pixel entre deux images.
Exemple :
resultat_addition = ImageChops.add(img1,
img2)
ImageOps.grayscale(img) :
Rôle : Convertit l’image en
niveaux de gris.
Exemple :
img_gris = ImageOps.grayscale(img)
Commentaires
Enregistrer un commentaire