
Das ImageDraw-Modul der Python-Bildverarbeitungsbibliothek Pillow (PIL) bietet viele Methoden zum Zeichnen von Figuren wie Kreisen, Quadraten und geraden Linien.
Dieser Artikel hat folgenden Inhalt.
- Ablauf beim Zeichnen von Figuren
- Zeichenmethode
- Gemeinsamer Parameter
- Methodenbeispiel
- Zeichnen Sie auf das vorhandene Bild
Siehe den following Artikel für die Installation und klassische Verwendung von Pillow (PIL).
Ablauf beim Zeichnen von Figuren
Zeichenobjekt erstellen
Bereiten Sie ein Image-Objekt eines Hintergrundbilds vor (Bild zum Zeichnen einer Figur) und verwenden Sie es zum Erstellen eines Draw-Objekts. Vergessen Sie nicht, Image und ImageDraw zu importieren.
from PIL import Image, ImageDraw
im = Image.new('RGB', (500, 300), (128, 128, 128))
draw = ImageDraw.Draw(im)
Erstellen Sie hier mit Image.new() ein solides Bild. Modus, Größe und Füllfarbe werden in Parametern angegeben.
Zeichnen Sie eine Form mit der Zeichenmethode
Rufen Sie die Zeichenmethode aus dem Draw-Objekt auf, um eine Figur zu zeichnen.
Zeichnen Sie als Beispiel eine Ellipse, ein Rechteck und eine Gerade. Die Parameter werden später beschrieben.
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)
Zeichenmethode
Gemeinsamer Parameter
Die folgenden Parameter werden üblicherweise in vielen Methoden verwendet.
xy
Legen Sie einen rechteckigen Bereich fest, um eine Figur zu zeichnen.
Geben Sie in einem der folgenden Formate an:
- (((Oben links x-Koordinate, oben links y-Koordinate), (unten rechts x-Koordinate, unten rechts y-Koordinate))
- (Oben links x-Koordinate, oben links y-Koordinate, unten rechts x-Koordinate, unten rechts y-Koordinate)
In line(), polygon() und point() Werden mehrere Koordinaten anstelle von zwei Punkten angegeben, sterben eine rechteckige Fläche darstellen.
- (x1, y1, x2, y2, x3, y3…)
- ((x1, y1), (x2, y2), (x3, y3)…)
line() zeichnet eine gerade Linie, die jeden Punkt verbindet, polygon() zeichnet ein Polygon, wo jeder Punkt verbunden ist, und point() zeichnet einen Punkt von 1 Pixel an jedem Punkt.
füllen
Stellen Sie die Farbe ein, um die Form zu füllen.
Das Spezifikationsformat unterscheidet sich je nach Modus des Bildes (Bildobjekt).
- RGB: Legen Sie jeden Farbwert (0-255) in Form von (R, G, B) fest.
- L (Graustufen): Stellen Sie einen Wert (0-255) als ganze Zahl ein
Der Standardwert ist „Keine“ (keine Füllung).
Gliederung
Legen Sie die Rahmenfarbe der Figur fest.
Das Spezifikationsformat der Farbe ist das gleiche wie oben für die Füllung. Der Standardwert ist „Keine“ (kein Rand).
Ab Version 4.4.0 gibt es außer line() keine andere Möglichkeit, die Linienbreite (Linienstärke) einzustellen.
Methodenbeispiel
Nichts finden Sie im offiziellen Dokument .
Ellipse, Rechteck
- Ellipse (Kreis):
ellipse(xy, fill, outline)
- Rechteck (Quadrat):
rectangle(xy, fill, outline)
ellipse() zeichnet eine Ellipse tangential zu der durch das Argument xy angegebenen rechteckigen Fläche. Wenn Sie ein Quadrat angeben, wird ein echter Kreis gezeichnet.
Die Ausgabeergebnisse sind wie im Beispiel Beispiel gezeigt.
Linie, Vieleck, Punkt
- Linie:
line(xy, fill, width)
- xy
- Legen Sie mehrere Koordinaten von zwei oder mehr Punkten als ((x1, y1), (x2, y2), (x3, y3)…) fest.
- Linien, die jeden Punkt verbinden, werden gezeichnet.
- Breite: Strichstärke (Strichstärke)
- Beachten Sie, dass, wenn SIE die Linienbreite mit Breite dicker machen, die Angabe von 3 oder mehr Punkten mit xy dazu führt, dass die Verbindung unattraktiv aussieht.
- xy
- Vieleck:
polygon(xy, fill, outline)
- xy
- Legen Sie mehrere Koordinaten von drei oder mehr Punkten als ((x1, y1), (x2, y2), (x3, y3)…) fest.
- Ein Polygon, in dem jeder Punkt verbunden ist, wird gezeichnet.
- xy
- Punkt:
point(xy, fill)
- xy
- Legen Sie mehrere Koordinaten eines oder mehrere Punkte als ((x1, y1), (x2, y2), (x3, y3)…) fest.
- Für jeden Punkt WIRD ein Pixelpunkt gezeichnet.
- xy
Das Beispiel für Linien (line()), Polygon (polygon()), Punkt (point()) ist wie folgt. Da der Punkt 1 Pixel groß ist, ist er schwer zu erkennen, aber er WIRD auf der rechten Seite gezeichnet.
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))
Bogen, Akkord, Torte
Ein Bogen, eine Sehne (Bogen) und eine Torte, die durch das Argument xy spezifizierten rechteckigen Bereich berühren, gezeichnet werden.
- Bogen:
arc(xy, start, end, fill)
- Anfang Ende
- Legen Sie den Winkel des Bogens in Grad fest.
- 0 Grad ist die Richtung von 3 Uhr. im Blick.
- Anfang Ende
- Akkord (Bogen):
chord(xy, start, end, fill, outline)
- Anfangs- und Endpunkt des Bogens werden durch eine gerade Linie verbunden.
- Kuchen:
pieslice(xy, start, end, fill, outline)
- Anfangs- und Endpunkt des Kreisbogens sind durch eine gerade Linie mit dem Kreismittelpunkt verbunden.
Beispiel für Bogen (arc()), Akkord (chord()), Torte (pieslice()) ist wie folgt.
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))
Zeichnen Sie auf das vorhandene Bild
In den bisherigen Beispielen wurden Figuren auf das von Image.new() generierte solide Bild gezeichnet. Wird eine vorhandene Bilddatei von Image.open() gelesen, kann darauf gezeichnet werden.
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))