“点阵字体”是个啥?,在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 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/139508604
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、点阵字体?
点 阵 字 体 是 个 啥 ? 点阵字体是个啥? 点阵字体是个啥?点阵字体,说白了就是在一个设定块状区域
内,用点的序列“画
“出”字
”的样子。一般是在白色背景上用黑色的点“画”。
看到“点阵字体”这个概念,想方儿对它进行了一些了解。您如有兴趣,跟着我一起扒拉扒拉,看看我都晓得了些啥?
您请先瞅瞅我在python中模拟的时间打印——
代码运行效果截屏图片
这是用5×5
的*
字符定义了一个只有0123456789:
11 11 11个字符的简单“点阵字库”来玩儿一下的产物。
2、适用python的点阵字库
在Python中生成点阵字库,通常可以使用专门的库来将字符转换成点阵格式。以下是一些可以用于生成点阵字库的Python库:
python-font-to-dotmatrix
- 这是一个可以将字体转换为点阵格式的库,可以用于将字符转换为可以在点阵显示器上显示的格式。dotmap
- 这是一个可以将字符转换为点阵地图的库,可以用于生成字符的点阵表示。CharMapper
- 这是一个可以用于创建字符映射的库,可以将字符映射到点阵显示上。Pillow
(PIL Fork)- 虽然Pillow主要是图像处理库,但它可以用来处理图像上的文字,包括生成文字的点阵表示。python-bdf
- 这个库可以解析BDF(Bitmap Distribution Format)字体文件,这种文件格式包含了字体的点阵信息。fontTools
- 这个库提供了广泛的字体处理功能,包括操作TrueType、OpenType等字体格式,也可以用来提取字体的点阵信息。
在开发过程中,请确保遵守相关的开源协议和知识产权法律法规,尊重字体的版权和使用权限。如果需要商业用途或定制化的点阵字库,可能需要联系专业的字体设计公司或个人来获取授权和定制服务。
3、点阵字库应用场景
点阵字库具有广泛的实际应用场景,尤其是在嵌入式系统和硬件限制较大的场合。以下是一些常见的应用场景:
- 嵌入式显示:许多嵌入式设备,如单片机、微控制器驱动的设备、POS机、小型打印机、手持设备等,使用点阵字库来显示文本信息,因为它们通常不需要高分辨率的显示。
- 工业控制面板:在工业环境中,点阵字库常用于控制面板和显示屏,以显示状态信息、警报、实时数据等。
- 车载显示屏:汽车中的信息显示屏,如车载导航系统、电子仪表盘等,可能会使用点阵字库来显示信息。
- 电子看板和广告牌:在公共场所,如公交车站、地铁站、机场等地方,点阵字库可以用于显示时间、航班信息、广告等。
- 打印机:点阵打印机使用点阵字库来打印文本,尽管现在激光和喷墨打印机更为常见,但在一些特定的应用中,点阵打印机仍然在使用。
- 复古游戏和电子玩具:复古风格的电子游戏机和电子玩具可能会使用点阵字库来显示文本和图形。
- DIY项目:业余爱好者和DIY者可能会使用点阵字库在他们的项目中显示文本,如自制时钟、小型游戏机等。
- 通讯设备:一些老式的通讯设备,如传真机、电报机等,使用点阵字库来显示和打印文本信息。
- 专业仪器:在医疗、科研等专业领域,一些仪器可能会使用点阵字库来显示测量结果或状态信息。
- 艺术和设计:艺术家和设计师有时也会使用点阵字库来创造复古或独特的视觉效果。
4、点阵字库的使用
点阵字库在不同的编程语言环境中
使用方法一样吗?点阵字库的使用方法,在不同的编程语言环境中会有所不同,因为每种语言都有其独特的语法和库。不过,基本的思路是相似的,通常包括以下几个步骤:
- 选择或创建字库:首先,你需要有一个点阵字库,这可以是一个预先生成的字库文件,或者你可以使用特定的工具或库来创建一个。
- 加载字库:在程序中加载点阵字库,这通常涉及到读取字库文件或将字库数据集成到程序中。
- 映射字符:将需要显示的字符映射到点阵字库中的对应点阵数据。每个字符通常都有一个唯一的编码或索引。
- 显示或输出:将点阵数据输出到显示设备上,如点阵显示器、打印机或其他类型的输出设备。
- 字体渲染:在某些情况下,可能需要进行字体渲染,将点阵数据转换为可以显示的图形格式。
在不同的编程语言中,这些步骤可能会以不同的方式实现。以下是一些示例:
下面是常用语言的三个简单示例代码
:
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中应用点阵字库:
- 选择或获取点阵字库:
点阵字库通常是一些.h
文件,包含了字符的像素数据。你可以从网上找到一些开源的点阵字库,或者使用工具生成你自己的点阵字库。 - 选择合适的Python库:
有一些Python库支持点阵字库的使用,例如luma.led_matrix
、Pillow
等。这些库可以帮助你将点阵字库中的数据转换成可以在屏幕上显示的图像。 - 安装必要的库:
使用pip
安装你选择的库。例如,如果你选择了luma.led_matrix
,你可以使用以下命令安装:pip install luma.led_matrix
- 编写代码加载点阵字库:
在Python代码中,你可以定义函数来加载点阵字库文件,并将字库中的数据转换成Python可以理解的结构。 - 渲染字体:
使用选定的库,根据点阵字库中的数据渲染字体到屏幕或图像上。 - 显示或保存结果:
渲染完成后,你可以将结果显示在屏幕上,或者保存为图片文件。
下面是一个使用Pillow
库的简单例子,展示如何加载点阵字库并显示一个字符:
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库简介
Pillow
和luma.led_matrix
都是比较好用的Python库,Pillow
功能强大好用且大家都比较熟悉,在这里就简单介绍一下后者。luma.led_matrix
是一个轻量级且易用的Python 库,它提供了一个API来控制各种LED矩阵和类似显示设备。这个库是luma.lcd
项目的一部分,后者是一组用于控制LCD显示屏的Python库。
luma.led_matrix
支持多种硬件,包括但不限于:
- MAX7219或MAX7221控制的LED矩阵
- APA102 / DotStar RGB LED矩阵
- WS2812 / NeoPixel RGB LED矩阵
- PWM控制的单色LED矩阵
这个库的主要特点包括:
- 支持多种硬件设备
- 提供简单的API来绘制文本、形状和图像
- 支持多种字体,包括点阵字体
- 可以与
luma.core
库结合使用,后者提供了更高级的图形功能,如旋转、缩放和颜色处理
luma.led_matrix
库通常用于创建信息显示屏、广告牌、状态指示器等。它通过SPI或类似接口与LED矩阵板通信,允许用户在Python中轻松控制LED矩阵的显示内容。
安装luma.led_matrix
库通常很简单,可以使用pip:
pip install luma.led_matrix
使用luma.led_matrix
时,你需要根据你的硬件设备选择合适的显示驱动,并初始化一个显示实例。然后,你可以使用提供的绘图功能来显示文本、图像和其他图形元素。
以下是一个简单的例子,展示了如何使用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 模拟打印当前时间
代码运行效果截屏图片
- 点阵字库
0123456789:
,仅数字0-9
和冒号:
11个ASCII字符的简易点阵字库,每个字符是5×5的点阵
chars = [[" "," * "," "," * "," ",],["*****","* *","* *","* *","*****"],[" * "," ** "," * "," * "," *** "],["*****"," *","*****","* ","*****"],["*****"," *"," ****"," *","*****"],["* * ","* * ","*****"," * "," * "],["*****","* ","*****"," *","*****"],["*****","* ","*****","* *","*****"],[" ****"," *"," *"," *"," *"],["*****","* *","*****","* *","*****"],["*****","* *","*****"," *","*****"]
] # 11个字符图形列表charDict = dict(zip(':0123456789', 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循环的功能
6.2 代码解析
我这段儿代码,就是把当前系统时间,格式化成“HH:SS
”的形式,把其字符“置换
”成5×5
点阵字体,打印到Python“终端
”(控制台)。
难点在于,点阵字符串的打印,python终端是逐午打印的,而点阵字体却分布于5行
。我采用的是拼接 5 个 5个 5个“时间字符
”的每行*
来实现打印的。
- 下面是代码的逐行解析:
#!/usr/bin/env python
:这是一个shebang行,用于指定此脚本应该由哪个解释器执行。在这里,它指定使用环境变量python
指定的Python解释器。# coding: utf-8
:这是一个编码声明,用于指定源代码文件使用的字符编码是UTF-8
。from time import localtime
:导入time
模块中的localtime
函数,该函数用于获取当前系统的本地时间数据数组。chars
:这是一个列表,包含了数字0-9
和冒号:
字符的5x5
点阵表示。每个子列表代表一个字符的点阵图形。charDict = dict(zip(':0123456789', chars))
:创建一个字典,将字符(数字0-9
和冒号:
)映射到它们的点阵表示。t = localtime()[3:5]
:调用localtime
函数获取当前时间,然后从中提取小时和分钟(索引3和4
)。nowstr = f"{t[0]:0>2}:{t[1]:0>2}"
:将提取的小时和分钟格式化为一个字符串,例如“09:45
”。这里使用了格式化字符串语法,确保小时和分钟都是两位数,不足部分用0填充。nowArray = [charDict.get(i) for i in nowstr]
:遍历nowstr
中的每个字符,从charDict
中获取对应的点阵表示,并将它们存储在一个列表中。- 代码接下来使用两个循环来打印时间。外层循环遍历点阵的每一行(共5行),内层循环遍历当前时间的每个字符。它使用
join
方法和列表解析来构造并打印每一行的点阵字符。 - 注释掉的
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(':0123456789', 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
标题:让QQ群昵称色变的神奇代码
(浏览阅读 5.9w )
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:25 收藏:86 评论:17
摘要:让QQ昵称色变的神奇代码。
首发:2022-01-18 19:15:08
最后编辑:2022-01-20 07:56:47 -
002
标题:Python列表(list)反序(降序)的7种实现方式
(浏览阅读 1.1w )
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞: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 )
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:7 收藏:36
摘要:pandas 数据类型之 DataFrame_panda dataframe。
首发:2022-05-01 13:20:17
最后编辑:2022-05-08 08:46:13 -
004
标题:个人信息提取(字符串)
(浏览阅读 8.2k )
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:2 收藏:15
摘要:个人信息提取(字符串)_个人信息提取python。
首发:2022-04-18 11:07:12
最后编辑:2022-04-20 13:17:54 -
005
标题:Python字符串居中显示
(浏览阅读 7.6k )
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
评论:1 -
006
标题:罗马数字转换器|罗马数字生成器
(浏览阅读 7.5k )
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
摘要:罗马数字转换器|生成器。
首发:2022-01-19 23:26:42
最后编辑:2022-01-21 18:37:46 -
007
标题:回车符、换行符和回车换行符
(浏览阅读 6.0k )
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:2 收藏:3
摘要:回车符、换行符和回车换行符_命令行回车符。
首发:2022-02-24 13:10:02
最后编辑:2022-02-25 20:07:40
截屏图片
(此文涉及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规范(说明文档的规范写法)