国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Inhaltsverzeichnis
Vorbereitung
Neues Projekt erstellen
Basis-Image vorbereiten
Bildanmerkung hinzufügen
Realisieren Sie den automatischen Zeilenumbruch
Dynamische Textfeldh?he festlegen
Textauffüllung hinzufügen
Zeiger hinzufügen
Vollst?ndiger Code
Fazit
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

Jan 14, 2025 am 08:59 AM

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"  # 請?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.

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&#s Pillow Library

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&#s Pillow Library

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!

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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

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

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie erleichtert Pythons unittestes oder PyTest -Framework automatisierte Tests? Wie erleichtert Pythons unittestes oder PyTest -Framework automatisierte Tests? Jun 19, 2025 am 01:10 AM

Pythons untestestes und PyTest sind zwei weit verbreitete Test -Frameworks, die das Schreiben, Organisieren und Ausführen automatisierter Tests vereinfachen. 1. Beide unterstützen die automatische Entdeckung von Testf?llen und liefern eine klare Teststruktur: Unittest definiert Tests durch Erben der Testpase -Klasse und beginnt mit Test \ _; PyTest ist pr?gnanter, ben?tigen nur eine Funktion, die mit Test \ _ beginnt. 2. Sie alle haben eine integrierte Behauptungsunterstützung: Unittest bietet AssertEqual, AssertRue und andere Methoden, w?hrend PyTest eine erweiterte Anweisung für die Assert verwendet, um die Fehlerdetails automatisch anzuzeigen. 3. Alle haben Mechanismen für die Vorbereitung und Reinigung von Tests: un

Wie kann Python zur Datenanalyse und -manipulation mit Bibliotheken wie Numpy und Pandas verwendet werden? Wie kann Python zur Datenanalyse und -manipulation mit Bibliotheken wie Numpy und Pandas verwendet werden? Jun 19, 2025 am 01:04 AM

PythonisidealfordataanalysisduetoNumPyandPandas.1)NumPyexcelsatnumericalcomputationswithfast,multi-dimensionalarraysandvectorizedoperationslikenp.sqrt().2)PandashandlesstructureddatawithSeriesandDataFrames,supportingtaskslikeloading,cleaning,filterin

Was sind dynamische Programmierungstechniken und wie verwende ich sie in Python? Was sind dynamische Programmierungstechniken und wie verwende ich sie in Python? Jun 20, 2025 am 12:57 AM

Die dynamische Programmierung (DP) optimiert den L?sungsprozess, indem komplexe Probleme in einfachere Unterprobleme zerlegt und deren Ergebnisse gespeichert werden, um wiederholte Berechnungen zu vermeiden. Es gibt zwei Hauptmethoden: 1. Top-Down (Memorisierung): Das Problem rekursiv zerlegen und Cache verwenden, um Zwischenergebnisse zu speichern; 2. Bottom-up (Tabelle): Iterativ L?sungen aus der grundlegenden Situation erstellen. Geeignet für Szenarien, in denen maximale/minimale Werte, optimale L?sungen oder überlappende Unterprobleme erforderlich sind, wie Fibonacci -Sequenzen, Rucksackprobleme usw. In Python k?nnen sie durch Dekoratoren oder Arrays implementiert werden, und die Aufmerksamkeit sollte für die Identifizierung rekursiver Beziehungen gezahlt werden, und die Optimierung der Komplexit?t des Raums.

Wie k?nnen Sie benutzerdefinierte Iteratoren in Python mit __iter__ und __next__ implementieren? Wie k?nnen Sie benutzerdefinierte Iteratoren in Python mit __iter__ und __next__ implementieren? Jun 19, 2025 am 01:12 AM

Um einen benutzerdefinierten Iterator zu implementieren, müssen Sie die Methoden __iter__ und __next__ in der Klasse definieren. ① Die __iter__ -Methode gibt das Iteratorobjekt selbst, normalerweise selbst, um mit iterativen Umgebungen wie für Schleifen kompatibel zu sein. ② Die __Next__ -Methode steuert den Wert jeder Iteration, gibt das n?chste Element in der Sequenz zurück, und wenn es keine weiteren Elemente mehr gibt, sollte die Ausnahme der Stopperation geworfen werden. ③ Der Status muss korrekt nachverfolgt werden und die Beendigungsbedingungen müssen festgelegt werden, um unendliche Schleifen zu vermeiden. ④ Komplexe Logik wie Filterung von Dateizeilen und achten Sie auf die Reinigung der Ressourcen und die Speicherverwaltung; ⑤ Für eine einfache Logik k?nnen Sie stattdessen die Funktionsertrags für Generator verwenden, müssen jedoch eine geeignete Methode basierend auf dem spezifischen Szenario ausw?hlen.

