cocos creator ttf字体字符提取和字体文件子集生成并引用

NO.1
使用场景

cocos creator版本v2.1.3

新加的lable文案字体显示不一致

NO.2
提取原字体文件字符

第一个方案是在知道原字符字体的情况下

把新的字符加入,并全部重新生成新的字体子集并引用

这样能够有效避免对原字体的影响,能够随时适应新的变动,以及了解有哪些字符引用

代码示例

from fontTools.ttLib import TTFont as t1
import json


def toUnicode(oneStr):
    t = oneStr
    if t[:3] == 'uni': t = t.replace('uni', '\\u')
    if t[:2] == 'uF': t = t.replace('uF', '\\u')
    return json.loads(f'"{t}"')

# 字符集
str_data = ""

def printUNI(fontName, imagePath):
    font = t1(fontName)
    gs = font.getGlyphSet()
    glyphNames = font.getGlyphNames()
    for i in glyphNames:
        if i[0] == '.':  # 跳过'.notdef', '.null'
            continue
        print(i)
        print(i, toUnicode(i))
        global str_data
        str_data = str_data + toUnicode(i)


fontName = "./font_new2.ttf"
imagePath = "images/FSung-F"
printUNI(fontName, imagePath)
print("str_data", str_data)

str_data为字符的合集

NO.3
fonttool生成字体子集
中文字体,只打包需要使用的字符为字体文件引用
完整版字体一般为几M,按字符生成文件后只有几KB或者几十KB

下载依赖

pip install fonttools

使用fonttools

pyftsubset <字体文件> --text=<需要的字形> --output-file=<输出文件>
NO.4
tips

当字符较多时,可以将上述脚本写为shell脚本执行
避免因为字符过多或者特殊字符导致命令终端失效
本文使用pycharm编辑器+conda虚拟环境,无法执行bash脚本
gitBash无法正确激活conda环境,改为cmder终端
1.打开cmder终端并激活conda对应虚拟环境

2.编写shell脚本
文件名为xxx.sh
内容和使用fonttools方法一样

pyftsubset ./xxx.ttf --text="xxxxxxxxxxxxxxxx" --output-file=test.ttf

3.执行shell

bash ./xxx.sh

END