2016-04-03 4 views
0

Я в процессе написания библиотеки, которая будет печатать прокручиваемый текст через светодиодную матрицу, подключенную к малине Pi.Создание матриц пикселей из символов в строке

Мне нужна функция, которая принимает символ, высоту и ширину и создает матрицу с пикселями, которые должны быть установлены для представления указанного символа.

например.

def char_to_pixels(char, height, width): 
    matrix = [width][height] 

    # determine which pixels to set based on character supplied 
    ... 

    return matrix 

Таким образом, для вызова 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| 

Я мог бы попытаться определить каждый из них для [AZ], но я задавался вопросом, есть ли библиотека из что это уже делало?

ответ

3

Использование PIL, this might be a solution. Одна из трудностей состоит в том, что вы не можете напрямую контролировать ширину и высоту массива. Вместо вы управляете шрифтом и шрифтом. Если ваше предполагаемое использование предназначено для конкретной светодиодной матрицы , то это может быть в порядке - просто найдите нужный шрифт и укажите размер для вашей светодиодной матрицы.

Ниже я изменил jsheperd's answer , так 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://stackoverflow.com/a/27753869/190597 (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) 
##### 
# ### 
    ## 
## 
## 
## # 
##### 

Я включил форму выше символов массивов, так что вы можете увидеть, если они будут соответствовать на светодиодном матрице.

+0

Большое спасибо unutbu! – Alex

1

Я предполагаю, что это может помочь, если вы используете MAX7219: https://github.com/rm-hull/max7219 По крайней мере, вы можете получить Ideia

Смежные вопросы