Python中的“点阵字体”

Python中的“点阵字体”点阵字体 是个啥 在 python 中怎么使 在现在全面高清的 5G 时代 它还有用 武 之地 笔记模板由 python 脚本于 2024 年 06 月 01 日 18 44 31 创建 本篇笔记适合会基本编程的 co

大家好,欢迎来到IT知识分享网。

“点阵字体”是个啥?,在python中怎么使?在现在全面高清的 5 G 5G 5G时代,它还有用“武”之地?


(笔记模板由python脚本于2024年06月01日 18:44:31创建,本篇笔记适合会基本编程的coder翻阅)



【学习的细节是欢悦的历程】


  • Python 官网:https://www.python.org/
  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/

  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室






“点阵字体”是个啥?


点 阵 字 体


(在python中怎么使?)



本文质量分:


96 96 96


本文地址: Python中的“点阵字体”

CSDN质量分查询入口:http://www.csdn.net/qc



目 录

  • ◆ Python中的“点阵字体”
    • 1、点阵字体?
    • 2、适用python的点阵字库
    • 3、点阵字库应用场景
    • 4、点阵字库的使用
    • 5、在Python中应用点阵字库
      • 5.1 怎样通过python应用点阵字库?
      • 5.2 luma.led_matrix库简介
    • 6、在python中模拟“点阵”打印
      • 6.1 模拟打印当前时间
      • 6.2 代码解析
    • 7、完整源码(Python)


◆ Python中的“点阵字体”

1、点阵字体?

   点 阵 字 体 是 个 啥 ? 点阵字体是个啥? 点阵字体,说白了就是在一个设定块状区域内,用点的序列““出””的样子。一般是在白色背景上用黑色的点“画”。

  看到“点阵字体”这个概念,想方儿对它进行了一些了解。您如有兴趣,跟着我一起扒拉扒拉,看看我都晓得了些啥?

  • 代码运行效果截屏图片
    在这里插入图片描述
      这是用5×5*字符定义了一个只有0123456789: 11 11 11个字符的简单“点阵字库”来玩儿一下的产物。



回页目录


2、适用python的点阵字库

  1. python-font-to-dotmatrix – 这是一个可以将字体转换为点阵格式的库,可以用于将字符转换为可以在点阵显示器上显示的格式。
  2. dotmap – 这是一个可以将字符转换为点阵地图的库,可以用于生成字符的点阵表示。
  3. CharMapper – 这是一个可以用于创建字符映射的库,可以将字符映射到点阵显示上。
  4. Pillow(PIL Fork)- 虽然Pillow主要是图像处理库,但它可以用来处理图像上的文字,包括生成文字的点阵表示。
  5. python-bdf – 这个库可以解析BDF(Bitmap Distribution Format)字体文件,这种文件格式包含了字体的点阵信息。
  6. fontTools – 这个库提供了广泛的字体处理功能,包括操作TrueType、OpenType等字体格式,也可以用来提取字体的点阵信息。

  在使用这些库时,通常需要结合具体的硬件规格,如点阵显示器的分辨率和像素排列方式,来生成适用于特定设备的点阵字库。这些库可能需要结合其他图形处理库或硬件控制库来在点阵显示器上显示文字。

  在开发过程中,请确保遵守相关的开源协议和知识产权法律法规,尊重字体的版权和使用权限。如果需要商业用途或定制化的点阵字库,可能需要联系专业的字体设计公司或个人来获取授权和定制服务。



回页目录


