外部字体

# 简介 [LVGL API 字体](https://doc.openluat.com/wiki/21?wiki_page_id=2609 "LVGL API 字体") 这里我们用lv_font_conv生成外部字体 # 安装lv_font_conv 首先安装[nodejs(点击这里下载对应安装包)](https://nodejs.org/en/download/ "nodejs")这里不做介绍,下载安装即可 打开cmd运行 ```lua npm i lv_font_conv -g ``` 即可安装好lv_font_conv 我们cmd运行lv_font_conv测试 ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211021171413561_image.png) 显示如上内容,证明lv_font_conv 已正常运行 # lv_font_conv命令介绍 常用命令: - `--bpp` - 每像素位数(抗锯齿) - `--size` - 输出字体大小(像素) - `-o`, `--output`- 输出路径(文件或目录,取决于格式) - `--format` - 输出格式 - `--format dump` - 转储字形图像和字体信息,用于调试 - `--format bin`- 以二进制形式转储字体(如[规范中所述](https://github.com/lvgl/lv_font_conv/blob/master/doc/font_spec.md)) - `--format lvgl`- 以[LittlevGL](https://github.com/lvgl/lvgl)格式转储字体 - `--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外部字库了 ```shell 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大小写字母 # 字体使用 ```lua function makeButton(CONT) local text="1234567890" local label_18px = lvgl.label_create(CONT, nil) lvgl.label_set_recolor(label_18px, true) local font18 = lvgl.font_load("/lua/datefont.bin") lvgl.obj_set_style_local_text_font(label_18px, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font18) lvgl.label_set_text(label_18px, "#FFFFFF "..text) lvgl.obj_align(label_18px,CONT, lvgl.ALIGN_IN_TOP_LEFT, 0,30) local label_40px = lvgl.label_create(CONT, nil) lvgl.label_set_recolor(label_40px, true) local font = lvgl.font_load("/lua/timefont.bin") lvgl.obj_set_style_local_text_font(label_40px, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font) lvgl.label_set_text(label_40px, "#FFFFFF "..text) lvgl.obj_align(label_40px,label_18px, lvgl.ALIGN_OUT_BOTTOM_LEFT, 0,50) end ``` # 测试固件和脚本 [LuatOS-HMI_V3209_RDA8910.pac](https://cdn.openluat-luatcommunity.openluat.com/attachment/20220225182756918_LuatOS-HMI_V3209_RDA8910.pac) [product/金牛座开发板/3.project/mediaAirController](https://gitee.com/openLuat/Luat_Lua_Air724U/tree/master/product/%E9%87%91%E7%89%9B%E5%BA%A7%E5%BC%80%E5%8F%91%E6%9D%BF/3.project/mediaAirController) # 显示效果 ![image.png](https://cos.easydoc.net/22753220/files/l029nxtr) ## 参考文档 [LuatOS-SoC之LVGL字体篇](https://doc.openluat.com/article/3496# "LuatOS-SoC之LVGL字体篇") # 常见问题 # 字库添加中文字符的方法 添加中文字符用的是Unicode码,比如要添加"中文"这个两个字符到字库,只需要在命令行指定这个字符的Unicode即可,以下命名是在上面命令的基础上添加"中文"2个字符的命令 ```shell 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码 # 权限不够报错问题 cmd 必须管理员权限,要生成的 *.bin文件和用到的*.ttf字库所在目录要有user用户写权限 例如: ![6972b762-8bc1-4d4e-9a0c-2c869e562fdd.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211227112646553_6972b762-8bc1-4d4e-9a0c-2c869e562fdd.png) 出现如上错误,需要用管理员权限 要生成的 *.bin文件和用到的*.ttf字库所在目录权限如下: ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211227113706704_image.png) 如权限不够会报如下错误: ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211227114618042_image.png)