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)

< boites de dialogues et évenements

tkinter et les class >

Commentaires

Posts les plus consultés de ce blog

Galerie de Réalisations Python 🖼️

une Calculatrice simple avec python🧮

Bienvenue sur notre site dédié à la programmation avec Python ! 🐍