首页 > 解决方案 > 如何获取在图片上绘制的 Image.Draw 文本的宽度和高度?

问题描述

在此处输入图像描述已经有几个问题,听起来与 stackoverflow 上的这个问题非常相似,但它们的重点与我想知道的有点不同。

我使用 Python 图像库中的 ImageDraw 在图像上粘贴了文本。我现在的问题是:有没有办法找出整个文本的宽度和高度?对我自己来说,想象文本有一种矩形框架。我想得到这个文本字段的测量值。我的 text1 可以像图像一样对待吗?我可以通过输入“width, height = text1.size”之类的内容来获取它的大小吗?

我已经尝试通过使用 ImageDraw.getwidth 命令来获取宽度,正如其他问题中所建议的那样,但遗憾的是这些解决方案对我不起作用。

我特别想要实现的是能够计算下一个文本字段可以放置在哪里而不覆盖当前文本。

提前感谢您的支持!

在附图中,您可以看到两个 ImageDraw 绘制的文本,分别名为“text”和“xyz”。我希望 xyz 适合“测试”,即使“测试”会包含更多字母。因此我需要知道“测试”的宽度。

标签: pythonpython-3.xmacospython-imaging-library

解决方案


您可以在单独的画布(黑色背景)上用相同大小的相同字体以白色书写相同的文本,然后得到修剪后的“边界框”,如下所示:

#!/usr/bin/env python3

from PIL  import Image, ImageFont, ImageDraw

# Create a blank canvas
canvas = Image.new('RGB', (100,100))

# Get a drawing context
fontsize=28
draw = ImageDraw.Draw(canvas)
monospace = ImageFont.truetype("/Library/Fonts/Andale Mono.ttf",fontsize)

text = "Hello"
white = (255,255,255)
draw.text((10, 10), text, font=monospace, fill=white)

# Find bounding box
bbox = canvas.getbbox()

# Debug
print(bbox)

输出

(12, 17, 93, 36)

这意味着文本是 (93-12) = 81 像素宽和 (36-17) = 19 像素高。

在此处输入图像描述


推荐阅读