[Minimale Konfiguration] Verwenden Sie das Kissenmodul von Python, um die Zeichen "100 Yen" mit dem Bild von Tapioka-Milchtee zu synthetisieren.

Zweck

Der Auslöser war das reichhaltige Menü von LINE Bot. Dies ist ein Bot, den ich selbst gemacht habe, aber wenn Sie auf das reichhaltige Menü am unteren Bildschirmrand tippen, Sie erhalten eine entsprechende Antwort.

MicrosoftTeams-image.png

Der Punkt dieses Mal ist übrigens der reichhaltige Menüteil. Dies ist eigentlich ein freies Bild, keine Schaltfläche (derzeit scheint das LINE-System keine andere Wahl zu haben, als es als Bild auszudrücken ...).

Es ist also schwierig, das zu machen. Leider hatte ich keine so gute App, also habe ich sie mit Powerpo und Paint ausgeschnitten und eingefügt. Ich denke, es ist ein gutes Ergebnis, aber es hat lange gedauert. (Ergänzung: Mit einem kürzlich durchgeführten Update können Sie es einfach auf dem Bildschirm LINE Developers erstellen!)

Also dachte ich: "Ist das mit Python nicht möglich?" Es stellt sich heraus, dass es möglich scheint, dies mit einem Modul namens Pillow zu tun! Mal sehen, wie es sofort geht.

Installation

Wenn Sie Python verwenden, sind Sie bereits damit vertraut, installieren Sie das Modul jedoch vorerst.

$ pip install pillow

Pillow scheint übrigens ein Gabelprojekt eines Moduls namens PIL zu sein. Die offizielle Dokumentation finden Sie hier . Dieses Mal möchte ich die Bildverarbeitung hauptsächlich mit Bezug auf dieses Dokument durchführen.

Zeichnen Sie Text auf ein vorhandenes Bild

Dieses Mal möchte ich diesem Tapioka-Bild "100 Yen" hinzufügen. Plötzlich vom Code gehen.

main.py


from PIL import Image, ImageDraw, ImageFont

#Lesen Sie das Originalbild
image = Image.open("tapioca.png ")

#Ein Objekt zum Schreiben von Zeichen wird vorbereitet, also holen Sie es sich
draw = ImageDraw.Draw(image)

#Geben Sie die Schriftart an (Schriftartdatei ist C, wenn Windows 10:\\Windows\\Es ist in Schriftarten)
#Größe ist die Zeichengröße (vorerst 50)
font = ImageFont.truetype("YuGothL.ttc", size=50)

#Buchstaben zeichnen
#Der Erste(0,0)Ist natürlich die Koordinatenposition, an der mit dem Zeichnen von Zeichen begonnen werden soll(10,10)Usw. sind in Ordnung
#Füllung bestimmt die Farbe von Zeichen mit RGB
draw.text((0, 0), "100 Yen", fill=(255,0,0), font=font)

#Bild speichern
image.save("new_tapioca.png ")

Es stellte sich heraus, dass es so etwas war. new_sample.png

Anwendung (Zentrierung usw.)

Ich werde mit der Anordnung der Buchstaben spielen. Soweit ich die Dokumentation gesehen habe, hatte ich eine solche Option, aber aus irgendeinem Grund hat sie nicht funktioniert, also habe ich mir einen primitiven Weg überlegt, dies zu tun.

Versuchen Sie, die Bildgröße zu ermitteln

main.py



from PIL import Image, ImageDraw, ImageFont

#Lesen Sie das Originalbild
image = Image.open("tapioca.png ")

#Holen Sie sich die Größe des Bildes
print(image.size[0]) # =>771 in diesem Beispiel
print(image.size[1]) # =>856 in diesem Beispiel

Jetzt kennen Sie die maximale Größe.

Beginnen Sie mit dem Zeichnen von der Mitte des gesamten Bildes aus

Wenn die obigen 771 und 856 auf die Startposition der Zeichnung eingestellt sind, beginnt sie unten rechts im Bild, und Sie können die Sonderzeichen kaum sehen. Teilen Sie nun 771 und 856 durch 2 und verwenden Sie diese Position als Startposition. Dies sollte von der Bildmitte aus beginnen.

new_sample.png

Ich wusste es gut, aber es sieht so aus. Der Ausgangspunkt liegt sicherlich in der Mitte des Bildes, aber es ist nicht so ...

Außerdem wird die Größe der Zeichenfläche von "100 Yen" erfasst und der Platz um die Hälfte des Wertes zurückgezogen.

Der Titel ist etwas schwer zu verstehen, aber ich möchte die Mitte von "100 Yen" mit der Mitte des gesamten Bildes ausrichten. Mit anderen Worten, dies kann realisiert werden, indem die Größe beim Zeichnen von "100 Yen" ermittelt und dann der Startpunkt um die Hälfte der Größe von "100 Yen" zurückgegeben wird. Nun, es ist schwer in Worte zu fassen.

Ich werde es vorerst versuchen. Zuallererst konnte ich die Größe von "100 Yen" selbst unten bekommen.

from PIL import Image, ImageDraw, ImageFont

#Beim Lesen des Originalbildes
image = Image.open("tapioca.png ")

#Ein Objekt zum Schreiben von Zeichen wird vorbereitet, also holen Sie es sich
draw = ImageDraw.Draw(image)

#Legen Sie die Schriftart fest
font = ImageFont.truetype("YuGothL.ttc", size=50)

#Holen Sie sich die Größe von "100 Yen"
draw_text_width, draw_text_height = draw.textsize("100 Yen", font=font)

Nachdem Sie den Startpunkt für die Zeichnung auf "100 Yen" als zentralen Teil des Originalbilds festgelegt haben Ziehen Sie nach oben und links um die Hälfte der Größe dieser draw_text_width und draw_text_height. Stellen Sie sich das als Fortsetzung des obigen Codes vor.

draw.text(((image.size[0] / 2 - draw_text_width / 2), (image.size[1] / 2 - draw_text_height / 2)), "100 Yen", fill=(255, 0, 0), font=font)

Es ist lang und schwer zu verstehen. Dies ist möglicherweise leichter zu verstehen.

start_X_point = image.size[0] / 2 - draw_text_width / 2
start_Y_point = image.size[1] / 2 - draw_text_height / 2

draw.text((start_X_point, start_Y_point), "100 Yen", fill=(255, 0, 0), font=font)

Abschlusscode

main.py


from PIL import Image, ImageDraw, ImageFont

#Beim Lesen des Originalbildes
image = Image.open("tapioca.png ")

#Ein Objekt zum Schreiben von Zeichen wird vorbereitet, also holen Sie es sich
draw = ImageDraw.Draw(image)

#Legen Sie die Schriftart fest
font = ImageFont.truetype("YuGothL.ttc", size=50)

#Ermitteln Sie die Größe der Zeichen, die Sie zeichnen möchten
draw_text_width, draw_text_height = draw.textsize("100 Yen", font=font)

#Bestimmen Sie die Koordinaten des Startpunkts der Zeichnung anhand der Größe der Zeichen, die Sie zeichnen möchten, und der Größe des Originalbilds
start_X_point = image.size[0] / 2 - draw_text_width / 2
start_Y_point = image.size[1] / 2 - draw_text_height / 2

#zeichnen
draw.text((start_X_point, start_Y_point), "100 Yen", fill=(255, 0, 0), font=font)

#Speichern Sie das fertige Bild
image.save("new_tapioca.png ")

Ich war froh, es ins Zentrum zu bringen.

new_sample.png

Zusammenfassung

-Bild und Text können leicht mit Kissen kombiniert werden! ・ Es ist leicht zu synthetisieren, aber das Zentrieren kann etwas mühsam sein. (Soweit ich das Dokument gelesen habe, habe ich die Möglichkeit zu zentrieren, aber aus irgendeinem Grund funktioniert es nicht ...)

Recommended Posts

[Minimale Konfiguration] Verwenden Sie das Kissenmodul von Python, um die Zeichen "100 Yen" mit dem Bild von Tapioka-Milchtee zu synthetisieren.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Mindestkenntnisse, um mit dem Python-Protokollierungsmodul zu beginnen
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Der einfachste Weg, um Stimme mit Python zu synthetisieren
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
Der einfachste Weg, OpenCV mit Python zu verwenden
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Ein Hinweis auf Missverständnisse beim Versuch, das gesamte selbst erstellte Modul mit Python3 zu laden
Verwendung von Raspeye Relay Module Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Verwenden wir die Python-Version des Confluence-API-Moduls.
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Warum kann ich das Modul durch Importieren mit Python verwenden?
Erleichtern Sie die Anzeige von Python-Modulausnahmen
[Python] Ich möchte die Option -h mit argparse verwenden
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
[Python] Ich habe versucht, das Preisgeld von "ONE PIECE" über 100 Millionen Zeichen mit matplotlib zu visualisieren.
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Aktiviert, um PNG mit Pillow of Python in JPG zu konvertieren
[Version September 2020] Erläutert das Verfahren zur Verwendung der Google Mail-API mit Python
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Python: So verwenden Sie Async mit
Verwendung des optparse-Moduls
Verwendung des ConfigParser-Moduls
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
[Python] Verwendung von Liste 2 Referenz des Listenwerts, der Anzahl der Elemente, des Maximalwerts und des Minimalwerts
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
Versuchen Sie, die Position eines Objekts auf dem Schreibtisch (reales Koordinatensystem) anhand des Kamerabilds mit Python + OpenCV zu messen