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