python - 如何获取在图片上绘制的 Image.Draw 文本的宽度和高度?
问题描述
在此处输入图像描述已经有几个问题,听起来与 stackoverflow 上的这个问题非常相似,但它们的重点与我想知道的有点不同。
我使用 Python 图像库中的 ImageDraw 在图像上粘贴了文本。我现在的问题是:有没有办法找出整个文本的宽度和高度?对我自己来说,想象文本有一种矩形框架。我想得到这个文本字段的测量值。我的 text1 可以像图像一样对待吗?我可以通过输入“width, height = text1.size”之类的内容来获取它的大小吗?
我已经尝试通过使用 ImageDraw.getwidth 命令来获取宽度,正如其他问题中所建议的那样,但遗憾的是这些解决方案对我不起作用。
我特别想要实现的是能够计算下一个文本字段可以放置在哪里而不覆盖当前文本。
提前感谢您的支持!
在附图中,您可以看到两个 ImageDraw 绘制的文本,分别名为“text”和“xyz”。我希望 xyz 适合“测试”,即使“测试”会包含更多字母。因此我需要知道“测试”的宽度。
解决方案
您可以在单独的画布(黑色背景)上用相同大小的相同字体以白色书写相同的文本,然后得到修剪后的“边界框”,如下所示:
#!/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 像素高。
推荐阅读
- javascript - 从反应输入表单获取数据时遇到问题
- jquery - 在为 React 项目工作一段时间后,我收到所有“npm install”命令的以下错误
- asp.net-mvc - 如何在 StartUp.Auth.cs 中使用 Autofac 进行依赖注入
- javascript - 关闭选项卡时如何发出socketIO事件
- python - 在中心设置 ttk Notebook 选项卡 [Python]
- haskell - Haskell返回十六进制值的列表
- php - 在laravel中带有文件上传循环的数组插入数据库
- python - 如何修复 docplex 错误?它在 CPLEX 中运行良好
- java - 如何在java中读取MongoDB数组
- sql - Oracle SQL:在 1905 年 6 月 1 日之前的时区无法正确转换时间戳