Как выровнять русский текст по центру PIL
Мне нужно выровнять текст на русском языке по центру (библиотека PIL).
Я нашел следующий код:
from PIL import Image, ImageDraw
W, H = (300,200)
msg = "hello"
im = Image.new("RGBA",(W,H),"yellow")
draw = ImageDraw.Draw(im)
w, h = draw.textsize(msg)
draw.text(((W-w)/2,(H-h)/2), msg, fill="black")
im.save("hello.png", "PNG")
Но он выравнивает только английский текст, а русский нет.
Ответы (2 шт):
Автор решения: ganz
→ Ссылка
Дело в том что нужно указать шрифт, русский шрифт
from PIL import Image, ImageDraw,ImageFont
W, H = (300,200)
msg = "рузсцикя"
font=ImageFont.truetype("cour.ttf", 32, encoding='UTF-8') #cour.ttf путь к файлу с шрифтами см гугл 'скачать русский шрифт'
im = Image.new("RGBA",(W,H),"yellow")
draw = ImageDraw.Draw(im)
w, h = draw.textsize(msg,font=font) #тут
draw.text(((W-w)/2,(H-h)/2), msg, fill="black",font=font) #и тут
im.show()
Автор решения: Sushka Craft
→ Ссылка
Я знаю, что тема закрыта, но может кому-то пригодиться. Сегодня встретился с похожей проблемой и решение оказалось элементарным, т.к. в PIL есть специальный параметр. Без этого параметра центр текста определяется в верхнем левом углу. Параметр anchor он может принять несколько значений, но значение ms выравнивает текст по средней линии.
Вот пример кода:
from PIL import Image, ImageDraw, ImageFont
name = input('Введите имя: ')
image = Image.open('Ticket.png')
text_draw = ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", size=128)
text_draw.text(
(540, 960), #здесь мы пишем ширину и высоту, делённые на 2
f'{name}',
anchor="mm",
fill=('#FFFFFF'),
font=font
)
image.show()
image.save(f'Ticket-{name}.png')