Heim > Backend-Entwicklung > Python-Tutorial > Umbrechen und rendern Sie mehrzeiligen Text auf Bildern mit der Pillow-Bibliothek von Python

Umbrechen und rendern Sie mehrzeiligen Text auf Bildern mit der Pillow-Bibliothek von Python

Mary-Kate Olsen
Freigeben: 2025-01-14 08:59:15
Original
773 Leute haben es durchsucht

Python-Bildverarbeitung: Die Pillow-Bibliothek implementiert die automatische Zeilenumbruch-Textanmerkung

Python hat sich mit seinen umfangreichen Open-Source-Bibliotheken zur führenden Programmiersprache im Bereich der Bildverarbeitung entwickelt. Pillow ist eine der am häufigsten verwendeten Bildverarbeitungsbibliotheken. Sie ist einfach, benutzerfreundlich und verfügt über eine vollständige Dokumentation. Sie wird häufig für Vorgänge wie Bildskalierung, Zuschneiden, Helligkeitsanpassung und Anmerkungen verwendet.

Pillow hat jedoch ein Problem mit Textanmerkungen: Wenn der Text die Breite des Textfelds überschreitet, wird er nicht automatisch umbrochen. Die Pillow-Bibliothek selbst bietet diese Funktion nicht und wir müssen die Logikimplementierung selbst schreiben.

Dieses Tutorial zeigt, wie Sie mithilfe der Pillow-Bibliothek ein Textfeld mit Zeilenumbruch in Python hinzufügen, um eine korrekte Bildtextanmerkung zu erzielen. Der endgültige Effekt ist wie folgt:

Wrap and Render Multiline Text on Images Using Python

Das Bild oben ist ein Screenshot meines Dev.to-Profils, wir werden dies als Beispiel zur Erläuterung verwenden. Das grüne Textfeld ist die von uns hinzugefügte Textanmerkung.

Vorbereitung

Für dieses Tutorial müssen Sie über grundlegende Python-Programmierkenntnisse verfügen, z. B. über bedingte Anweisungen (if, else), for-Schleifen usw. Sie benötigen außerdem die folgenden Tools und Software:

  1. Python3 : Interpreter zum Ausführen von Python-Skripten.
  2. Pillow: Python-Bildverarbeitungsbibliothek.
  3. Code-Editor: wie Pycharm, VScode usw.

Neues Projekt erstellen

Folgen Sie diesen Schritten, um ein neues Projekt zu erstellen:

A. Erstellen Sie einen neuen Ordner über das Terminal/die Befehlszeile:

<code class="language-bash">mkdir image_annotation</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

B. Verwenden Sie pip, um virtualenv zu installieren (überspringen Sie diesen Schritt, wenn Sie es bereits installiert haben):

<code class="language-bash">pip install virtualenv</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

C. Wechseln Sie das Arbeitsverzeichnis in den Ordner image_annotation:

<code class="language-bash">cd image_annotation</code>
Nach dem Login kopieren
Nach dem Login kopieren

D. Erstellen Sie eine neue virtuelle Umgebung:

<code class="language-bash">virtualenv env</code>
Nach dem Login kopieren
Nach dem Login kopieren

E. Virtuelle Umgebung aktivieren (Eingabeaufforderung für Windows verwenden):

Windows:

<code class="language-bash">.\env\Scripts\activate</code>
Nach dem Login kopieren
Nach dem Login kopieren

Linux/macOS:

<code class="language-bash">source env/bin/activate</code>
Nach dem Login kopieren
Nach dem Login kopieren

F. Verwenden Sie pip, um die Pillow-Bibliothek zu installieren:

<code class="language-bash">pip install pillow</code>
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen Sie das Projekt im Code-Editor und erstellen Sie eine neue Python-Datei mit dem Namen script.py im Projektordner.

Basis-Image vorbereiten

Das Bild, das Sie mit Anmerkungen versehen möchten, ist das Basisbild. Öffnen Sie das Bild und bereiten Sie es mit dem ImageDraw-Modul von Pillow vor. Schreiben Sie den folgenden Code in die Datei script.py:

<code class="language-python">from PIL import Image, ImageDraw, ImageFont
image_file = "path_to_image"  # 请替换为您的图片路径

# 打开图像
image = Image.open(image_file)

# 初始化ImageDraw
draw = ImageDraw.Draw(image)</code>
Nach dem Login kopieren

Bildanmerkung hinzufügen

Pillow kann einfachen Text und Textfelder mit Hintergrundfüllung hinzufügen. Der Text kann einzeilig oder mehrzeilig sein. Dieses Tutorial konzentriert sich auf das Hinzufügen eines mehrzeiligen Textfelds.

Die

ImageDraw.multiline_text()-Methode kann mehrere Zeilen Klartext hinzufügen, jedoch keinen Hintergrundabstand. Die ImageDraw.rectangle()-Methode kann ein Textfeld mit Hintergrundfüllung hinzufügen.

Fügen Sie den folgenden Code in die Datei script.py ein:

<code class="language-bash">mkdir image_annotation</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Code legt den Text, die Schriftart und die Textfeldbreite fest. Die Variablen x und y stellen den Startpunkt der Zeichnung dar, und end_x und end_y stellen die Koordinaten der unteren rechten Ecke des Textfelds dar. Die Breite und Höhe des Textfelds betragen 200 bzw. 50.

Die Methoden

ImageDraw.rectangle() und ImageDraw.multiline_text() werden zum Zeichnen von Textfeldern bzw. mehrzeiligem Text verwendet. Die Methode image.show() wird verwendet, um das verarbeitete Bild anzuzeigen. Sie können das Bild mit image.save("new_image.png") speichern. Die Ergebnisse sind wie folgt:

