suchen
HeimBackend-EntwicklungPython-TutorialUmbrechen und rendern Sie mehrzeiligen Text auf Bildern mit der Pillow-Bibliothek von Python

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:

mkdir image_annotation

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

pip install virtualenv

C. Wechseln Sie das Arbeitsverzeichnis in den Ordner image_annotation:

cd image_annotation

D. Erstellen Sie eine neue virtuelle Umgebung:

virtualenv env

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

Windows:

.\env\Scripts\activate

Linux/macOS:

source env/bin/activate

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

pip install pillow

Ö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:

from PIL import Image, ImageDraw, ImageFont
image_file = "path_to_image"  # 请替换为您的图片路径

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

# 初始化ImageDraw
draw = ImageDraw.Draw(image)

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:

mkdir image_annotation

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:

pip install virtualenv

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

cd image_annotation

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

virtualenv env

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

.\env\Scripts\activate

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:

source env/bin/activate

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:

pip install pillow

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:

mkdir image_annotation

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:

pip install virtualenv

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!

Stellungnahme
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
Wie unterscheiden sich Numpy Arrays von den Arrays, die mit dem Array -Modul erstellt wurden?Wie unterscheiden sich Numpy Arrays von den Arrays, die mit dem Array -Modul erstellt wurden?Apr 24, 2025 pm 03:53 PM

NumpyarraysarebetterFornumericaloperations und multi-dimensionaldata, whilethearraymoduleiStableforbasic, an Gedächtniseffizienten

Wie vergleichen sich die Verwendung von Numpy -Arrays mit der Verwendung der Array -Modularrays in Python?Wie vergleichen sich die Verwendung von Numpy -Arrays mit der Verwendung der Array -Modularrays in Python?Apr 24, 2025 pm 03:49 PM

NumpyarraysarebetterforeheavynumericalComputing, während der projectwithsimpledatatypes.1) numpyarraysoferversatility und -PerformanceForlargedataSets und Compoxexoperations.2) thearraysoferversStility und Mächnory-Effefef

Wie bezieht sich das CTypes -Modul auf Arrays in Python?Wie bezieht sich das CTypes -Modul auf Arrays in Python?Apr 24, 2025 pm 03:45 PM

ctypesallowscreatingandmanipulationsc-stylearraysinpython.1) usectypestoInterfaceWithClibraryForperformance.2) createCec-stylearraysFornumericalComputationen.3) PassarrayStocfunctionsFectionFicecher-Operationen.

Definieren Sie 'Array' und 'Liste' im Kontext von Python.Definieren Sie 'Array' und 'Liste' im Kontext von Python.Apr 24, 2025 pm 03:41 PM

Inpython, eine "Liste" iSaverSatile, mutablesquencethatcanholdmixedDatatypes, während "Array" iSamorememory-effizientes, homogenoussequencequiringelementementsOfthesametype.1) ListareidealfordVeredatastorageAndmanipulationDuetothisiflexflexibilität

Ist eine Python -Liste veränderlich oder unveränderlich? Was ist mit einem Python -Array?Ist eine Python -Liste veränderlich oder unveränderlich? Was ist mit einem Python -Array?Apr 24, 2025 pm 03:37 PM

PythonlistsandArraysarBothmus.1) listsareflexiBleDsupportheterogenDatabUtarelessMemoryeffizient.2) Arraysaremoremory-effizientforhomogenousDatAbutLessvertile, das KorrectTypecodusagetoavoidoVoidERRors erfordert.

Python vs. C: Verständnis der wichtigsten UnterschiedePython vs. C: Verständnis der wichtigsten UnterschiedeApr 21, 2025 am 12:18 AM

Python und C haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1) Python ist aufgrund seiner prägnanten Syntax und der dynamischen Typisierung für die schnelle Entwicklung und Datenverarbeitung geeignet. 2) C ist aufgrund seiner statischen Tipp- und manuellen Speicherverwaltung für hohe Leistung und Systemprogrammierung geeignet.

Python vs. C: Welche Sprache für Ihr Projekt zu wählen?Python vs. C: Welche Sprache für Ihr Projekt zu wählen?Apr 21, 2025 am 12:17 AM

Die Auswahl von Python oder C hängt von den Projektanforderungen ab: 1) Wenn Sie eine schnelle Entwicklung, Datenverarbeitung und Prototypdesign benötigen, wählen Sie Python. 2) Wenn Sie eine hohe Leistung, eine geringe Latenz und eine schließende Hardwarekontrolle benötigen, wählen Sie C.

Erreichen Sie Ihre Python -Ziele: Die Kraft von 2 Stunden täglichErreichen Sie Ihre Python -Ziele: Die Kraft von 2 Stunden täglichApr 20, 2025 am 12:21 AM

Indem Sie täglich 2 Stunden Python -Lernen investieren, können Sie Ihre Programmierkenntnisse effektiv verbessern. 1. Lernen Sie neues Wissen: Lesen Sie Dokumente oder sehen Sie sich Tutorials an. 2. Üben: Schreiben Sie Code und vollständige Übungen. 3. Überprüfung: Konsolidieren Sie den Inhalt, den Sie gelernt haben. 4. Projektpraxis: Wenden Sie an, was Sie in den tatsächlichen Projekten gelernt haben. Ein solcher strukturierter Lernplan kann Ihnen helfen, Python systematisch zu meistern und Karriereziele zu erreichen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools