MicroPython[ESP32-S3]:lvgl使用fontTools提取字体子集设置中文手写字体

bilibili-视频演示

点击本文字,打开哔哩哔哩APP

NO.1
本期功能

以下内容

  1. 使用fontTools提取字体子集

  2. 使用lvgl加载字体并显示中文手写字体

参考内容

官方文档

https://docs.lvgl.io/8.3/libs/freetype.html

https://docs.lvgl.io/8.3/overview/font.html?highlight=font

官方在线字体转换

https://lvgl.io/tools/fontconverter

NO.2
fontTools

安装fontTools

pip install fonttools

img

使用pyftsubset

pyftsubset <字体文件> –text=<字符串> –output-file=<输出文件>

pyftsubset muyao.ttf --text=哔哩哔哩粉丝 --output-file=bilibili_fans.ttf

img

bilibili_fans.ttf字体文件使用ampy传输到ESP32-S3中

参考文章

MicroPython 工具 Ampy:给ESP32传送JPG,GIF等文件

lvgl加载字体文件

右侧的20为字号,字体大小

font_bilibili = lv.tiny_ttf_create_file("S:bilibili_fans.ttf"20)

设置字体样式

label.set_style_text_font(font_bilibili, 0)
NO.3
Tips

总结如下

  1. 使用python的库fontTools中的pyftsubset 来提取字体子集文件

  2. 使用lvgl加载ttf字体文件

  3. 显示中文手写字体在屏幕上

这是合集中描述的第二种中文字体设置方式

一种是font_load加载bin的文件

一种是tiny_ttf_create_file加载ttf字体文件

同样的字符串(哔哩哔哩粉丝),bin的文件为265字节(0.25kb),ttf子集为3.25kb

img

目前差异对比

  1. bin文件体积大小比ttf小很多(虽然ttf暂时没有做优化)

  2. ttf的字体大小可以在代码中指定和修改,但是bin文件字体是在lv_font_conv处理字体时就指定了固定大小

  3. 一个是实时渲染字形,一个是闪存存储字体位图,各有优势

往期内容

MicroPython[ESP32-S3]:硬件定时器设置日期刷新文字显示

MicroPython[ESP32-S3]:LVGL显示GIF+http request显示哔哩哔哩粉丝计数

MicroPython[ESP32-S3]:使用lv_font_conv制作中文字体文件然后加载和显示

END