Сделайте так, чтобы размер текста автоматически настраивался на изображение с помощью PIL - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь наложить текст на изображение, для которого у меня есть следующий код:

from PIL import Image, ImageDraw, ImageFont

msg = "This is a test phrase, so please shrink the text."

im = Image.open("test.jpg")
draw = ImageDraw.Draw(im)

W, H = im.size

myFont =             
ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf")

w, h = draw.textsize(msg, font=myFont)
draw.text(((W-w)/2,(H-h)/2), msg, fill="black", font=myFont)

im.save("sample-out.png", "PNG")

Мне нужен текст для масштабирования в середине, но между пикселямиширина и высота 1600 300.Какую бы цель она ни достигла первой.

Я предполагаю, что это как-то связано с увеличением размера шрифта, но я не могу понять это.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Вы можете увеличить размер шрифта вторым параметром функции ImageFont.truetype ().

myFont = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", 32)
0 голосов
/ 04 января 2019

Итак, с небольшим количеством удачи, вот код ниже.Обратите внимание, что некоторые переменные изменили имена из исходного кода выше, но это работает.

from PIL import ImageFont, ImageDraw, Image

image = Image.open('test.jpg')
draw = ImageDraw.Draw(image)
txt = "share/fonts/truetype/customfonts/KeepC"
fontsize = 1  # starting font size

W, H = image.size

# portion of image width you want text width to be
blank = Image.new('RGB',(1000, 300))


font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
print image.size
print blank.size

while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
    # iterate until the text size is just larger than the criteria
    fontsize += 1
    font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

# optionally de-increment to be sure it is less than criteria
fontsize -= 1
font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

w, h = draw.textsize(txt, font=font)

print 'final font size',fontsize
draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
image.save('sample-out.png') # save it
...