里飞网

 找回密码
 立即注册

LvglFontTool字体工具更新V0.4版本

查看数: 105884 | 评论数: 122 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-8-14 18:28

正文摘要:

LvglFontTool更新V0.4 V0.4 1、增加FreeType TTF的支持,生成抗锯齿字体更加圆润、光滑。 2、修复后面AWESOME图标不能添加问题。 3、优化了下查找算法。 4、增加了直接存文件的选项,解决文字多时转换死机或慢的问 ...

回复

迷茫的大笨象 发表于 2026-1-8 12:46:11
阿里兄 发表于 2026-1-8 11:25
那就是做外部字体时,是否用的同一个TTF,不行就先不要勾TTF,用宋体试试。 ...

还是不行,搞不懂了。
阿里兄 发表于 2026-1-8 11:25:38
迷茫的大笨象 发表于 2026-1-8 10:27
/* Title */
    lv_obj_t *title = lv_label_create(page); // 创建标题标签
    lv_label_set_text(tit ...

那就是做外部字体时,是否用的同一个TTF,不行就先不要勾TTF,用宋体试试。
迷茫的大笨象 发表于 2026-1-8 10:27:00

        /* Title */
    lv_obj_t *title = lv_label_create(page); // 创建标题标签
    lv_label_set_text(title, "迷茫的大笨象12aA!"); // 设置标题文本
    lv_obj_set_style_text_color(title, lv_color_white(), 0); // 设置文本颜色
    lv_obj_set_style_text_font(title, &lv_Font_SemiBold_24, 0); // 设置字体
    lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10); // 对齐位置




   内部字体可以正常显示的



阿里兄 发表于 2026-1-8 10:10:41
迷茫的大笨象 发表于 2026-1-8 10:03
/* Title */
    lv_obj_t *title = lv_label_create(page); // 创建标题标签
    lv_label_set_text(ti ...

先内部字体,少量文字,查看是否生成对应字模,调通后再转外部字体。
迷茫的大笨象 发表于 2026-1-8 10:07:45
LVGL版本 V8.38
迷茫的大笨象 发表于 2026-1-8 10:03:13


        /* Title */
    lv_obj_t *title = lv_label_create(page); // 创建标题标签
    lv_label_set_text(title, "迷茫的大笨象"); // 设置标题文本
    lv_obj_set_style_text_color(title, lv_color_white(), 0); // 设置文本颜色
    lv_obj_set_style_text_font(title, &lv_ExtFont_SemiBold_24, 0); // 设置字体
    lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10); // 对齐位置

大佬,请问下为什么显示汉字可以,ascii码不能显示,汉字混合ascii码都不显示,我也添加了啊。

/*
*---------------------------------------------------------------
*                        Lvgl Font Tool                        
*                                                               
* 注:使用unicode编码                                             
* 注:本字体文件由Lvgl Font Tool V0.4 生成                          
* 作者:阿里(qq:617622104)                                         
*---------------------------------------------------------------
*/


#include "lvgl.h"


typedef struct{
    uint16_t min;
    uint16_t max;
    uint8_t  bpp;
    uint8_t  reserved[3];
}x_header_t;
typedef struct{
    uint32_t pos;
}x_table_t;
typedef struct{
    uint8_t adv_w;
    uint8_t box_w;
    uint8_t box_h;
    int8_t  ofs_x;
    int8_t  ofs_y;
    uint8_t r;
}glyph_dsc_t;


static x_header_t __g_xbf_hd = {
    .min = 0x0009,
    .max = 0xffe5,
    .bpp = 2,
};


//static uint8_t __g_font_buf[238];//如bin文件存在SPI FLASH可使用此buff


static uint8_t *__user_font_getdata(int offset, int size){
    //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
    //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
    return __g_font_buf;
}


static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) {
    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
        return NULL;
    }
    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
    if( p_pos[0] != 0 ) {
        uint32_t pos = p_pos[0];
        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, sizeof(glyph_dsc_t));
        return __user_font_getdata(pos+sizeof(glyph_dsc_t), gdsc->box_w*gdsc->box_h*__g_xbf_hd.bpp/8);
    }
    return NULL;
}


static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) {
    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
        return NULL;
    }
    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
    if( p_pos[0] != 0 ) {
        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], sizeof(glyph_dsc_t));
        dsc_out->adv_w = gdsc->adv_w;
        dsc_out->box_h = gdsc->box_h;
        dsc_out->box_w = gdsc->box_w;
        dsc_out->ofs_x = gdsc->ofs_x;
        dsc_out->ofs_y = gdsc->ofs_y;
        dsc_out->bpp   = __g_xbf_hd.bpp;
        return true;
    }
    return false;
}


