Le déclencheur était le menu riche de LINE Bot. C'est un bot que j'ai créé moi-même, mais si vous appuyez sur le menu riche en bas de l'écran, Vous obtiendrez une réponse à la mesure de cela.
À propos, le point cette fois est la partie du menu riche. Il s'agit en fait d'une image libre, pas d'un bouton (actuellement, le système LINE semble n'avoir d'autre choix que de l'exprimer sous forme d'image ...).
C'est donc difficile de faire ça. Malheureusement, je n'avais pas une aussi bonne application, alors je l'ai copiée et collée à l'aide de powerpo et de peinture. Je pense que c'est un bon résultat, mais cela a pris du temps. (Ajout: avec une mise à jour récente, vous pouvez facilement la créer sur l'écran des développeurs LINE!)
Alors je pensais: "N'est-ce pas possible avec Python?" Il s'avère qu'il semble possible de le faire avec un module appelé oreiller! Voyons comment le faire tout de suite.
Si vous utilisez Python, vous le connaissez déjà, mais pour le moment, installez le module.
$ pip install pillow
À propos, l'oreiller semble être un projet de fourchette d'un module appelé PIL. La documentation officielle est ici . Cette fois, j'aimerais faire du traitement d'image principalement en référence à ce document.
Cette fois, je voudrais ajouter "100 yens" à cette image de Tapioca. Passez soudainement du code.
main.py
from PIL import Image, ImageDraw, ImageFont
#Lire l'image originale
image = Image.open("tapioca.png ")
#Puisque l'objet d'écriture de caractères est préparé, récupérez-le
draw = ImageDraw.Draw(image)
#Spécifiez la police (le fichier de police est C si Windows 10:\\Windows\\C'est dans les polices)
#size est la taille des caractères (50 pour le moment)
font = ImageFont.truetype("YuGothL.ttc", size=50)
#Dessiner des lettres
#la première(0,0)Est la position des coordonnées pour commencer à dessiner des caractères, bien sûr(10,10)Etc. sont OK
#fill détermine la couleur des caractères avec RVB
draw.text((0, 0), "100 yens", fill=(255,0,0), font=font)
#Enregistrer l'image
image.save("new_tapioca.png ")
Il s'est avéré être quelque chose comme ça.
Je jouerai avec l'arrangement des lettres. Pour autant que j'ai vu la documentation, j'avais une telle option, mais pour une raison quelconque, cela ne fonctionnait pas, alors j'ai pensé à une façon primitive de le faire.
main.py
from PIL import Image, ImageDraw, ImageFont
#Lire l'image originale
image = Image.open("tapioca.png ")
#Obtenez la taille de l'image
print(image.size[0]) # =>771 dans cet exemple
print(image.size[1]) # =>856 dans cet exemple
Vous connaissez maintenant la taille maximale.
Si les 771 et 856 ci-dessus sont définis sur la position de départ du dessin, il commencera à partir du coin inférieur droit de l'image et vous pouvez à peine voir les caractères spéciaux. Maintenant, divisez 771 et 856 par 2 et utilisez cette position comme position de départ. Cela devrait commencer à dessiner à partir du centre de l'image.
Je le savais bien, mais ça ressemble à ça. Le point de départ est certes au milieu de l'image, mais ce n'est pas comme ça ...
Le titre est un peu difficile à comprendre, mais je veux aligner le centre de "100 yens" avec le centre de l'image entière. En d'autres termes, il peut être réalisé en obtenant la taille lorsque "100 yens" est tiré et en retournant ensuite le point de départ de la moitié de la taille de "100 yens". Eh bien, c'est difficile à mettre en mots.
Je vais l'essayer pour le moment. Tout d'abord, j'ai pu obtenir la taille de "100 yens" en dessous.
from PIL import Image, ImageDraw, ImageFont
#Lors de la lecture de l'image originale
image = Image.open("tapioca.png ")
#Puisque l'objet d'écriture de caractères est préparé, récupérez-le
draw = ImageDraw.Draw(image)
#Décidez de la police
font = ImageFont.truetype("YuGothL.ttc", size=50)
#Obtenez la taille de "100 yens"
draw_text_width, draw_text_height = draw.textsize("100 yens", font=font)
Tout d'abord, après avoir défini le point de départ du dessin de "100 yens" comme partie centrale de l'image d'origine Tirez vers le haut et à gauche de la moitié de la taille de ce draw_text_width et draw_text_height. Considérez-le comme une continuation du code ci-dessus.
draw.text(((image.size[0] / 2 - draw_text_width / 2), (image.size[1] / 2 - draw_text_height / 2)), "100 yens", fill=(255, 0, 0), font=font)
C'est long et difficile à comprendre. Cela peut être plus facile à comprendre.
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 yens", fill=(255, 0, 0), font=font)
main.py
from PIL import Image, ImageDraw, ImageFont
#Lors de la lecture de l'image originale
image = Image.open("tapioca.png ")
#Puisque l'objet d'écriture de caractères est préparé, récupérez-le
draw = ImageDraw.Draw(image)
#Décidez de la police
font = ImageFont.truetype("YuGothL.ttc", size=50)
#Obtenez la taille des personnages que vous souhaitez dessiner
draw_text_width, draw_text_height = draw.textsize("100 yens", font=font)
#Déterminez les coordonnées du point de départ du dessin en fonction de la taille des caractères que vous souhaitez dessiner et de la taille de l'image d'origine
start_X_point = image.size[0] / 2 - draw_text_width / 2
start_Y_point = image.size[1] / 2 - draw_text_height / 2
#dessiner
draw.text((start_X_point, start_Y_point), "100 yens", fill=(255, 0, 0), font=font)
#Enregistrez l'image finie
image.save("new_tapioca.png ")
J'étais heureux de l'apporter au centre.
-Image et texte peuvent être facilement combinés avec Pillow! ・ Il est facile de synthétiser, mais le centrage peut être un peu gênant. (Autant que j'ai lu le document, j'ai la possibilité de centrer, mais pour une raison quelconque, cela ne fonctionne pas ...)
Recommended Posts