Как вставить текст в картинку пропорционально его ширине
Есть изображение x,y
Я увеличиваю его на x+100,y+100.
Стоит задача наверху увеличенной картинки сделать описание. Я середину нашёл, и текст тоже вставил. Но он очень маленький. Как увеличить его пропорционально ширине?
def resize_canvas(old_image_path, new_image_path):
im = Image.open(old_image_path)
old_width, old_height = im.size
canvas_width = old_width+100
canvas_height = old_height+100
x1 = int(math.floor((canvas_width - old_width) / 2))
y1 = int(math.floor((canvas_height - old_height) / 2))
mode = im.mode
if len(mode) == 1: # L, 1
new_background = (255)
if len(mode) == 3: # RGB
new_background = (255, 255, 255)
if len(mode) == 4: # RGBA, CMYK
new_background = (255, 255, 255, 255)
newImage = Image.new(mode, (canvas_width, canvas_height), new_background)
newImage.paste(im, (x1, y1, x1 + old_width, y1 + old_height))
msg = "hello"
draw = ImageDraw.Draw(newImage)
xy = ((canvas_width/2),0)
draw.text(xy, msg, fill="black")
newImage.save(new_image_path)
Ответы (1 шт):
Автор решения: Radzhab
→ Ссылка
Метод вставляет текст в картинку строго по середине.
def resize_canvas(old_image_path, msg):
im = Image.open(old_image_path)
old_width, old_height = im.size
canvas_width = old_width+100
canvas_height = old_height+100
x1 = int(math.floor((canvas_width - old_width) / 2))
y1 = int(math.floor((canvas_height - old_height) / 2))
mode = im.mode
if len(mode) == 1: # L, 1
new_background = (255)
if len(mode) == 3: # RGB
new_background = (255, 255, 255)
if len(mode) == 4: # RGBA, CMYK
new_background = (255, 255, 255, 255)
newImage = Image.new(mode, (canvas_width, canvas_height), new_background)
newImage.paste(im, (x1, y1, x1 + old_width, y1 + old_height))
draw = ImageDraw.Draw(newImage)
font = ImageFont.truetype("18888.ttf", 50)
width_text, height_text = font.getsize(msg)
w, h = draw.textsize(msg, font=font)
xy = (((canvas_width-w)/2),5)
draw.text(xy, msg, font=font,fill="black")
newImage.save(old_image_path)