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:
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.
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:
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>
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>
C. Wechseln Sie das Arbeitsverzeichnis in den Ordner image_annotation:
<code class="language-bash">cd image_annotation</code>
D. Erstellen Sie eine neue virtuelle Umgebung:
<code class="language-bash">virtualenv env</code>
E. Virtuelle Umgebung aktivieren (Eingabeaufforderung für Windows verwenden):
Windows:
<code class="language-bash">.\env\Scripts\activate</code>
Linux/macOS:
<code class="language-bash">source env/bin/activate</code>
F. Verwenden Sie pip, um die Pillow-Bibliothek zu installieren:
<code class="language-bash">pip install pillow</code>
Öffnen Sie das Projekt im Code-Editor und erstellen Sie eine neue Python-Datei mit dem Namen script.py
im Projektordner.
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>
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.
DieImageDraw.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>
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.
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:
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.
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.
-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>
Fügen Sie den folgenden Code nach den Variablen text
, font
, max_width
hinzu:
<code class="language-bash">cd image_annotation</code>
Ersetzen Sie die Methode draw.multiline_text()
durch den folgenden Code:
<code class="language-bash">virtualenv env</code>
Entfernen Sie Zeilenumbrüche aus dem Text n
und führen Sie den Code aus:
<code class="language-bash">.\env\Scripts\activate</code>
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.
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>
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_lines
Die 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:
Möglicherweise müssen Sie die Gesamtzahl der Zeilen mit verschiedenen Werten multiplizieren, um die perfekte Lösung für Ihren Anwendungsfall zu erhalten.
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>
Dieser Code ermöglicht den Abstand zwischen dem Text und den Rändern des Textfelds.
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>
Im obigen Code wird die Methode ImageDraw.circle()
(wobei 10 der Radius ist) verwendet, um den Zeiger am angegebenen Punkt zu zeichnen. box_x
Die Variable ist der neue Wert der x-Achse des Textfelds.
Das Folgende ist der vollständige Code der script.py
-Datei:
<code class="language-bash">pip install virtualenv</code>
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!