【问题标题】:How to get bounding box coordinates around entire text?如何获取整个文本周围的边界框坐标?
【发布时间】:2021-01-20 20:09:23
【问题描述】:

我正在使用 PIL 绘制图像并在其上写入文本。在此之后,我想为图像上的文本绘制并获取边界框坐标[(x1, y1), (x2, y2)]。我怎样才能做到这一点 ?见下文:

from IPython.display import Image 
import PIL
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw

# Colour Codes
colours = {"black":(0,0,0),
           "white": (255,255,255)
           }

# Image Description
canvas_width = 200
canvas_height = 200
img_center = (canvas_width/2, canvas_height/2)

# Text Description
size = 50
text = "Text"
font = fonts[2]
font = ImageFont.truetype(font, size)

# File Description
image_name = text

# Generate data:

## Create image canvas
img=Image.new("RGBA", (canvas_width,canvas_height), colours["black"])
draw = ImageDraw.Draw(img)

## Add text on canvas
draw.text(img_center, text, colours["white"], font=font, anchor="mm")

## Draw Bounding Box on Text
draw.rectangle(font.getbbox(text))
print("Text at:", font.getbbox(text))

# Display Image
draw = ImageDraw.Draw(img)
display(img)

# Save Image
# img.save(image_name+".png")
print("Image Saved as: ", image_name+".png")

当前输出:

【问题讨论】:

  • 不一定是字符,而是整个单词。

标签: python python-imaging-library


【解决方案1】:

如果你想要文本的边界框 w.r.t.它在图像中的位置,您需要在img 上调用getbbox,而不是font。然而,这样做也会产生不良行为:

Text at:  (0, 0, 200, 200)

那是因为您在没有实际使用 Alpha 通道的情况下初始化了 RGBA 图像。因此,所有像素的 alpha 通道都是 255,这样"the bounding box of the non-zero regions in the image" 就是完整的图像。因此,如果实际上不需要 Alpha 通道,只需初始化 RGB 图像即可。

我缩短了您的代码并应用了所述修改:

from PIL import Image, ImageDraw, ImageFont

# Image
canvas_width = 200
canvas_height = 200
img_center = (canvas_width/2, canvas_height/2)
img = Image.new('RGB', (canvas_width, canvas_height), (0, 0, 0))

# Drawing
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('arial.ttf', 50)
draw.text(img_center, 'Text', (255, 255, 255), font=font, anchor='mm')
draw.rectangle(img.getbbox())
draw = ImageDraw.Draw(img)

print('Text at: ', img.getbbox())

打印输出:

Text at:  (52, 82, 150, 119)

图像输出:

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.8.5
Pillow:        8.1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2020-03-03
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多