//Source Han Serif SC SemiBold,,-1
//字模高度:34
//XBF字体,外部bin文件
lv_font_t lv_ExtFont_SemiBold_24 = {
    .get_glyph_bitmap = __user_font_get_bitmap,
    .get_glyph_dsc = __user_font_get_glyph_dsc,
    .line_height = 34,
    .base_line = 0,
};



阿里兄 发表于 2025-8-6 15:41:02
WANG 发表于 2025-8-1 13:53
版主好,请问这几个特殊字母不能转换,是那里设置不对吗,ӘәҒғҚқҢңӨөҰұҮүҺһІі   这是哈 ...

这是不是双unicode的字符,不确定是不是LVGL的问题,你可以试试官方的字体工具是否支持这些字符。
WANG 发表于 2025-8-1 13:53:32
版主好,请问这几个特殊字母不能转换,是那里设置不对吗,ӘәҒғҚқҢңӨөҰұҮүҺһІі   这是哈萨克语除俄文字母以外的9个特殊字母
阿里兄 发表于 2024-11-28 08:37:48
啊抠 发表于 2024-11-27 23:15
请问"直接存文件" 勾不勾是啥区别,要生成外部BIN文件的

解决内部字体软件容易卡死问题,BIN文件不影响,其他没区别。
啊抠 发表于 2024-11-27 23:15:29
请问"直接存文件" 勾不勾是啥区别,要生成外部BIN文件的
郭坤豪 发表于 2024-11-12 18:21:03
lovemengx 发表于 2021-10-14 17:47
LZ,我们使用的 LVGL 8.0.0 版本,运行在 Linux 系统中,使用 LvglFontTool V0.4 生成的 XBF 外部 BIN 文件 ...

你好,我遇到了同样的问题,我确定字库加了中文,请问你最后怎么解决的
hjhj7591418 发表于 2024-5-21 08:29:53
阿里兄 发表于 2021-8-24 23:54
外部XBF字体可以直接支持,内部字体要修改一点点。

//Roboto,,-1
//字模高度:35
//内部字体
//使用排序和二分查表
lv_font_t FNT_R30 = {
    .dsc = &font_dsc,
    .get_glyph_bitmap = __user_font_get_bitmap,
    .get_glyph_dsc = __user_font_get_glyph_dsc,
    .line_height = 35,
    .base_line = 0,
};

还要把__user_font_get_bitmap, __user_font_get_glyph_dsc, 这两个函数换成lv_font_get_glyph_dsc_fmt_txt,lv_font_get_bitmap_fmt_txt, 才行吧???
阿里兄 发表于 2024-4-23 14:03:38
hjhj7591418 发表于 2024-4-23 13:52
阿里兄,我LVGL使用V8.3.5版本,使用LvglFontTool_V0.4导出“XBF字体,外部bin文件”使用,
但是卡死在“lv ...

很大可能是你读取函数有问题,建议你先使用内部XBF测试一下先,XBF是支持的。
hjhj7591418 发表于 2024-4-23 13:52:56
阿里兄,我LVGL使用V8.3.5版本,使用LvglFontTool_V0.4导出“XBF字体,外部bin文件”使用,
但是卡死在“lv_obj_set_style_text_font(Labal, &RobotoR20, 0);”这句。

请问这是不支持V8以上版本吗??
阿里兄 发表于 2024-4-8 21:59:11
limhanfeng 发表于 2024-4-8 15:08
阿里兄 我用XBF字体,外部bin文件,才10个阿拉伯数字10个英文字符4个汉字,抗锯齿开到4,结果生成的bin文件就有 ...

XBF格式,是使用你所输入文字中unicode最大值和最小值之间所有字符都会添加到索引,用于快速查表,也就是空间换时间的做法,XBF格式字体适用于有大空间的场景使用。
limhanfeng 发表于 2024-4-8 15:08:25
阿里兄 我用XBF字体,外部bin文件,才10个阿拉伯数字10个英文字符4个汉字,抗锯齿开到4,结果生成的bin文件就有120KB,这正常吗 二进制文件这么大的吗
limhanfeng 发表于 2024-4-8 09:39:56
admin 发表于 2024-4-7 16:56
使用内部字体是否正常?这种情况基本是读取或BIN文件写到FLASH时有问题。

重新试了下,发现使用XBF字体,内部大数组也是同样现象,而使用官网的字体转换是能正常显示的
limhanfeng 发表于 2024-4-7 17:35:50
admin 发表于 2024-4-7 16:56
使用内部字体是否正常?这种情况基本是读取或BIN文件写到FLASH时有问题。

