3.1 KiB
3.1 KiB
各工具的区别与用途
-
font2bitmap.py
- 用途:将TrueType字体转换为等宽(或比例)位图字体模块
- 输入:TrueType字体文件(.ttf/.otf)
- 输出:Python字体模块(如proverbs_font.py)
- 特点:
- 支持比例字体(字符宽度可变)
- 支持CJK字符和Unicode
- 生成4个数据结构:MAP、_WIDTHS、_OFFSETS、_BITMAPS
- 使用方式:
display.write(font_module, "Hello", x, y, color)
-
monofont2bitmap.py
- 用途:将等宽TrueType字体转换为位图字体模块
- 输入:TrueType字体文件(.ttf/.otf)
- 输出:Python字体模块(如inconsolata_32.py)
- 特点:
- 固定宽度字符
- 简单数据结构:HEIGHT、WIDTH、_BITMAP
- 支持多色字体
- 使用方式:
display.bitmap(font_module, x, y, char_index)
-
font_from_romfont.py
- 用途:将ROM字体二进制文件转换为Python模块
- 输入:老旧计算机/游戏机的ROM字体数据
- 输出:Python字体模块
- 特点:
- 保留复古计算机字体风格
- 通常8x8固定大小
- 使用方式:
display.bitmap(font_module, x, y, char_index)
-
imgtobitmap.py
- 用途:将图像文件转换为位图模块
- 输入:图像文件(PNG、JPG等)
- 输出:Python图像模块
- 特点:
- 支持任何图像到位图的转换
- 支持1-8位/像素的颜色深度
- 生成调色板
- 使用方式:
display.bitmap(image_module, x, y, 0)
哪个可以转成流式格式?
所有这些工具的输出都可以转换为流式格式!
我创建了相应的转换工具:
- font2bin.py:将font2bitmap.py生成的字体模块转换为二进制流式格式
- image2bin.py:将imgtobitmap.py生成的图像模块转换为二进制流式格式
原理相同:
- Python模块在导入时加载全部数据到RAM
- 二进制文件可以按需读取,只加载需要的数据
- 针对ESP8266等内存受限设备特别有效
流式格式的优势
-
font2bitmap.py → 流式格式:
- 节省93%内存(6.4KB → ~400字节)
- 适合大型字体,特别是包含CJK字符的字体
- 保持与原有
st7789.write()接口的兼容性
-
imgtobitmap.py → 流式格式:
- 适合大型图像或动画
- 支持动态帧加载(StreamingAnimation类)
- 可以存储在文件系统而不是RAM中
-
monofont2bitmap.py → 流式格式:
- 简单结构使流式加载更容易
- 虽然已经很紧凑,但在极小内存环境中仍有价值
-
font_from_romfont.py → 流式格式:
- 超简单结构,流式实现非常直接
- 对于大批量老旧字体集合有意义
实际应用建议
对于ESP8266等内存受限设备:
- 使用
font2bin.py将大型字体转换为流式格式 - 使用
image2bin.py将大型图像或动画帧转换为流式格式 - 使用
streaming_font.py和streaming_image.py加载和显示 - 这样可以在保持功能的同时,最大限度地减少内存使用
这种流式方式使得ESP8266等设备可以显示大型字体和图像,而不会因内存不足而失效。