【问题标题】:How can I get the width and height of a text that was Image.Draw-drawn on a picture?如何获取在图片上绘制的 Image.Draw 文本的宽度和高度?
【发布时间】:2020-05-09 20:04:32
【问题描述】:

enter image description here已经有几个问题了,听起来和stackoverflow上的这个很相似,但是他们的关注点和我想知道的有点不同。

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

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

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

提前感谢您的支持!

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

【问题讨论】:

  • 你的图片是一个 numpy 数组,你可以对它进行切片,直到你得到 pasted text 并且它的形状是 widthheight
  • 谢谢,这听起来不错,但对于 python 新手来说也有点复杂^^。这到底是怎么做到的?我不必将它转换为 NumPy 数组并使用几个命令来获取宽度吗?难道没有更简单的解决方案吗?
  • 显示示例图像,我将发布代码
  • 我添加了图片链接和描述的一些细节。

标签: python python-3.x macos python-imaging-library


【解决方案1】:

使用 opencv 或 matplotlib 读取图像

img = cv2.cvtColor(cv2.imread('/home/ksooklall/q0MXd.jpg'), cv2.COLOR_BGR2RGB)

查找图片位置

text1 = img[950:, 50:250]

print(text1.shape)
(50, 200, 3)

【讨论】:

    【解决方案2】:

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

    #!/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 像素高。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2011-09-25
      • 2017-03-19
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多