使用内部.c文件是正常的
admin 发表于 2024-4-7 16:56:00
limhanfeng 发表于 2024-4-7 15:54
这个我复制错了 重新修改了下 麻烦大佬再看下呗

使用内部字体是否正常?这种情况基本是读取或BIN文件写到FLASH时有问题。
limhanfeng 发表于 2024-4-7 15:54:59
admin 发表于 2024-4-7 15:48
__user_font_getdata中的bFirstIn有问题,init_font也重新定义了一个bFirstIn,这两个都是static属于只对 ...

这个我复制错了 重新修改了下 麻烦大佬再看下呗
admin 发表于 2024-4-7 15:48:43
limhanfeng 发表于 2024-4-7 15:43
我采用XBF字体,外部bin文件,放到了linux系统中的flash中,我的LVGL是8.0.0版本,经过烧录后,UI符号和中英文都 ...

__user_font_getdata中的bFirstIn有问题,init_font也重新定义了一个bFirstIn,这两个都是static属于只对本函数内有效,它们没有任何关系,要换成全局变量,你这C语言不过关啊
limhanfeng 发表于 2024-4-7 15:43:04
本帖最后由 limhanfeng 于 2024-4-7 15:47 编辑

我采用XBF字体,外部bin文件,放到了linux系统中的flash中,我的LVGL是8.0.0版本,经过烧录后,UI符号和中英文都没有显示,大佬门帮看下会是为何原因呀
修改__user_font_getdata接口实现如下:
  1. char *Font_buff = NULL;

  2. static void init_font(void)
  3. {
  4.         FILE *fileFont = fopen("/mnt/custom/data/Picture/lv_font_siyuansongti_normal.bin", "r");
  5.         if (fileFont == NULL)
  6.         {
  7.                 printf("Failed to open file for reading");
  8.                 return;
  9.         }
  10.         fseek(fileFont, 0, SEEK_END);
  11.         long lFontSize = ftell(fileFont);
  12.         rewind(fileFont);
  13.         Font_buff = (char *)malloc(sizeof(char) * lFontSize);
  14.         fread(Font_buff, 1, lFontSize, fileFont);
  15.         fclose(fileFont);
  16. }

  17. static uint8_t *__user_font_getdata(int offset, int size)
  18. {
  19.         //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
  20.         //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
  21.         static bool bFirstIn = true;
  22.         if (bFirstIn)
  23.         {
  24.                 bFirstIn = false;
  25.                 init_font();
  26.         }
  27.         return (uint8_t*)(Font_buff + offset);
  28. }
复制代码

字体为外部的思源宋体,生成前的设置如下:



阿里兄 发表于 2024-4-5 19:19:03
sutaojin 发表于 2024-3-15 14:01
楼主,0.5测试版本里面,还是存在字体大并且字数多的时候转换卡死的情况

字体大建议使用0.4版本的XBF格式。
sutaojin 发表于 2024-3-15 14:01:34
楼主,0.5测试版本里面,还是存在字体大并且字数多的时候转换卡死的情况
阿里兄 发表于 2024-3-11 18:47:02
Juszou 发表于 2024-3-11 18:30
比如阿拉伯语,拉丁文,缅甸文,似乎再左边都看不到

左边看不到,那就是字体没有这些文字,可以选宋体或微软雅黑试试;
Juszou 发表于 2024-3-11 18:30:57
阿里兄 发表于 2024-3-11 18:29
这需要看你选的字体支持字符情况;字符多生成也很慢、可以直接生成文件;有部分是双unicode编码的文字可 ...

比如阿拉伯语,拉丁文,缅甸文,似乎再左边都看不到
阿里兄 发表于 2024-3-11 18:29:00
Juszou 发表于 2024-3-11 18:20
你好,我想知道 v0.4 支持阿拉伯语等除了中日韩英文以外的语言吗?我是用 python 脚本写入 0x0-0xFFFF 所有 ...

这需要看你选的字体支持字符情况;字符多生成也很慢、可以直接生成文件;有部分是双unicode编码的文字可能不支持。
Juszou 发表于 2024-3-11 18:20:51
你好,我想知道 v0.4 支持阿拉伯语等除了中日韩英文以外的语言吗?我是用 python 脚本写入 0x0-0xFFFF 所有字符,但是工具并不能显示,并且也无法生成;工具是有最大的字符数量限制,还是语言限制?
阿里兄 发表于 2024-1-9 15:16:09

字库是乱码的
阿里兄 发表于 2024-1-9 11:34:59
yuechaofu 发表于 2024-1-9 11:33
附件是我测试的中文字库,帮忙看看有问题,谢谢

没看到附件,你可以先用内部字体进行测试。

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2026-2-16 00:38 , Processed in 0.108695 second(s), 8 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表