使用 PIL,
这可能是一个解决方案。然而有一个困难,那就是你不能直接控制数组的宽度和高度。相反,你需要控制字体和字号。如果你的预期使用是针对特定的LED矩阵,则可能没问题--只需找到合适的字体和字号即可。
下面我修改了jsheperd的答案,使char_to_pixels
返回二进制NumPy数组。函数display
将二进制数组转换为字符数组,以使结果更易于查看。
from __future__ import print_function
import string
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
def char_to_pixels(text, path='arialbd.ttf', fontsize=14):
"""
Based on https://dev59.com/M2kw5IYBdhLWcg3wzdzZ#27753869 (jsheperd)
"""
font = ImageFont.truetype(path, fontsize)
w, h = font.getsize(text)
h *= 2
image = Image.new('L', (w, h), 1)
draw = ImageDraw.Draw(image)
draw.text((0, 0), text, font=font)
arr = np.asarray(image)
arr = np.where(arr, 0, 1)
arr = arr[(arr != 0).any(axis=1)]
return arr
def display(arr):
result = np.where(arr, '#', ' ')
print('\n'.join([''.join(row) for row in result]))
for c in string.uppercase:
arr = char_to_pixels(
c,
path='/usr/share/fonts/truetype/liberation/LiberationSerif-Bold.ttf',
fontsize=9)
print(arr.shape)
display(arr)
print()
产量
(7, 7)
(7, 7)
(7, 7)
(7, 7)
(7, 6)
(7, 5)
(7, 8)
(7, 7)
(7, 4)
(7, 5)
(7, 7)
(7, 6)
(7, 8)
(7, 7)
(7, 7)
(7, 5)
(9, 8)
(7, 7)
(7, 5)
(7, 6)
(7, 7)
(7, 6)
(7, 9)
(7, 6)
(7, 6)
(7, 5)
我已经在字符上方包含了数组的形状,以便您可以看到它们是否适合LED矩阵。