【问题标题】:getting the bitmask of a text string in python在python中获取文本字符串的位掩码
【发布时间】:2014-02-20 17:33:28
【问题描述】:

我正在阅读word-clouds 上的本教程,它需要光栅化字符串的形状。然后可以计算字形与numpy 的交集。

教程中的作者抱怨Python Image Library。更直接的方法,可能是使用pyCairo。但是,我无法找到每个字形对应的位掩码。

理想情况下,我想输入 1 并返回一些 1 和零的集合,我可以将其放入 numpy。

0000011100000
0000111100000
0001111100000
0000011100000
0000011100000
0000011100000
0000011100000
0000011100000
1111111111111
1111111111111

这是我对 Cairo 的尝试,但我无法从 Cairo 中取出位掩码或绘制它或其他任何东西:

import cairo as cr
WIDTH, HEIGHT = 256, 256

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context (surface)

ctx.set_source_rgb(0.0, 0.0, 0.0)
ctx.select_font_face("Georgia", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
ctx.set_font_size(1.2)
x_bearing, y_bearing, width, height = ctx.text_extents("a")[:4]
ctx.move_to(0.5 - width / 2 - x_bearing, 0.5 - height / 2 - y_bearing)
ctx.show_text("a")

事实上,获取数字的 ascii 表示的任何可靠方法都可能是合适的。

【问题讨论】:

标签: python numpy cairo raster


【解决方案1】:

运行上述代码后,您可以将渲染的字母转换为 numpy 布尔数组,如下所示:

import numpy as np
ar = np.frombuffer(surface.get_data(), dtype=np.int32)
bitmask = (ar.reshape(WIDTH, HEIGHT) != 0)

您可以通过使用 matplotlib 显示结果数组来验证它是否有效:

import matplotlib.pyplot as plt
plt.imshow(bitmask)
plt.show()

【讨论】:

  • 请注意,这需要对我所做的代码进行一些编辑(但尚未通过审核):您没有将导入的 cairo 用作 cr(我将其替换为简单的import cairo),字体太小了(我用200代替了),在move_to中你必须使用WIDTH/2HEIGHT/2而不是0.5。
  • 所以实际上编辑已被拒绝,我应该只是将更改添加为评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2013-08-29
  • 2013-03-19
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多