3、点阵字库应用场景

  1. 嵌入式显示:许多嵌入式设备,如单片机、微控制器驱动的设备、POS机、小型打印机、手持设备等,使用点阵字库来显示文本信息,因为它们通常不需要高分辨率的显示。
  2. 工业控制面板:在工业环境中,点阵字库常用于控制面板和显示屏,以显示状态信息、警报、实时数据等。
  3. 车载显示屏:汽车中的信息显示屏,如车载导航系统、电子仪表盘等,可能会使用点阵字库来显示信息。
  4. 电子看板和广告牌:在公共场所,如公交车站、地铁站、机场等地方,点阵字库可以用于显示时间、航班信息、广告等。
  5. 打印机:点阵打印机使用点阵字库来打印文本,尽管现在激光和喷墨打印机更为常见,但在一些特定的应用中,点阵打印机仍然在使用。
  6. 复古游戏和电子玩具:复古风格的电子游戏机和电子玩具可能会使用点阵字库来显示文本和图形。
  7. DIY项目:业余爱好者和DIY者可能会使用点阵字库在他们的项目中显示文本,如自制时钟、小型游戏机等。
  8. 通讯设备:一些老式的通讯设备,如传真机、电报机等,使用点阵字库来显示和打印文本信息。
  9. 专业仪器:在医疗、科研等专业领域,一些仪器可能会使用点阵字库来显示测量结果或状态信息。
  10. 艺术和设计:艺术家和设计师有时也会使用点阵字库来创造复古或独特的视觉效果。

  点阵字库的优势在于它们的简单性和低资源需求,这使得它们非常适合在资源受限的环境中工作。随着技术的发展,虽然高分辨率的显示技术越来越普及,但点阵字库仍然在许多应用中占有一席之地。



回页目录


4、点阵字库的使用

  1. 选择或创建字库:首先,你需要有一个点阵字库,这可以是一个预先生成的字库文件,或者你可以使用特定的工具或库来创建一个。
  2. 加载字库:在程序中加载点阵字库,这通常涉及到读取字库文件或将字库数据集成到程序中。
  3. 映射字符:将需要显示的字符映射到点阵字库中的对应点阵数据。每个字符通常都有一个唯一的编码或索引。
  4. 显示或输出:将点阵数据输出到显示设备上,如点阵显示器、打印机或其他类型的输出设备。
  5. 字体渲染:在某些情况下,可能需要进行字体渲染,将点阵数据转换为可以显示的图形格式。
    在不同的编程语言中,这些步骤可能会以不同的方式实现。以下是一些示例:

下面是常用语言的三个简单示例代码

P y t h o n Python Python

# 假设使用一个预定义的点阵字库 from dotmatrix import DotMatrixFont # 加载字库 font = DotMatrixFont('path/to/font') # 获取字符点阵数据 character_bitmap = font.get_char_bitmap('A') # 输出点阵数据到显示器 display.show_bitmap(character_bitmap) 

C / C + + C/C++ C/C++

// 假设有一个点阵字库数组 const uint8_t font_data[] = { 
                             /* 点阵字库数据 */}; // 获取字符点阵数据 uint8_t char_bitmap[8]; // 假设每个字符是8x8的点阵 memcpy(char_bitmap, font_data + ('A' * 8), 8); // 在显示设备上显示字符 display_draw_bitmap(char_bitmap, x, y); 

J a v a S c r i p t JavaScript JavaScript(用于Web)

// 假设有一个点阵字库对象 const font = { 
                              /* 点阵字库对象 */}; // 获取字符点阵数据 const characterBitmap = font['A']; // 在Canvas上绘制字符 const ctx = document.getElementById('canvas').getContext('2d'); ctx.drawImage(characterBitmap, x, y); 

  在实际应用中,你需要根据所使用的编程语言和具体的库或框架来调整代码。不同的库可能会提供不同的函数和对象来操作点阵字库。因此,了解你所使用的语言和库的文档是至关重要的。



回页目录


5、在Python中应用点阵字库

