


Umbrechen und rendern Sie mehrzeiligen Text auf Bildern mit der Pillow-Bibliothek von Python
Jan 14, 2025 am 08:59 AMPython-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.
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:
- Python3 : Interpreter zum Ausführen von Python-Skripten.
- Pillow: Python-Bildverarbeitungsbibliothek.
- 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" # 請(qǐng)?zhí)鎿Q為您的圖片路徑 # 打開圖像 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.
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:
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.
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.
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.
-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_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.
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_x
Die 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!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

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

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Polymorphismus ist ein Kernkonzept in der objektorientierten Programmierung von Python-Objekte und bezieht sich auf "eine Schnittstelle, mehrere Implementierungen" und erm?glicht eine einheitliche Verarbeitung verschiedener Arten von Objekten. 1. Polymorphismus wird durch Umschreiben durch Methode implementiert. Unterklassen k?nnen übergeordnete Klassenmethoden neu definieren. Zum Beispiel hat die Spoke () -Methode der Tierklasse unterschiedliche Implementierungen in Hunde- und Katzenunterklassen. 2. Die praktischen Verwendungen des Polymorphismus umfassen die Vereinfachung der Codestruktur und die Verbesserung der Skalierbarkeit, z. 3. Die Python -Implementierungspolymorphismus muss erfüllen: Die übergeordnete Klasse definiert eine Methode, und die untergeordnete Klasse überschreibt die Methode, erfordert jedoch keine Vererbung derselben übergeordneten Klasse. Solange das Objekt dieselbe Methode implementiert, wird dies als "Ententyp" bezeichnet. 4. Zu beachten ist die Wartung

Iteratoren sind Objekte, die __iter __ () und __next __ () Methoden implementieren. Der Generator ist eine vereinfachte Version von Iteratoren, die diese Methoden automatisch über das Keyword für Rendite implementiert. 1. Der Iterator gibt jedes Mal, wenn er als n?chstes anruft, ein Element zurück und wirft eine Ausnahme in der Stopperation aus, wenn es keine Elemente mehr gibt. 2. Der Generator verwendet Funktionsdefinition, um Daten auf Bedarf zu generieren, Speicher zu speichern und unendliche Sequenzen zu unterstützen. 3. Verwenden Sie Iteratoren, wenn Sie vorhandene S?tze verarbeiten, und verwenden Sie einen Generator, wenn Sie dynamisch Big Data oder faule Bewertung generieren, z. B. das Laden von Zeilen nach Zeile beim Lesen gro?er Dateien. Hinweis: Iterbare Objekte wie Listen sind keine Iteratoren. Sie müssen nach dem Erreichen des Iterators nach seinem Ende nachgebaut werden, und der Generator kann ihn nur einmal durchqueren.

Der Schlüssel zum Umgang mit der API -Authentifizierung besteht darin, die Authentifizierungsmethode korrekt zu verstehen und zu verwenden. 1. Apikey ist die einfachste Authentifizierungsmethode, die normalerweise in den Anforderungsheader- oder URL -Parametern platziert ist. 2. BasicAuth verwendet Benutzername und Kennwort für die Basis64 -Codierungsübertragung, die für interne Systeme geeignet ist. 3.. OAuth2 muss das Token zuerst über Client_id und Client_secret erhalten und dann das BearerToken in den Anforderungsheader bringen. V. Kurz gesagt, die Auswahl der entsprechenden Methode gem?? dem Dokument und das sichere Speichern der Schlüsselinformationen ist der Schlüssel.

Assert ist ein Inssertion -Tool, das in Python zum Debuggen verwendet wird, und wirft einen Assertionerror aus, wenn der Zustand nicht erfüllt ist. Die Syntax ist eine geltende Bedingung sowie optionale Fehlerinformationen, die für die interne Logiküberprüfung geeignet sind, z. B. Parameterprüfung, Statusbest?tigung usw., k?nnen jedoch nicht für die Sicherheits- oder Benutzereingabeprüfung verwendet werden und sollten in Verbindung mit klaren Eingabeaufforderungen verwendet werden. Es ist nur zum Hilfsdebuggen in der Entwicklungsphase verfügbar, anstatt die Ausnahmebehandlung zu ersetzen.

Eine gemeinsame Methode, um zwei Listen gleichzeitig in Python zu durchqueren, besteht darin, die Funktion ZIP () zu verwenden, die mehrere Listen in der Reihenfolge und die kürzeste ist. Wenn die Listenl?nge inkonsistent ist, k?nnen Sie iTertools.zip_longest () verwenden, um die l?ngste zu sein und die fehlenden Werte auszufüllen. In Kombination mit Enumerate () k?nnen Sie den Index gleichzeitig erhalten. 1.zip () ist pr?gnant und praktisch, geeignet für die Iteration gepaarte Daten; 2.zip_longest () kann den Standardwert beim Umgang mit inkonsistenten L?ngen einfüllen. 3.Enumerate (ZIP ()) kann w?hrend des Durchlaufens Indizes erhalten und die Bedürfnisse einer Vielzahl komplexer Szenarien erfüllen.

INPYTHON, ITERATORATORSAROBJECTSHATALWOULOUPING ThroughCollections Byimplementing__iter __ () und __Next __ (). 1) IteratorsworkviATheiterProtocol, verwendete __iter __ () toreturn thiteratorand__Next __ () torethentexteemtemuntemuntilstoperationSaised.2) und

TypHintsinpythonsolvetheProblemofAmbiguityAndpotentialbugsindynamicalpedCodeByAllowingDevelopstospecifyexpectypes

Um moderne und effiziente APIs mit Python zu schaffen, wird Fastapi empfohlen. Es basiert auf Eingabeaufforderungen an Standardpython -Typ und kann automatisch Dokumente mit ausgezeichneter Leistung generieren. Nach der Installation von Fastapi und ASGI Server Uvicorn k?nnen Sie Schnittstellencode schreiben. Durch das Definieren von Routen, das Schreiben von Verarbeitungsfunktionen und die Rückgabe von Daten kann schnell APIs erstellt werden. Fastapi unterstützt eine Vielzahl von HTTP -Methoden und bietet automatisch generierte Swaggerui- und Redoc -Dokumentationssysteme. URL -Parameter k?nnen durch Pfaddefinition erfasst werden, w?hrend Abfrageparameter durch Einstellen von Standardwerten für Funktionsparameter implementiert werden k?nnen. Der rationale Einsatz pydantischer Modelle kann dazu beitragen, die Entwicklungseffizienz und Genauigkeit zu verbessern.
