☰
HoloCubic_AIO字体工具实战:如何用get_font.py从C文件提取汉字字模
2026/10/2 21:00:06 网站建设 项目流程

HoloCubic_AIO字体工具实战:如何用get_font.py从C文件提取汉字字模

【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO

HoloCubic_AIO 是一款基于 ESP32 的超多功能 AIO 固件,内置天气时钟、相册、视频播放、桌面投屏、Web 服务等应用。本文介绍如何用官方脚本 get_font.py 从 LVGL 字模 C 文件中一键提取完整汉字字库,帮你快速排查字体缺字、扩展字符范围——只需一条命令,几十万个字节的海量字模文件瞬间变为一行清晰的文字清单。

什么是字模 C 文件?

HoloCubic_AIO 使用 LVGL 图形库渲染界面,中文字体以字模(Glyph)C 文件的形式存放在固件里。每个汉字都先被转换成点阵位图,再写成 C 数组,格式类似:

/* 你 */ 0x00,0x44,0x20,0x00, //....+@+ 0x00,0xd0,0x84,0x00, //..+@%@ // ...

也就是说,"字库"就藏在一条条/* 汉字 */注释里。固件自带的楷体字库文件 font_unicode_kai_16.c 超过 13 万行,由 Lvgl Font Tool V0.4 生成。想确认"这个字体到底支持哪些字",靠肉眼显然不现实——这正是get_font.py出场的地方。

为什么需要从字模文件提取汉字?

实际使用中有几个高频场景:

  • 🌤️确认天气 App 城市支持:天气功能依赖字库覆盖,城市名缺字会显示乱码
  • 🎂纪念日设置排错:README 提示纪念日名称支持的字有固定范围,超范围的字需要自行生成字体文件替换
  • 🧩字库扩展验证:用字体工具生成新字模文件后,先提取一遍字库,确认目标汉字都在,再烧录固件,避免反复试错

项目作者也在 小白避坑指南 中明确推荐了这个脚本的用法。

get_font.py 一键提取:完整使用步骤

前置条件:电脑上安装 Python 3(无需安装任何第三方库,脚本只用了标准库re)。

第 1 步:找到项目中的脚本 Script/get_font.py,它的使用方式在文件头部注释中写得很清楚:

用法:python get_font.py 字模.c文件的路径

第 2 步:执行提取命令,例如对固件内置楷体字库:

python3 Script/get_font.py AIO_Firmware_PIO/lib/font/font_unicode_kai_16.c

第 3 步:查看输出。命令会先回显文件路径,然后打印一行完整的字库内容,例如对桌面模拟工程字体 ch_font_20.c 提取,输出为:

!"#$%&'()*+,-./0123456789:;<=>?@ABC...一七万三上丘东严个中丰临丹主丽...龙,

ASCII 字符 + 全部汉字一字不落,且自动去重。

get_font.py 工作原理揭秘

脚本只有 71 行(见 Script/get_font.py),核心逻辑非常直观:

  1. 逐行读取字模 C 文件;
  2. 用正则表达式/\*(.+)\*/匹配每行中的/* xxx */字符注释——这正是 Lvgl Font Tool 的固定输出格式;
  3. 通过切片font[3:-3]去掉/*前缀和*/后缀,得到汉字本身(第27行);
  4. 用set集合去重后拼接输出。

此外脚本还内置了第二种方法searchWordByEocode(第39-59行),按 Unicode 区间\u4e00-\u9fff直接扫描中文汉字,适用于不含注释的字体文件,默认未启用。

项目内置的 3 套字体资源一览

字模文件字体字高特点
font_unicode_kai_16.c楷体16全 Unicode 常用字,实测含 6800+ 个字符,覆盖面最广
ch_font_20.c微软雅黑粗体20桌面模拟器使用的基础字库
ch_font20.c微软雅黑粗体20社区贡献版,专门扩展了高德 API 全部城市名用字,天气 App 推荐

字库详情也记录在各目录的 README 中,如 字体目录说明。

进阶:提取字库后如何扩展新字符?

发现缺字时的完整工作流是"提取 → 对比 → 生成 → 替换":

  1. 用get_font.py提取当前字库,确认缺失的汉字;
  2. 打开官方字体转换工具(源作者阿里兄,已打包在 Docs/字体转换工具(源作者阿里兄).zip.zip)),输入需要的字符生成新的字模 C 文件;
  3. 再用get_font.py对新文件提取一遍,核对字符覆盖无误;
  4. 替换固件中对应字模文件(如纪念日功能对应的字体文件)并重新编译烧录。

常见问题(FAQ)

问:输出里除了汉字还有什么?答:有全部 ASCII 字符(字母、数字、标点),因为它们同样以/* x */注释形式存在于字模文件中,脚本会一并提取。

问:提取结果能直接用于字体工具吗?答:可以。把输出复制进 Lvgl Font Tool 的字符输入框,即可保证"新字库 ⊇ 旧字库",不会丢失原有字符。

问:脚本能修改字模文件吗?答:不能,它只做只读提取分析。生成和修改字体请用 Lvgl Font Tool V0.4。

掌握get_font.py后,字模文件不再是天书——字符覆盖率一目了然,缺字排查和字库扩展都变得又快又稳。快去试试吧!

【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询