5.1 怎样通过python应用点阵字库?

  在Python中应用点阵字库,通常是指使用特定的库来渲染点阵字体,这种字体由像素点组成,常用于嵌入式设备或需要小尺寸字体的场合。以下是一个基本的步骤指南,展示如何在Python中应用点阵字库:

  1. 选择或获取点阵字库
    点阵字库通常是一些*.h文件,包含了字符的像素数据。你可以从网上找到一些开源的点阵字库,或者使用工具生成你自己的点阵字库。
  2. 选择合适的Python库
    有一些Python库支持点阵字库的使用,例如luma.led_matrixPillow等。这些库可以帮助你将点阵字库中的数据转换成可以在屏幕上显示的图像。
  3. 安装必要的库
    使用pip安装你选择的库。例如,如果你选择了luma.led_matrix,你可以使用以下命令安装:
    pip install luma.led_matrix 


  4. 编写代码加载点阵字库
    在Python代码中,你可以定义函数来加载点阵字库文件,并将字库中的数据转换成Python可以理解的结构。
  5. 渲染字体
    使用选定的库,根据点阵字库中的数据渲染字体到屏幕或图像上。
  6. 显示或保存结果
    渲染完成后,你可以将结果显示在屏幕上,或者保存为图片文件。
from PIL import Image, ImageDraw # 假设你有一个点阵字库,每个字符是一个8x8像素的矩阵 # 定义一个字符的点阵数据 dot_matrix_char = [ [0, 1, 1, 0, 1, 1, 0, 0], [1, 0, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 1, 0], [0, 1, 1, 0, 1, 1, 0, 0] ] # 创建一个8x8的黑色图像 img = Image.new('1', (8, 8), 0) # 使用ImageDraw来绘制点阵字符 d = ImageDraw.Draw(img) for y, row in enumerate(dot_matrix_char): for x, value in enumerate(row): if value == 1: d.point((x, y), fill=1) # 显示图像 img.show() 

  这个例子只是展示了如何在Python中处理点阵数据的基本方法。实际应用中,你可能需要读取*.h文件中的数据,或者处理更复杂的字体和格式。



回页目录


5.2 luma.led_matrix库简介

  Pillowluma.led_matrix都是比较好用的Python库,Pillow功能强大好用且大家都比较熟悉,在这里就简单介绍一下后者。luma.led_matrix是一个轻量级且易用的Python 库,它提供了一个API来控制各种LED矩阵和类似显示设备。这个库是luma.lcd项目的一部分,后者是一组用于控制LCD显示屏的Python库。

  • MAX7219或MAX7221控制的LED矩阵
  • APA102 / DotStar RGB LED矩阵
  • WS2812 / NeoPixel RGB LED矩阵
  • PWM控制的单色LED矩阵
  • 支持多种硬件设备
  • 提供简单的API来绘制文本、形状和图像
  • 支持多种字体,包括点阵字体
  • 可以与luma.core库结合使用,后者提供了更高级的图形功能,如旋转、缩放和颜色处理
pip install luma.led_matrix 
from luma.led_matrix.device import max7219 from luma.core.interface.serial import spi, noop from luma.core.render import canvas from luma.core.legacy import text # 初始化SPI接口 serial = spi(port=0, device=0, gpio=noop()) # 创建一个MAX7219控制的LED矩阵设备实例 device = max7219(serial, width=32, height=8) # 使用canvas来绘制内容 with canvas(device) as draw: text(draw, (0, 0), "Hello World", fill="white") # 保持程序运行,以便LED矩阵可以继续显示内容 try: while True: pass except KeyboardInterrupt: pass 

  这个例子假设你有一个连接到SPI接口的MAX7219控制的LED矩阵。它会显示文本 “Hello World”。注意,实际使用时你可能需要根据你的硬件配置调整SPI端口和设备参数。



回页目录


6、在python中模拟“点阵”打印

