在python中获取文本字符串的位掩码

在python中获取文本字符串的位掩码,python,numpy,cairo,raster,Python,Numpy,Cairo,Raster,我正在阅读本教程,它需要光栅化字符串的形状。然后我们就可以计算出单词形状和形状的交点 教程中的作者抱怨。更直接的方法可能是使用。但是,我无法找到对应于每个glyph的位掩码 理想情况下,我希望输入1,并返回一些1和0的集合,这些集合可以放入numpy中 0000011100000 0000111100000 0001111100000 0000011100000 0000011100000 0000011100000 0000011100000 0000011100000 11111111111

我正在阅读本教程,它需要光栅化字符串的形状。然后我们就可以计算出单词形状和形状的交点

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

理想情况下,我希望输入1,并返回一些1和0的集合,这些集合可以放入numpy中

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

将cairo作为cr导入
宽度,高度=256256
surface=cairo.ImageSurface(cairo.FORMAT_ARGB32,宽度,高度)
ctx=cairo.Context(表面)
ctx.set\u source\u rgb(0.0,0.0,0.0)
ctx.选择字体字体(“格鲁吉亚”,cairo.font\u斜面,cairo.font\u正常,cairo.font\u粗体)
ctx.设置字体大小(1.2)
x_方位,y_方位,宽度,高度=ctx.text_范围(“a”)[:4]
ctx.移动到(0.5-宽度/2-x\U轴承,0.5-高度/2-y\U轴承)
ctx.显示文本(“a”)


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

运行上述代码后,您可以将呈现的字母转换为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()

相关:您可以通过使用surface write_to_png来检查输出是否符合您的想法来开始调试。请注意,这需要对我所做的代码进行一些编辑(但尚未通过审查):您没有使用导入的cairo作为
cr
(我将其替换为简单的
导入cairo
),字体太小(我将其替换为200),在移动到的
中,您必须使用
宽度/2
高度/2
,而不是0.5。因此,事实上编辑被拒绝,我应该添加更改作为注释。