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

标签 python numpy cairo raster

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

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

理想情况下,我想输入 1 并返回一些 1 和 0 的集合,我可以将其放入 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 表示的可靠方法都可能是合适的。

最佳答案

运行上述代码后,您可以将呈现的字母转换为 numpy bool 数组,如下所示:

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()

关于python - 在python中获取文本字符串的位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915335/

相关文章:

c# - 如何在 Mono (Mono.Cairo/GTK#) 中访问 Linux 帧缓冲区?

python - TensorFlow:模块 '__main__' 没有属性 'main'

c++ - SWIG C++ Python : wrapping int by reference or pointer

python - 如何正确地将 mpmath 矩阵转换为 numpy ndarray(并将 mpmath.mpf 转换为 float )

python - 在 Python NumPy 中,维度和轴是什么?

c - 多线程、gtk3 和 cairo : drawing in a cairo surface

javascript - 使用 gtk3 在 Seed-3.2 javascript 中使用 cairo 进行绘图

python - 按值对字典进行排序

Python - pandas - 将系列追加到空白 DataFrame

python - 在某些位置切换元素的值