6.1 模拟打印当前时间

  • 代码运行效果截屏图片
    在这里插入图片描述

  • 点阵字库0:,仅数字0-9和冒号:11个ASCII字符的简易点阵字库,每个字符是5×5的点阵
 chars = [ [ " ", " * ", " ", " * ", " ", ], [ "*", "* *", "* *", "* *", "*" ], [ " * ", " ", " * ", " * ", " * " ], [ "*", " *", "*", "* ", "*" ], [ "*", " *", " ", " *", "*" ], [ "* * ", "* * ", "*", " * ", " * " ], [ "*", "* ", "*", " *", "*" ], [ "*", "* ", "*", "* *", "*" ], [ " ", " *", " *", " *", " *" ], [ "*", "* *", "*", "* *", "*" ], [ "*", "* *", "*", " *", "*" ] ] # 11个字符图形列表 charDict = dict(zip(':0', chars)) # 利用dict和zip函数,生成字符映射字典——简易“点阵字库” 

  自己“”了一个简易点阵字符列表,利用dict和zip函数,将列表生成字符映射字典——简易“点阵字库”。

Python代码

 t = localtime()[3:5] # 截取当前系统时、分数据 nowstr = f"{ 
                                                t[0]:0>2}:{ 
                                                t[1]:0>2}" # 字符串格式化当前时间 #input(nowstr)  nowArray = [charDict.get(i) for i in nowstr] #input(nowArray) print() for i in range(5): print(f"{ 
                                                '':>5}{ 
                                                ' '.join([nowArray[j][i] for j in range(5)])}") print() #lines = '\n'.join([f"{'':>5}{' '.join([nowArray[j][i] for j in range(5)])}" for i in range(5)]) # 列表解析每行字符数据并用“\n”拼接 #print(f"\n{lines}\n") 
  • 被注释掉的两行代码,也可以同样地完成for循环的功能,它的样子更 P y t h o n Python Python
    在这里插入图片描述


回页目录


6.2 代码解析

  • 下面是代码的逐行解析:
  1. #!/usr/bin/env python:这是一个shebang行,用于指定此脚本应该由哪个解释器执行。在这里,它指定使用环境变量python指定的Python解释器。
  2. # coding: utf-8:这是一个编码声明,用于指定源代码文件使用的字符编码是UTF-8
  3. from time import localtime:导入time模块中的localtime函数,该函数用于获取当前系统的本地时间数据数组。
  4. chars:这是一个列表,包含了数字0-9和冒号:字符的5x5点阵表示。每个子列表代表一个字符的点阵图形。
  5. charDict = dict(zip(':0', chars)):创建一个字典,将字符(数字0-9和冒号:)映射到它们的点阵表示。
  6. t = localtime()[3:5]:调用localtime函数获取当前时间,然后从中提取小时和分钟(索引3和4)。
  7. nowstr = f"{t[0]:0>2}:{t[1]:0>2}":将提取的小时和分钟格式化为一个字符串,例如“09:45”。这里使用了格式化字符串语法,确保小时和分钟都是两位数,不足部分用0填充。
  8. nowArray = [charDict.get(i) for i in nowstr]:遍历nowstr中的每个字符,从charDict中获取对应的点阵表示,并将它们存储在一个列表中。
  9. 代码接下来使用两个循环来打印时间。外层循环遍历点阵的每一行(共5行),内层循环遍历当前时间的每个字符。它使用join方法和列表解析来构造并打印每一行的点阵字符。
  10. 注释掉的lines变量和print语句是另一种打印方式,它首先构造一个包含所有行的字符串,然后一次性打印出来。这种方式更为Python,且比for更为简洁高效,但对初入坑Python的code person不太“友好”。

  总的来说,这段儿代码将当前时间以点阵的形式显示在控制台上,每个数字和冒号都是由星号(*)组成的5x5的点阵图形。

