
9KB 装下 411 个汉字u8g2 中文字体库的压缩魔法我扒开源码讲给你听【免费下载链接】u8g2_wqy适合 u8g2 的中文字体采用文泉驿点阵宋体作为源本提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。项目地址: https://gitcode.com/gh_mirrors/u8/u8g2_wqy先给结论免得你被吊胃口u8g2_wqy 是一套给 u8g2 图形库用的中文字体以文泉驿点阵宋体为源本提供 12x12 到 16x16 共五档点阵。最狠的数字是——411 个高频汉字只占 9.5KB完整的 GB2312 全部 7539 个字符也才 208KB。如果你手头是 Flash 以 KB 计的 MCU还想在小 OLED 上显示中文这篇值得你读完。第一次看到这个数字我的第一反应是又在吹牛。直到我把src/u8g2_font_wqy.c里那串九千多字节的数组从头翻到尾才承认它是真的。于是问题来了它到底凭什么这么省省的第一层源本选对了事半功倍文泉驿点阵宋体是什么说白了每个汉字在它那里就是一张固定尺寸的像素画——12 点阵就是一字 12x12 个点每个点只存亮/灭一个 bit。u8g2 拿到数据就能点对点画出来不需要缩放、抗锯齿、矢量计算这类运行时开销CPU 省了数据也天然紧凑。对比一下差距就出来了矢量字库省存储但你要在 MCU 上养一个字体引擎自己画点阵看着灵活实际每个字都要手动抠图。而点阵宋体是把显示效果和数据格式一次性打包好——就像收拾行李时把每件衣服叠成统一方块而不是塞各种奇形怪状的物件箱子利用率自然高。省的第二层字符集可以点菜没人逼你吃全家福这是我觉得最聪明的设计。它不甩给你一个巨大的全量字库让你硬扛而是给了 6 档选择字符集字符数12 点阵占用一句话定位chinese14119,491 B最常用汉字存储告急时的底线chinese257413,701 B日常用语基本覆盖chinese399325,038 B高频字加常用符号性价比之王gb2312a4,041111,359 BGB2312 主体区gb2312b4,531120,375 B比 a 再多一批符号gb23127,539208,228 B完整 GB2312全量管够翻译成生活语言就是去食堂吃饭有单人套餐、双人套餐、全家桶还有满汉全席。你按 Flash 预算点菜而不是为一辈子用不到的几千个字提前买单。6 档字符集 × 5 档字号一共 30 个现成字体几乎任何屏幕尺寸都能找到匹配项。省的最深层这套裁剪流水线你自己也能玩字符集不是拍脑袋定的。maps/目录里躺着 6 个.map文件——它们像购物清单一行一个字符编码写明哪些字要留下bdfconv.exe拿着清单把bdf/里的文泉驿源文件裁剪、编译成 u8g2 认识的 C 数组。genmaps.sh则演示了清单怎么从 GB2312 文本自动生成iconv 转码、排序、去重一条龙。这意味着你能定制自己的专属字库。比如项目只显示温度、湿度、状态、正常、警告这几个词那就手写一个 20 行的 map跑一遍 bdfconv得到几 KB 甚至更小的字库。省下来的 Flash够你再塞一个传感器驱动。上手其实就三行代码的事clone 下来git clone https://gitcode.com/gh_mirrors/u8/u8g2_wqy把src/u8g2_wqy.h和src/u8g2_font_wqy.c放进工程然后#include U8g2lib.h #include u8g2_wqy.h U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); void setup() { u8g2.begin(); // 存储紧张选 chinese1想省心选 chinese3全量场景选 gb2312 u8g2.setFont(u8g2_font_wqy12_t_chinese3); } void loop() { u8g2.firstPage(); do { u8g2.drawStr(0, 12, 系统状态正常); u8g2.drawStr(0, 28, 温度25.5℃); } while (u8g2.nextPage()); delay(1000); }字库名规律很好记u8g2_font_wqy 字号 _t_ 字符集。在 128x64 屏上用 12 点阵每行约排 10 个字、整屏 5 行换 16 点阵更细腻但每行只剩 8 个字、4 行——要清晰还是要信息量这就是你的选择题。还有两个隐藏细节值得表扬头文件里自动开了U8G2_USE_LARGE_FONTS并针对 AVR 的 PROGMEM、ESP8266 的.text段做了 section 处理Flash 布局的坑它提前替你填了。说点不爱听的它也有脾气老实交代几个边界免得你踩坑gb2312a 不含全角标点。想显示得用半角!代替否则屏幕上就是一个框。小字号天生受限。12、13 点阵在 OLED 上偏骨感笔画复杂的字会显得挤追求美观得上 16 点阵代价是全量 gb2312 要 318KB。覆盖的是 GB2312 简体常用范围生僻字、繁体字、冷门异体字别指望。但换个角度看正因为存多少字的选择权完全在你手里这些边界反而成了可管理的成本而不是无底洞。我最后选了 chinese3 配 16 点阵——37KB 封顶覆盖 993 个高频字日常界面几乎不碰壁。那一刻我终于想明白嵌入式中文显示的难题从来不是有没有字库而是怎么为你的板子挑对字库。u8g2_wqy 把选择权递到了你手里剩下的事就看你的 Flash 和良心了。【免费下载链接】u8g2_wqy适合 u8g2 的中文字体采用文泉驿点阵宋体作为源本提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。项目地址: https://gitcode.com/gh_mirrors/u8/u8g2_wqy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考