У меня есть ограничивающий прямоугольник, который имеет следующие размеры:
{"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()
Проблема в том, что, хотя высота текста и ограничивающей рамки одинаковы, но визуально они не одинаковы. Как мне решить эту проблему