单行Python打印代码

 lines = '\n'.join([f"{ 
                                                     '':>5}{ 
                                                     ' '.join([nowArray[j][i] for j in range(5)])}" for i in range(5)]) # 列表解析每行字符数据并用“\n”拼接 print(f"\n{ 
                                                     lines}\n") 


回页目录


7、完整源码(Python)

(源码较长,点此跳过源码)

#!/sur/bin/nve python  coding: utf-8  from time import localtime chars = [ [ " ", " * ", " ", " * ", " ", ], [ "*", "* *", "* *", "* *", "*" ], [ " * ", " ", " * ", " * ", " * " ], [ "*", " *", "*", "* ", "*" ], [ "*", " *", " ", " *", "*" ], [ "* * ", "* * ", "*", " * ", " * " ], [ "*", "* ", "*", " *", "*" ], [ "*", "* ", "*", "* *", "*" ], [ " ", " *", " *", " *", " *" ], [ "*", "* *", "*", "* *", "*" ], [ "*", "* *", "*", " *", "*" ] ] # 5×5的点阵字符列表 charDict = dict(zip(':0', chars)) # 生成字符映射字典 t = localtime()[3:5] # 截取当前系统时、分数据 nowstr = f"{ 
                                                        t[0]:0>2}:{ 
                                                        t[1]:0>2}" # 字符串格式化当前时间 #input(nowstr)  nowArray = [charDict.get(i) for i in nowstr] #input(nowArray) print() for i in range(5): print(f"{ 
                                                        '':>5}{ 
                                                        ' '.join([nowArray[j][i] for j in range(5)])}") print() #lines = '\n'.join([f"{'':>5}{' '.join([nowArray[j][i] for j in range(5)])}" for i in range(5)]) # 列表解析每行字符数据并用“\n”拼接 #print(f"\n{lines}\n") 


回页首


上一篇:  对AI的提问技艺(人工智能大行其道,如何借势?始于问询。要得要得预期,精于“提问技巧”)
下一篇: 


我的HOT博:

  本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有 7 7 7篇。




  • 001
    标题:让昵称色变的神奇代码
    (浏览阅读 5.9w )
    地址:Python中的“点阵字体”
    点赞:25 收藏:86 评论:17
    摘要:让昵称色变的神奇代码。
    首发:2022-01-18 19:15:08
    最后编辑:2022-01-20 07:56:47






  • 002
    标题:Python列表(list)反序(降序)的7种实现方式
    (浏览阅读 1.1w )
    地址:Python中的“点阵字体”
    点赞:8 收藏:35 评论:8
    摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
    首发:2022-12-11 23:54:15
    最后编辑:2023-03-20 18:13:55






  • 003
    标题:pandas 数据类型之 DataFrame
    (浏览阅读 9.7k )
    地址:Python中的“点阵字体”
    点赞:7 收藏:36 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    首发:2022-05-01 13:20:17
    最后编辑:2022-05-08 08:46:13






  • 004
    标题:个人信息提取(字符串)
    (浏览阅读 8.2k )
    地址:Python中的“点阵字体”
    点赞:2 收藏:15 
    摘要:个人信息提取(字符串)_个人信息提取python。
    首发:2022-04-18 11:07:12
    最后编辑:2022-04-20 13:17:54






  • 005
    标题:Python字符串居中显示
    (浏览阅读 7.6k )
    地址:Python中的“点阵字体”
    评论:1



  • 006
    标题:罗马数字转换器|罗马数字生成器
    (浏览阅读 7.5k )
    地址:Python中的“点阵字体”
    摘要:罗马数字转换器|生成器。
    首发:2022-01-19 23:26:42
    最后编辑:2022-01-21 18:37:46





  • 007
    标题:回车符、换行符和回车换行符
    (浏览阅读 6.0k )
    地址:Python中的“点阵字体”
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    首发:2022-02-24 13:10:02
    最后编辑:2022-02-25 20:07:40








推荐条件
阅读量突破6.00k


(更多热博,请点击蓝色文字跳转翻阅)


  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首



老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python’
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)







































免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137589.html

(0)
上一篇 2025-06-19 16:00
下一篇 2025-06-19 16:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信