2014-02-20 27 views
3

我正在閱讀word-clouds上的本教程,它需要柵格化字符串的形狀。然後可以計算字形與numpy的交點。在Python中獲取文本字符串的位掩碼

本教程中的作者抱怨Python Image Library。更直接的方法,可能是使用pyCairo。但是,我無法找到與每個字形對應的位掩碼。

理想情況下,我想輸入並返回一些1和零的集合,我可以把它們放到numpy中。

0000011100000 
0000111100000 
0001111100000 
0000011100000 
0000011100000 
0000011100000 
0000011100000 
0000011100000 
1111111111111 
1111111111111 

這裏是我的嘗試與開羅,但我不能讓位掩碼出來開羅或畫,或其他任何東西:

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數字表示可能是合適的。

+0

相關:http://stackoverflow.com/questions/9632995/is-there-a-python-library-that-allows-to-easily-print-ascii-art-text – wflynny

+0

你可以開始調試這個通過使用surface write_to_png檢查輸出是你認爲的結果。 –

+0

[將字符串轉換爲Python中的二進制]可能的重複(http://stackoverflow.com/questions/18815820/convert-string-to-binary-in-python) – skrrgwasme

回答

0

運行你上面的代碼後,就可以呈現字母轉換爲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() 
+0

請注意,這需要對您的代碼進行一些編輯, (但還沒有通過審查):你沒有使用導入的cairo作爲'cr'(我用一個簡單的'import cairo'取代了它),字體太小了(我用200代替了它),在'move_to'你必須使用'WIDTH/2'和'HEIGHT/2'而不是0.5。 –

+0

所以實際上編輯已被拒絕,我應該剛剛添加更改作爲評論。 –