Pillow ImageDraw textbbox()-Methode

textbbox()Die Methode istImageDraweine sehr praktische Funktion im Modul, mit der der Begrenzungsrahmen berechnet wird, den der gegebene Text beim Zeichnen auf ein Bild einnimmt.

textbbox()Die Methode zeichnet den Text nicht tatsächlich, sondern gibt die Koordinaten des rechteckigen Bereichs zurück, den der Text einnehmen wird.

Methodensyntax

textbbox(xy, text, font=None, anchor=None, spacing=4, align="left", direction=None, features=None, language=None, stroke_width=0)

Parameterdetails

1. xy (Erforderlich)

  • Typ: tuple (x, y)
  • Beschreibung: Gibt die Startkoordinatenposition des Textes an
  • Hinweis: Die tatsächliche Textposition wird auch durch dieanchorParameter überschrieben werden.

2. text (Erforderlich)

  • Typ: string
  • Beschreibung: Der Textinhalt, für den der Begrenzungsrahmen berechnet werden muss

3. font (Optional)

  • Type: ImageFont: object
  • Standardwert: None (verwendet Standardschriftart)
  • Beschreibung: Gibt die für den Text verwendete Schriftart an

4. anchor (Optional)

  • Typ: string
  • Standardwert: None (entspricht "la")
  • Beschreibung: Steuert die Ausrichtung des Textes relativ zu den xy-Koordinaten
  • Häufige Werte:
    • "la": linksbündig, an der Grundlinie ausgerichtet (Standard)
    • "lt": linksbündig, oben ausgerichtet
    • "ma": zentriert, an der Grundlinie ausgerichtet
    • "mm": vollständig zentriert (horizontal und vertikal)

5. spacing (Optional)

  • Typ: Ganzzahl
  • Standardwert: 4
  • Beschreibung: Zeilenabstand für mehrzeiligen Text

6. align (Optional)

  • Typ: string
  • Standardwert: "left"
  • Beschreibung: Ausrichtung von mehrzeiligem Text ("left", "center", "right")

7-10. Weitere erweiterte Parameter

  • direction, features, language, stroke_widthParameter wie diese steuern erweiterte Funktionen der Textdarstellung; Anfänger müssen sie normalerweise nicht sofort beherrschen.

Rückgabewert

textbboxDie Methode gibt ein 4-Tupel zurück(left, top, right, bottom), das die Koordinaten des Begrenzungsrahmens des Textes darstellt.


Praktische Anwendungsbeispiele

Beispiel 1: Grundlegende Verwendung

Beispiel

from PIL import Image, ImageDraw, ImageFont

# Ein leeres Bild erstellen
image = Image.new('RGB', (400, 200), 'white')
draw = ImageDraw.Draw(image)

# Schriftart laden
font = ImageFont.truetype('arial.ttf', 24)

# Begrenzungsrahmen des Textes berechnen
bbox = draw.textbbox((50, 50), "Hello Pillow!", font=font)

print("Text bounding box:", bbox)  # Ausgabe: (links, oben, rechts, unten)

# Begrenzungsrahmen zeichnen (Visualisierung)
draw.rectangle(bbox, outline='red')

# Text tatsächlich zeichnen
draw.text((50, 50), "Hello Pillow!", font=font, fill='black')

image.show()

Beispiel 2: Verwendung des anchor-Parameters

Beispiel

# Fahre mit dem Bild und den draw-Objekten von oben fort

# Koordinaten des Mittelpunkts
center_x, center_y = 200, 100

# Begrenzungsrahmen für mittig ausgerichteten Text berechnen
bbox = draw.textbbox((center_x, center_y), "Zentriert", font=font, anchor="mm")

print("Zentriert ausgerichteter Begrenzungsrahmen:", bbox)

# Mittelpunkt und Begrenzungsrahmen zeichnen
draw.rectangle(bbox, outline='blue')
draw.ellipse([(center_x-2, center_y-2), (center_x+2, center_y+2)], fill='green')

# Text zeichnen
draw.text((center_x, center_y), "Zentriert", font=font, fill='black', anchor="mm")

image.show()

Häufige Anwendungsszenarien

  1. Textlayout-Berechnung: Ermitteln Sie den Platz, den er vor dem Zeichnen von Text einnimmt
  2. Automatischer Zeilenumbruch: Berechnen Sie, wie Text basierend auf der verfügbaren Breite umgebrochen wird
  3. Textzentrierung: Erreichen Sie eine präzise Zentrierung durch Kombination von Begrenzungsrahmen-Berechnungen
  4. Kollisionserkennung: Überlappung von Text mit anderen Elementen vermeiden

Hinweise

  1. Einfluss der Schriftart: Unterschiedliche Schriftarten können sehr unterschiedliche Bounding-Box-Größen zurückgeben
  2. Mehrzeiliger Text: Bei mehrzeiligem Text umfasst die Bounding-Box den Bereich aller Zeilen
  3. Leistungsaspekte: Häufige Aufrufe können die Leistung beeinträchtigen; es wird empfohlen, Ergebnisse zu cachen
  4. Genauigkeit: Die Berechnung der Bounding-Box ist näherungsweise; die tatsächliche Darstellung kann leicht abweichen

Vergleich mit textsize

In älteren Versionen von Pillow wurde die häufig verwendetetextsizeMethode zum Abrufen der Textgröße verwendet, aber diese Methode ist veraltet.textbboxEs liefert genauere Informationen (einschließlich nicht nur Breite und Höhe, sondern auch Positionsinformationen) und ist damit die bevorzugte Methode für neuen Code.

Beispiel

# Alte Methode (nicht empfohlen)
width, height = draw.textsize("Text", font=font)

# Neue Methode (empfohlen)
left, top, right, bottom = draw.textbbox((0, 0), "Text", font=font)
width = right - left
height = bottom - top

Zusammenfassung

ImageDraw.textbboxDie Methode ist ein leistungsstarkes und praktisches Werkzeug in der Pillow-Bibliothek, besonders geeignet für Szenarien, die eine präzise Steuerung des Textlayouts erfordern. Durch das Verständnis ihrer Parameter und Rückgabewerte können Entwickler problemlos verschiedene komplexe Textlayout-Anforderungen umsetzen.

Andere Erweiterungen