Как найти правильный размер изображения

#python

#python

Вопрос:

Я пытаюсь преобразовать текст в изображение на Python

Это код: пока текст находится в одной строке,

Например, «Текст для записи на img 1234567890»

Это прекрасно введите описание изображения здесь

Но если текст содержит «n», то клипы изображений и расчеты размера становятся неверными

«Текст для записи в n img 1234567890»

введите описание изображения здесь

Пожалуйста, помогите

 import numpy as np
import time
import text_to_image
from PIL import Image, ImageDraw, ImageFont
import os
from win32api import GetSystemMetrics


def text_on_img(filename='01.png', text="Text to write on n img 1234567890", size=200, color=(0,0,0), bg='white'):
    "Draw a text on an Image, saves it, show it"
    fnt = ImageFont.truetype('arial.ttf', size)
    # create image
    image = Image.new(mode = "RGB", size = (int(size/2)*len(text),size 50), color = bg)
    draw = ImageDraw.Draw(image)
    # draw text
    draw.text((10,10), text, font=fnt, fill=(0,0,0))
    # save file
    image.save(filename)
    # show file
    os.system(filename)


text_on_img()
  

Комментарии:

1.подсчитайте, сколько n у этого текста, и суммируйте результат чисел n * высоты вашего шрифта.

Ответ №1:

Я исправил это отлично. Пожалуйста, протестируйте это.

 import os

from PIL import Image, ImageDraw, ImageFont


def text_on_img(filename='01.png', text="Text to write on n img 1234567890", size=200, color=(0, 0, 0), bg='white'):
    "Draw a text on an Image, saves it, show it"
    fnt = ImageFont.truetype('arial.ttf', size)
    # create image

    width = max([int(size/2) * len(line) for line in text.split('n')])
    height = (size   50) * len(text.split('n'))

    image = Image.new(mode="RGB", size=(width, height), color=bg)
    draw = ImageDraw.Draw(image)
    # draw text
    draw.text((10, 10), text, font=fnt, fill=(0, 0, 0))
    # save file
    image.save(filename)
    # show file
    os.system(filename)


text_on_img()
  

Результат:
введите описание изображения здесь

Комментарии:

1. Вы можете протестировать с любым текстом.

Ответ №2:

Одним из подходов является умножение size на количество вхождений n .

 n = text.count('n')   2
# create image
image = Image.new(mode = "RGB", size = (int(size/2)*len(text),size*n), color = bg)
  

Результат:


введите описание изображения здесь

Если вы удалите n из текста, результат будет:

введите описание изображения здесь

Другие примеры:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь