Как разместить текст в ограничительной рамке в Python - PullRequest
1 голос
/ 20 января 2020

У меня есть ограничивающий прямоугольник, который имеет следующие размеры:

{"name":"rect","x":169,"y":81,"width":158,"height":35}

Это истинное изображение:

обоснованная истина

Это изображение, которое я пытаюсь ввести в ограничивающий прямоугольник:

Сгенерированное изображение

Я проверяю высоту ограничивающего прямоугольника и затем пытаюсь увеличить / уменьшить размер шрифта мой текст, пока он не достигнет высоты ограничительной рамки. После этого я изменяю размер на w и h ограничительной рамки.

font_file = "DSEG7ClassicMiniItalic.ttf"
    value =0
    LCD_num = 8
    # creating a image object  

    image = Image.open(background)  

    draw = ImageDraw.Draw(image)
    text = str(randint(0, 99999999))
# specified font size
    fs = 50
    font = ImageFont.truetype(font_file, fs)
    font_size = font.getsize(text)
# draw.text((x, y), text, fill =(64,64,64), font = font, align ="right")

    size = (w,h)
    txt = Image.new('L', (3*w, 2*h))
    d = ImageDraw.Draw(txt)
    d.text((0, 0), text,  font=font, fill=255) #  fill=255 instead of 186
    width_text, height_text = d.textsize(text, font)
    img_rotated = txt.rotate(0, expand=0) #Just for example, -3 is replaces by -20
    if (height_text-value) > h:
        while( (height_text-value) > h ):
            fs = fs - 1
            font = ImageFont.truetype(font_file, fs)
            width_text, height_text = d.textsize(text, font)

    if h > (height_text+value):
        while(h > (height_text+value) ):
            fs = fs + 1
            font = ImageFont.truetype(font_file, fs)
            width_text, height_text = d.textsize(text, font)

    img_resized = txt.resize((w, h), Image.ANTIALIAS)
    px, py = x, y
    sx, sy = (w,h)
    print("height of bounding box "+ str(h))
    print("height of text "+ str(height_text))
    print("width of bounding box "+ str(w))
    print("wdith of text "+ str(width_text))
# image.paste(w, (px, py, px + sx, py + sy), w)
    d.text((0, 0), text,  font=font, fill=255) #  fill=255 instead of 186
    image.paste(ImageOps.colorize(img_resized , (0,0,0), (64,64,64)), (px, py, px + sx, py + sy),img_resized )

    image.show()

Проблема в том, что, хотя высота текста и ограничивающей рамки одинаковы, но визуально они не одинаковы. Как мне решить эту проблему

...