Центрирование текста в изображении

image = Image.new('RGB', (400, 100), color=('#ADFF2F'))
font = ImageFont.truetype("arial.ttf", size=18)
draw_text = ImageDraw.Draw(image)
draw_text.text((40, 20), text, font=font, fill=('#000000'))
back = Image.open('back2.png')
width1, height1 = back.size
width2, height2 = image.size
back.paste(image, (round((width1 - width2) / 2), round((height1 - height2) / 2)))
У меня есть:
- Фон (на картинке - черная рамка)
- Изображение для генерации текста (на картинке с зеленым фоном)
- и сам текст
Зеленую картинку я отцентровал, но мне нужно отцентровать также текст, учитывая его размер, т.е. он может быть в 4 символа, а может в 20. Как это сделать?
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Вам нужно вычислить размер текста и вывести его, отцентрировав:
from PIL import Image, ImageDraw, ImageFont
text = "StackOverflow"
image = Image.new('RGB', (400, 100), color=('#ADFF2F'))
font = ImageFont.truetype("arial.ttf", size=18)
def text_size(text, font):
width = font.getmask(text).getbbox()[2]
height = font.getmask(text).getbbox()[3]
return (width, height)
txt_width, txt_height = text_size(text, font)
draw_text = ImageDraw.Draw(image)
draw_text.text((int(image.size[0]/2 - txt_width/2), int(image.size[1]/2 - txt_height/2)), text, font=font, fill=('#000000'))
back = Image.open('back2.png')
width1, height1 = back.size
width2, height2 = image.size
back.paste(image, (round((width1 - width2) / 2), round((height1 - height2) / 2)))
image.show()