Wrap and Render Multiline Text on Images Using Python

Es gibt immer noch ein Problem mit der Anmerkung im Bild oben und der mehrzeilige Text wird nicht automatisch umgebrochen. Im nächsten Abschnitt wird erläutert, wie Sie dieses Problem lösen können.

Realisieren Sie den automatischen Zeilenumbruch

Zeilenumbruchzeichen n wird verwendet, um die Zeilenumbruchposition anzugeben. Im vorherigen Beispiel wird der Inhalt nach dem Zeilenumbruchzeichen n umbrochen. In praktischen Anwendungen ist die Textlänge jedoch normalerweise dynamisch und es ist schwierig, die Position des Zeilenumbruchzeichens zu bestimmen.

Das

-Attribut des ImageDraw-Moduls von .textlength()Pillow kann die Textlänge berechnen und sie mit der Textfeldbreite vergleichen, um die Position des Zeilenumbruchs zu bestimmen.

Erstellen Sie oben in der Datei script.py (nach der Importanweisung) eine neue Funktion mit dem Namen wrap_text(), die die Zeilenumbruchlogik enthält:

<code class="language-bash">pip install virtualenv</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Fügen Sie den folgenden Code nach den Variablen text, font, max_width hinzu:

<code class="language-bash">cd image_annotation</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ersetzen Sie die Methode draw.multiline_text() durch den folgenden Code:

<code class="language-bash">virtualenv env</code>
Nach dem Login kopieren
Nach dem Login kopieren

Entfernen Sie Zeilenumbrüche aus dem Text n und führen Sie den Code aus:

<code class="language-bash">.\env\Scripts\activate</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das laufende Ergebnis zeigt, dass der Text immer noch die Höhe des Textfelds überschreitet. Während sich der Text automatisch an die Breite des Textfelds anpasst, ist die Höhe des Textfelds fest, was dazu führt, dass der Text überläuft.

Dynamische Textfeldhöhe festlegen

Die Höhe des dynamischen Textfelds wird anhand der Anzahl der Textzeilen bestimmt. Der erste Schritt besteht darin, die Variable end_y des Textfelds in einen dynamischen Wert zu ändern:

<code class="language-bash">source env/bin/activate</code>
Nach dem Login kopieren
Nach dem Login kopieren

Diese Formel wurde nach vielen Experimenten entwickelt und scheint in diesem Anwendungsfall die beste Lösung zum Ermitteln der dynamischen Textfeldhöhe zu sein. wrapped_linesDie Liste enthält alle Zeilen, die dem Textfeld hinzugefügt werden sollen, sodass die Länge der Liste der Gesamtzahl der Zeilen des Textfelds entspricht.

Die Ergebnisse sind wie folgt:

Wrap and Render Multiline Text on Images Using Python

Möglicherweise müssen Sie die Gesamtzahl der Zeilen mit verschiedenen Werten multiplizieren, um die perfekte Lösung für Ihren Anwendungsfall zu erhalten.

Textauffüllung hinzufügen

Der Text befindet sich zu nah am Rand des Textfelds, was die Lesbarkeit und den Stil beeinträchtigt. Sie können dieses Problem lösen, indem Sie im Textfeld eine Auffüllung hinzufügen. Fügen Sie eine neue script.py-Variable in der padding-Datei hinzu und ändern Sie die Größe des Textfelds:

<code class="language-bash">pip install pillow</code>
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Code ermöglicht den Abstand zwischen dem Text und den Rändern des Textfelds.

Zeiger hinzufügen

Der Zeiger kann bequem auf den Teil des Bildes hinweisen, auf den sich die Anmerkung/Beschriftung bezieht. Der Zeiger sollte vor der Beschriftung stehen. Das bedeutet, dass der Zeiger an der aktuellen Position des Textfelds gezogen wird und das Textfeld nach rechts verschoben wird.

Daher wird die x-Achse des Textfelds mit der neuen Variablen box_x verknüpft. Diese Änderung muss sich auch in anderen Variablen widerspiegeln, die die X-Achse des Textfelds verwenden. Hier ist der aktualisierte Code:

<code class="language-bash">mkdir image_annotation</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im obigen Code wird die Methode ImageDraw.circle() (wobei 10 der Radius ist) verwendet, um den Zeiger am angegebenen Punkt zu zeichnen. box_xDie Variable ist der neue Wert der x-Achse des Textfelds.

Vollständiger Code

Das Folgende ist der vollständige Code der script.py-Datei:

<code class="language-bash">pip install virtualenv</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Fazit

Bildbearbeitung ist nicht immer so schwierig, wie es scheint. Obwohl einige Bildverarbeitungsbibliotheken Ihr Problem mit ihren Modulen nicht direkt lösen können, können Sie vorhandene Module verwenden, um eine spezifische Lösung für Ihren Anwendungsfall zu implementieren. Das ist das Schöne am Codieren – Probleme lösen zu können mit benutzerdefinierten und spezifischen Lösungen.

In diesem Tutorial haben Sie gelernt, wie Sie die Pillow-Bibliothek von Python verwenden, um Bilder mit Anmerkungen zu versehen, mehrzeilige Textfelder mit Wortumbruch hinzuzufügen und vieles mehr. Außerdem haben Sie gelernt, mathematische Formeln zu schreiben, die Ihnen bei der Bildverarbeitung helfen können.

Einzelheiten zu den verwendeten Modulen finden Sie in der Pillow-Dokumentation.

Das obige ist der detaillierte Inhalt vonUmbrechen und rendern Sie mehrzeiligen Text auf Bildern mit der Pillow-Bibliothek von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage