如何用开发板实现lvgl加载外部字体功能
目录名称
简介
材料准备
- EVB_Air724UG_A13开发板一套(其他合宙支持LuatOS-Air开发版也可以),包括天线SIM卡,USB线,ST7735屏。
- LuatOS-Air开发环境:环境搭建方法
步骤
这里我们用lv_font_conv生成外部字体
安装lv_font_conv
首先安装nodejs(点击这里下载对应安装包)这里不做介绍,下载安装即可
打开cmd运行
npm i lv_font_conv -g
即可安装好lv_font_conv
我们cmd运行lv_font_conv测试
显示如上内容,证明lv_font_conv 已正常运行
lv_font_conv命令介绍
常用命令:
--bpp
- 每像素位数(抗锯齿)--size
- 输出字体大小(像素)-o
,--output
- 输出路径(文件或目录,取决于格式)--format
- 输出格式--force-fast-kern-format
- 始终使用更快速的 kering 存储格式,但要付出一定的代价。如果出现尺寸差异,则会显示出来--lcd
- 生成具有 3 倍水平分辨率的位图,用于子像素平滑--lcd-v
- 生成具有 3 倍垂直分辨率的位图,用于子像素平滑--use-color-info
- 尝试使用字体中的字形颜色信息来创建灰度图标。由于灰色色调是通过透明度模拟的,因此仅在对比背景上效果会很好--lv-include
- 仅与--format lvgl
,为 设置备用路径lvgl.h
字体命令:
--font
- 字体文件的路径(ttf/woff/woff2/otf)。可多次用于合并-r
,--range
- 单个字形或范围 + 可选映射,属于先前声明的--font
. 可以多次使用。例子:-r 0x1F450
- 单值、十进制或十六进制格式-r 0x1F450-0x1F470
- 范围-r '0x1F450=>0xF005'
- 带有映射的单个字形-r '0x1F450-0x1F470=>0xF005'
- 带映射的范围-r 0x1F450 -r 0x1F451-0x1F470
- 2个范围-r 0x1F450,0x1F451-0x1F470
- 同上,但定义为 single-r
--symbols
- 要复制的字符列表(而不是 中的数字格式-r
)--symbols 0123456789.,
- 提取字符以显示数字
--autohint-off
- 不要强制自动提示(默认情况下“灯”是打开的)--autohint-strong
- 使用更强大的自动提示(会破坏字距调整)
其他调试选项:
--no-compress
- 禁用内置 RLE 压缩--no-prefilter
- 禁用位图线过滤器(XOR),用于提高压缩率--no-kerning
- 删除字距调整信息以减小大小(不推荐)--full-info
- 不要缩短“font_info.json”(包括像素数据)
我们输入以下命令即可生成我们想要的.bin外部字库了
lv_font_conv --no-compress --format bin --font D:\8910\lvgl\Font-OPPOSans\OPPOSans-B.ttf -o D:\8910\lvgl\myfontd\opposans_b_20.bin --bpp 4 --size 20 -r 0x30-0x39 -r 0x41-0x5A -r 0x61-0x7A
这里是通过OPPOSans-B.ttf 字库生成opposans_b_20.bin模块加载字库,由于空间有些这里只是生成了1-9数字A-Z大小写字母
字体使用
-- 创建标签
label = lvgl.label_create(lvgl.scr_act(), nil)
lvgl.label_set_text(label,"TEST1234")
-- 加载外部字体
local font = lvgl.font_load("/lua/opposans_b_20.bin")
lvgl.obj_set_style_local_text_font(label, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font)
测试固件和脚本
LuatOS-Air_V3201_RDA8910.pac
lvgl7-font.7z
显示效果
默认字库显示效果
外部字体显示效果
参考文档
常见问题
字库添加中文字符的方法
添加中文字符用的是Unicode码,比如要添加"中文"这个两个字符到字库,只需要在命令行指定这个字符的Unicode即可,以下命名是在上面命令的基础上添加"中文"2个字符的命令
lv_font_conv --no-compress --format bin --font D:\8910\lvgl\Font-OPPOSans\OPPOSans-B.ttf -o D:\8910\lvgl\myfontd\opposans_b_20.bin --bpp 4 --size 20 -r 0x30-0x39 -r 0x41-0x5A -r 0x61-0x7A -r 0x4E2D -r 0x6587
这里0x4E2D 是“中”的Unicode码,0x6587是“文”的Unicode码
用下面的2个文件替换上面脚本中对应的文件,即可显示如下效果
opposans_b_20.bin
widget.lua
权限不够报错问题
cmd 必须管理员权限,要生成的 .bin文件和用到的.ttf字库所在目录要有user用户写权限
例如:
出现如上错误,需要用管理员权限
要生成的 .bin文件和用到的.ttf字库所在目录权限如下:
如权限不够会报如下错误: