欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 游戏ttf字体瘦身脚本

游戏ttf字体瘦身脚本

2024/10/25 19:30:26 来源:https://blog.csdn.net/qq_45310244/article/details/140992744  浏览:    关键词:游戏ttf字体瘦身脚本

游戏中通常会用到某种特定字体,而某些字体动则10+M,对某些游戏(尤其是小游戏)来讲是无法忍受的,此文章主要讲述上个项目中制作的字体裁剪脚本

工具git地址

  • 配置信息(config.json)
{	// 文本内容(可能为多语言表导出的内容)"txtFile": "gameText.txt",// 字体文件"fontFile": "江城圆体 600w_1.ttf",// 默认文字(英文字符,阿拉伯数字等)"defaultText": "",// 导出的相对路径"exportPath": "../client/assets/Bundles/Game/font/",// 裁剪后导出的字体名称"exportName": "font.ttf"
}
  • 文本内容(gameText.txt)
    文件内为游戏中使用到的文字,多语言项目为多语言表导出文件。
  • 脚本(fontShort.py)
    注释较全面,可自行理解。如有不解,请搭配AI。
import re
import json
from fontTools.ttLib import TTFont
from fontTools import subsetconfig = 'config.json' # 配置文件路径# config配置
textFile = ''
fontFile = ''
defaultText = ''
exportPath = ''
exportName = ''# 文本内容
gameText = ''# 加载config文件
def _loadConfig():with open(config, 'r', encoding='utf-8') as file:content = file.read()jsonObj = json.loads(content)global textFileglobal fontFileglobal defaultTextglobal exportPathglobal exportNametextFile = jsonObj['txtFile']fontFile = jsonObj['fontFile']defaultText = jsonObj['defaultText']exportPath = jsonObj['exportPath']exportName = jsonObj['exportName']# 加载TXT文件
def _loadText():with open(textFile, 'r', encoding='utf-8', errors='replace') as file:content = file.read()return content# 去重
def _removeDuplicates(s):return ''.join(set(s))# 检查字体文件中缺失的字
def _checkFontExits(str):noneStr = ""font = TTFont(fontFile)glyf = font["glyf"]for i in str:code = i.encode("unicode-escape").decode()if "\\u" in code:code = "uni" + code[2:].upper()if not glyf.has_key(code):dd = re.findall('[\u4e00-\u9fa5]', i)if(len(dd) > 0):noneStr += dd[0]if(noneStr == ""):returnprint("<---------------------------------------->")print("当前字体中缺失字: " + noneStr)print("<---------------------------------------->")# 导出字体ttf
def _exportFont(textStr):font = subset.load_font(fontFile, subset.Options())exportFile = exportPath + exportNamesubsetter = subset.Subsetter()subsetter.populate(text = textStr)subsetter.subset(font)# 生成输出文件subset.save_font(font, exportFile, subset.Options())font.close()print("输出字体文件成功: " + exportFile)def _main():_loadConfig()originText = defaultText + _loadText().replace('\n', '')print("去重前: ", originText)print("<-------------------->")gameText = _removeDuplicates(originText)print("去重后: ", gameText)_exportFont(gameText)_checkFontExits(gameText)print("subset done!")print("输入回车键继续")input()_main()
  • 文件结构
    在这里插入图片描述
  • 脚本执行
    可以看出当前字体内还缺失文字
    在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com