【问题标题】:Generate pixel matrices from characters in string [duplicate]从字符串中的字符生成像素矩阵[重复]
【发布时间】:2016-04-03 10:33:10
【问题描述】:

我正在编写一个库,该库将在连接到 Raspberry Pi 的 LED 矩阵上打印滚动文本。

我想要一个函数,它接受一个字符、高度和宽度,并生成一个矩阵,其中包含应设置的像素以表示指定的字符。

例如

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|

我可以尝试为 [A-Z] 定义其中的每一个,但我想知道是否有一个库已经做了这种事情?

【问题讨论】:

    标签: python string python-3.x matrix graphics


    【解决方案1】:

    使用 PIL,this might be a solution。然而,一个困难是 您无法直接控制数组的宽度和高度。反而 你控制字体和字体大小。如果您的预期用途是针对特定 LED矩阵,那么这可能没问题 - 只要找到正确的字体和字体大小 用于您的 LED 矩阵。

    下面我修改了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)
    #####
    # ###
      ## 
     ##  
     ##  
    ##  #
    #####
    

    我在字符上方包含了数组的形状,以便您查看是否 它们适合 LED 矩阵。

    【讨论】:

      【解决方案2】:

      如果您使用的是 MAX7219,我想这可能会有所帮助:https://github.com/rm-hull/max7219 至少你可以得到一个想法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        相关资源
        最近更新 更多