Files
ws2/docs/streaming.md
2026-01-25 15:14:15 +08:00

3.1 KiB
Raw Permalink Blame History

各工具的区别与用途

  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.pystreaming_image.py加载和显示
  4. 这样可以在保持功能的同时,最大限度地减少内存使用

这种流式方式使得ESP8266等设备可以显示大型字体和图像而不会因内存不足而失效。