Ale*_*lex 3 python string graphics matrix python-3.x
我正在编写一个库,该库将在连接到 Raspberry Pi 的 LED 矩阵上打印滚动文本。
我想要一个函数,它接受一个字符、高度和宽度并生成一个矩阵,其中包含应该设置的像素以表示指定的字符。
例如
def char_to_pixels(char, height, width):
matrix = [width][height]
# determine which pixels to set based on character supplied
...
return matrix
Run Code Online (Sandbox Code Playgroud)
因此,对于char_to_pixels('I', 6, 6)您的呼叫,您可能需要一个如下所示的矩阵:
|0|1|1|1|1|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|1|1|1|1|0|
Run Code Online (Sandbox Code Playgroud)
我可以尝试为 [AZ] 定义每一个,但我想知道是否有一个图书馆已经做了这种事情?
使用 PIL,这可能是一个解决方案。然而,一个困难是您无法直接控制数组的宽度和高度。相反,您可以控制字体和字体大小。如果您的预期用途是用于特定的 LED 矩阵,那么这可能没问题——只需为您的 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 /sf/answers/1942770861/ (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()
Run Code Online (Sandbox Code Playgroud)
产量
(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)
#####
# ###
##
##
##
## #
#####
Run Code Online (Sandbox Code Playgroud)
我在字符上方包含了阵列的形状,以便您可以查看它们是否适合 LED 矩阵。