Was sind die aufkommenden Trends oder zukünftigen Richtungen in der Python -Programmiersprache und ihrem ?kosystem? Was sind die aufkommenden Trends oder zukünftigen Richtungen in der Python -Programmiersprache und ihrem ?kosystem? Jun 19, 2025 am 01:09 AM

Zukünftige Trends in Python umfassen Leistungsoptimierung, st?rkere Typ -Eingabeaufforderungen, der Aufstieg alternativer Laufzeiten und das fortgesetzte Wachstum des KI/ML -Feldes. Erstens optimiert CPython weiterhin und verbessert die Leistung durch schnellere Startzeit, Funktionsaufrufoptimierung und vorgeschlagene Ganzzahloperationen. Zweitens sind Typ -Eingabeaufforderungen tief in Sprachen und Toolchains integriert, um die Sicherheit und Entwicklung von Code zu verbessern. Drittens bieten alternative Laufzeiten wie Pyscript und Nuitka neue Funktionen und Leistungsvorteile; Schlie?lich erweitern die Bereiche von KI und Data Science weiter und aufstrebende Bibliotheken f?rdern eine effizientere Entwicklung und Integration. Diese Trends zeigen, dass Python st?ndig an technologische Ver?nderungen anpasst und seine führende Position aufrechterh?lt.

Wie führe ich Netzwerkprogrammierung in Python mit Steckdosen durch? Wie führe ich Netzwerkprogrammierung in Python mit Steckdosen durch? Jun 20, 2025 am 12:56 AM

Das Python-Socket-Modul ist die Grundlage für die Netzwerkprogrammierung und bietet Niveau-Netzwerkkommunikationsfunktionen, die für das Erstellen von Client- und Serveranwendungen geeignet sind. Um einen grundlegenden TCP -Server einzurichten, müssen Sie Socket. Um einen TCP -Client zu erstellen, müssen Sie ein Socket -Objekt erstellen und .Connect () anrufen, um eine Verbindung zum Server herzustellen, und dann .Sendall () zum Senden von Daten und .recv () zum Empfangen von Antworten verwenden. Um mehrere Clients zu handhaben, k?nnen Sie 1. Threads verwenden: Starten Sie jedes Mal einen neuen Thread, wenn Sie eine Verbindung herstellen. 2. Asynchrone E/O: Zum Beispiel kann die Asyncio-Bibliothek eine nicht blockierende Kommunikation erreichen. Dinge zu beachten

Wie schneide ich eine Liste in Python auf? Wie schneide ich eine Liste in Python auf? Jun 20, 2025 am 12:51 AM

Die Kernantwort auf die Python -Liste Slicing besteht darin, die Syntax [Start: Ende: Stufe] zu beherrschen und ihr Verhalten zu verstehen. 1. Das grundlegende Format der Listenschnitte ist die Liste [Start: Ende: Schritt], wobei der Start der Startindex (enthalten) ist, das Ende ist der Endindex (nicht enthalten) und Schritt ist die Schrittgr??e; 2. Start standardm??ig starten mit 0, lasse Ende standardm??ig bis zum Ende aus, standardm??ig standardm??ig 1 aus. 3.. Verwenden Sie My_List [: n], um die ersten N-Elemente zu erhalten, und verwenden Sie My_List [-n:], um die letzten N-Elemente zu erhalten. 4. Verwenden Sie den Schritt, um Elemente wie my_list [:: 2] zu überspringen, um gleiche Ziffern zu erhalten, und negative Schrittwerte k?nnen die Liste umkehren. 5. H?ufige Missverst?ndnisse umfassen den Endindex nicht

Polymorphismus in Pythonklassen Polymorphismus in Pythonklassen Jul 05, 2025 am 02:58 AM

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

See all articles