Я разрабатывал программу, которая читает текст из различных текстовых файлов . После прочтения текста я хочу преобразовать текст в изображение, но с различными случайными атрибутами, такими как стиль шрифта , размер и межстрочный интервал.
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from random import seed
from random import randint
import numpy as np
import os.path
#Constant dimensions of the image.
image_width = 700
image_height = 1000
#Returns the text size in terms of width and height.
def getSize(txt, font):
testImg = Image.new('RGB', (1, 1))
testDraw = ImageDraw.Draw(testImg)
return testDraw.textsize(txt, font)
#Randomize XY coordinate of the text in white background image.
def get_xy_coordinates(text, font):
width, height = getSize(text, font)
xy = (randint(1, image_width - width), randint(1, image_height - height ))
return xy
if __name__ == '__main__':
seed()
file_counter = 1
fonts = ['arial.ttf', 'arialbd.ttf', 'arialbi.ttf', 'ariali.ttf', 'ARIALN.TTF', 'ARIALNB.TTF', 'ARIALNBI.TTF', 'ARIALNI.TTF','ariblk.ttf','ARLRDBD.TTF','georgia.ttf','georgiab.ttf','georgiai.ttf','georgiaz.ttf','GRGAREF.TTF','OCRAEXT.TTF','OCRAStd.otf', 'times.ttf','timesbd.ttf','timesbi.ttf','timesi.ttf','verdana.ttf','verdanab.ttf','verdanai.ttf','verdanaz.ttf', 'VERDREF.TTF']
while True:
print(file_counter)
if not os.path.isfile('text/' + str (file_counter) + '.txt'):
break
text = open('text/' + str (file_counter) + ".txt", encoding="utf8")
text = text.read()
text = ''.join(s for s in text if ord(s)>31 and ord(s)<126)
font_number = randint(0,25)
fontname = 'fonts/' + fonts[font_number]
#Limits text dimension to constant maximum dimensions of training and testing images.
while True:
fontsize = randint(20, 50)
font = ImageFont.truetype(fontname, fontsize)
width, height = getSize(text, font)
if (width < image_width) and (height < image_height):
#print('break')
break
#Creates an image with white background of constant size.
img = Image.new('RGB', (image_width, image_height), 'white')
d = ImageDraw.Draw( img)
d.text(get_xy_coordinates(text, font), text, fill='black', font=font)
img.save("text_images/" + str(file_counter) + ".png")
file_counter = file_counter + 1
Как отображать каждую строку текста с разным межстрочным интервалом (1, 1,5 и 2)?