Рендеринг текста в изображение с интервалом 1,5 строки - PullRequest
0 голосов
/ 05 апреля 2020

Я разрабатывал программу, которая читает текст из различных текстовых файлов . После прочтения текста я хочу преобразовать текст в изображение, но с различными случайными атрибутами, такими как стиль шрифта , размер и межстрочный интервал.

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)?

...