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
So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu findenSo verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu findenMar 05, 2025 am 09:58 AM

Dieses Tutorial zeigt, wie man Python verwendet, um das statistische Konzept des Zipf -Gesetzes zu verarbeiten, und zeigt die Effizienz des Lesens und Sortierens großer Textdateien von Python bei der Bearbeitung des Gesetzes. Möglicherweise fragen Sie sich, was der Begriff ZiPF -Verteilung bedeutet. Um diesen Begriff zu verstehen, müssen wir zunächst das Zipf -Gesetz definieren. Mach dir keine Sorgen, ich werde versuchen, die Anweisungen zu vereinfachen. Zipf -Gesetz Das Zipf -Gesetz bedeutet einfach: In einem großen natürlichen Sprachkorpus erscheinen die am häufigsten vorkommenden Wörter ungefähr doppelt so häufig wie die zweiten häufigen Wörter, dreimal wie die dritten häufigen Wörter, viermal wie die vierten häufigen Wörter und so weiter. Schauen wir uns ein Beispiel an. Wenn Sie sich den Brown Corpus in amerikanischem Englisch ansehen, werden Sie feststellen, dass das häufigste Wort "Th ist

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Mar 10, 2025 pm 06:54 PM

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

Bildfilterung in PythonBildfilterung in PythonMar 03, 2025 am 09:44 AM

Der Umgang mit lauten Bildern ist ein häufiges Problem, insbesondere bei Mobiltelefonen oder mit geringen Auflösungskamera-Fotos. In diesem Tutorial wird die Bildfilterungstechniken in Python unter Verwendung von OpenCV untersucht, um dieses Problem anzugehen. Bildfilterung: Ein leistungsfähiges Werkzeug Bildfilter

Wie man mit PDF -Dokumenten mit Python arbeitetWie man mit PDF -Dokumenten mit Python arbeitetMar 02, 2025 am 09:54 AM

PDF-Dateien sind für ihre plattformübergreifende Kompatibilität beliebt, wobei Inhalte und Layout für Betriebssysteme, Lesegeräte und Software konsistent sind. Im Gegensatz zu Python Processing -Klartextdateien sind PDF -Dateien jedoch binäre Dateien mit komplexeren Strukturen und enthalten Elemente wie Schriftarten, Farben und Bilder. Glücklicherweise ist es nicht schwierig, PDF -Dateien mit Pythons externen Modulen zu verarbeiten. In diesem Artikel wird das PYPDF2 -Modul verwendet, um zu demonstrieren, wie Sie eine PDF -Datei öffnen, eine Seite ausdrucken und Text extrahieren. Die Erstellung und Bearbeitung von PDF -Dateien finden Sie in einem weiteren Tutorial von mir. Vorbereitung Der Kern liegt in der Verwendung von externem Modul PYPDF2. Installieren Sie es zunächst mit PIP: pip ist p

Wie kann man mit Redis in Django -Anwendungen zwischenstrichenWie kann man mit Redis in Django -Anwendungen zwischenstrichenMar 02, 2025 am 10:10 AM

Dieses Tutorial zeigt, wie man Redis Caching nutzt, um die Leistung von Python -Anwendungen zu steigern, insbesondere innerhalb eines Django -Frameworks. Wir werden Redis -Installation, Django -Konfiguration und Leistungsvergleiche abdecken, um den Vorteil hervorzuheben

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Mar 10, 2025 pm 06:52 PM

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps

Einführung in die parallele und gleichzeitige Programmierung in PythonEinführung in die parallele und gleichzeitige Programmierung in PythonMar 03, 2025 am 10:32 AM

Python, ein Favorit für Datenwissenschaft und Verarbeitung, bietet ein reichhaltiges Ökosystem für Hochleistungs-Computing. Die parallele Programmierung in Python stellt jedoch einzigartige Herausforderungen dar. Dieses Tutorial untersucht diese Herausforderungen und konzentriert sich auf die globale Interprete

So implementieren Sie Ihre eigene Datenstruktur in PythonSo implementieren Sie Ihre eigene Datenstruktur in PythonMar 03, 2025 am 09:28 AM

Dieses Tutorial zeigt, dass eine benutzerdefinierte Pipeline -Datenstruktur in Python 3 erstellt wird, wobei Klassen und Bedienerüberladungen für verbesserte Funktionen genutzt werden. Die Flexibilität der Pipeline liegt in ihrer Fähigkeit, eine Reihe von Funktionen auf einen Datensatz GE anzuwenden

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft