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.
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.
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.
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.
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.
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.
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.
Ich wusste es gut, aber es sieht so aus. Der Ausgangspunkt liegt sicherlich in der Mitte des Bildes, aber es ist nicht so ...
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)
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.
-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