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

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

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

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

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

"Текст для записи \ n img 1234567890"

enter image description here

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

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()
-2
Ashish 2 Сен 2020 в 18:55

2 ответа

Лучший ответ

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

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
Ahmed Mamdouh 2 Сен 2020 в 16:14

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

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

Результат:


enter image description here

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

enter image description here

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

enter image description here

enter image description here

enter image description here

0
Ahmet 2 Сен 2020 в 16:40