
Le module ImageDraw de la bibliothèque de traitement d’image Python Pillow (PIL) fournit de nombreuses méthodes pour dessiner des figures, telles que des cercles, des carrés et des lignes droites.
Cet article décrit le contenu suivant.
- Flux de figures de dessin
- Méthode de dessin
- Paramètres communs
- Exemple de méthode
- Dessiner sur l’image existante
Consultez l’article suivant pour l’installation et l’utilisation de base de Pillow (PIL).
Flux de figures de dessin
Créer un objet de dessin
Préparez un objet Image d’une image d’arrière-plan (image pour dessiner une figure) et utilisez-le pour créer un objet Draw. N’oubliez pas d’importer Image et ImageDraw.
from PIL import Image, ImageDraw
im = Image.new('RGB', (500, 300), (128, 128, 128))
draw = ImageDraw.Draw(im)
Ici, créez une image solide avec Image.new(). Le mode, la taille et la couleur de remplissage sont spécifiés dans les paramètres.
Dessiner une forme avec la méthode de dessin
Appelez la méthode de dessin à partir de l’objet Draw pour dessiner une figure.
Dessinez une ellipse, un rectangle et une ligne droite à titre d’exemple. Les paramètres seront décrits ultérieurement.
draw.ellipse((100, 100, 150, 200), fill=(255, 0, 0), outline=(0, 0, 0))
draw.rectangle((200, 100, 300, 200), fill=(0, 192, 192), outline=(255, 255, 255))
draw.line((350, 200, 450, 100), fill=(255, 255, 0), width=10)
im.save('data/dst/pillow_imagedraw.jpg', quality=95)

Méthode de dessin
Paramètres communs
Les paramètres suivants sont couramment utilisés dans de nombreuses méthodes.
xy
Définissez une zone rectangulaire pour dessiner une figure.
Spécifiez dans l’un des formats suivants :
- (((Coordonnée x supérieure gauche, coordonnée y supérieure gauche), (coordonnée x inférieure droite, coordonnée y inférieure droite))
- (Coordonnée x supérieure gauche, coordonnée y supérieure gauche, coordonnée x inférieure droite, coordonnée y inférieure droite)
Dans line(), polygon() et point(), plusieurs coordonnées sont spécifiées au lieu de deux points représentant une zone rectangulaire.
- (x1, y1, x2, y2, x3, y3…)
- ((x1, y1), (x2, y2), (x3, y3)…)
line() dessine une ligne droite reliant chaque point, polygon() dessine un polygone où chaque point est connecté, et point() dessine un point de 1 pixel à chaque point.
remplir
Définissez la couleur pour remplir la forme.
Le format de spécification diffère selon le mode de l’image (objet Image).
- RVB : Définissez chaque valeur de couleur (0-255) sous la forme de (R, G, B)
- L (niveaux de gris) : définir une valeur (0-255) sous forme d’entier
La valeur par défaut est Aucun (pas de remplissage).
présenter
Définissez la couleur de bordure de la figure.
Le format de spécification de la couleur est le même que pour le remplissage ci-dessus. La valeur par défaut est Aucun (pas de bordure).
Depuis la version 4.4.0, il n’y a pas d’option pour définir la largeur de ligne (épaisseur de ligne) autre que line().
Exemple de méthode
Voir le document officiel pour plus de détails.
Ellipse, rectangle
- Ellipse (Cercle):
ellipse(xy, fill, outline) - Rectangle (Carré):
rectangle(xy, fill, outline)
ellipse() dessine une ellipse tangente à la zone rectangulaire spécifiée par l’argument xy. Si vous spécifiez un carré, un vrai cercle est dessiné.
Les résultats de sortie sont comme indiqué dans l’exemple ci-dessus.
Ligne, polygone, point
- Ligne:
line(xy, fill, width)- xy
- Définissez plusieurs coordonnées de deux points ou plus comme ((x1, y1), (x2, y2), (x3, y3)…).
- Des lignes reliant chaque point sont tracées.
- largeur : largeur de ligne (épaisseur de ligne)
- Notez que si vous rendez la largeur de la ligne plus épaisse avec width, spécifier 3 points ou plus avec xy rendra la connexion peu attrayante.
- xy
- Polygone:
polygon(xy, fill, outline)- xy
- Définissez plusieurs coordonnées de trois points ou plus comme ((x1, y1), (x2, y2), (x3, y3)…).
- Un polygone dans lequel chaque point est connecté est dessiné.
- xy
- Indiquer:
point(xy, fill)- xy
- Définissez plusieurs coordonnées d’un ou plusieurs points comme ((x1, y1), (x2, y2), (x3, y3)…).
- Un point de pixel est dessiné pour chaque point.
- xy
L’exemple de lignes (line()), polygone (polygon()), point (point()) est le suivant. Comme le point est de 1 pixel, il est difficile à voir, mais il est dessiné sur le côté droit.
im = Image.new('RGB', (500, 250), (128, 128, 128))
draw = ImageDraw.Draw(im)
draw.line(((30, 200), (130, 100), (80, 50)), fill=(255, 255, 0))
draw.line(((80, 200), (180, 100), (130, 50)), fill=(255, 255, 0), width=10)
draw.polygon(((200, 200), (300, 100), (250, 50)), fill=(255, 255, 0), outline=(0, 0, 0))
draw.point(((350, 200), (450, 100), (400, 50)), fill=(255, 255, 0))

Arc, accord, tarte
Un arc, un accord (arc) et un secteur touchant la zone rectangulaire spécifiée par l’argument xy sont dessinés.
- Arc:
arc(xy, start, end, fill)- début Fin
- Définissez l’angle de l’arc en degrés.
- 0 degrés est la direction de 3 heures. dans le sens des aiguilles d’une montre.
- début Fin
- Accord (archet):
chord(xy, start, end, fill, outline)- Les points de départ et d’arrivée de l’arc sont reliés par une ligne droite.
- À:
pieslice(xy, start, end, fill, outline)- Les points de départ et d’arrivée de l’arc sont reliés par une ligne droite au centre du cercle.
Un exemple d’arc (arc()), d’accord (chord()), de tarte (pieslice()) est le suivant.
im = Image.new('RGB', (600, 250), (128, 128, 128))
draw = ImageDraw.Draw(im)
draw.arc((25, 50, 175, 200), start=30, end=270, fill=(255, 255, 0))
draw.chord((225, 50, 375, 200), start=30, end=270, fill=(255, 255, 0), outline=(0, 0, 0))
draw.pieslice((425, 50, 575, 200), start=30, end=270, fill=(255, 255, 0), outline=(0, 0, 0))

Dessiner sur l’image existante
Dans les exemples précédents, les figures sont dessinées sur l’image solide générée par Image.new(). Si un fichier image existant est lu par Image.open(), il peut être dessiné dessus.
im = Image.open('data/src/lena.jpg')
draw = ImageDraw.Draw(im)
draw.pieslice((15, 50, 140, 175), start=30, end=330, fill=(255, 255, 0))

