使用fontforge进行字体拆分
游戏开发为了节省内存和资源下载量,需要把字体不用的字删掉,或者拆成多个字体逐级加载,批量操作用UI就比较难搞了,用fontforge搞起来比较顺手
安装fontforge后即可通过脚本代码批量进行操作,使用相对熟悉一点的python脚本,官方文档
首先写一个powershell脚本来启动并传递一些参数
$fontforge = ".../fontforge/bin/fontforge.exe" # fontforge的安装路径
$argumentList = "-script ./main.py ""extra arguments"""
Start-Process -File $fontforge -ArgumentList $argumentList -NoNewWindow
如果不需要传递额外参数(给别人用或者加个UI包装一下等),可以直接调用
.../fontforge/bin/fontforge.exe -script ./main.py
例:选取指定的字符,导出一个新字体
# main.py
input_file = "full_font.ttf" # 全量字体
output_file = "base_font.ttf" # 基础字符集
used_unicodes = {} # 读取用到的字表,自己通过ord()函数转一下
font = fontforge.open(input_file)
for char_name in font:
glyph = font[char_name]
unicode = glyph.unicode
if unicode in used_unicodes:
# 保留的字符
else:
# 这里假设单个glyph没有被多个unicode使用,如果需要相应处理,过滤一下
glyph.clear()
font.generate(outout_file)
font.close()
例:把全量字体拆分为A和B
#main.py
input_file = "full_font.ttf" # 全量字体
base_file = "base_font.ttf" # 基础字符集
extra_file = "extra_font.ttf" # 增量字符集
base_char_names = []
def load_base_char_names():
font = fontforge.open(input_file)
for char_name in font:
base_char_names.append(char_name)
font.close()
def generate_extra_font():
font = fontforge.open(input_file)
for char_name in base_char_names:
glyph = font[char_name]
glyph.clear()
font.generate(extra_file)
font.close()
def main():
load_base_char_names()
generate_new_font()
main()
使用fontforge进行字体拆分的更多相关文章
- 使用fontforge修改字体,只保留数字
设计图上的数字采用了Roboto字体,原字体文件200多k,而小程序主包最大2m,承受不起这么大的字体.因为只用到了数字,所以可以使用fontforge编辑字体,删除多余的部分. 一.下载并安装fon ...
- fontforge制作自定义字体及在手机上应用举例——张鑫旭
一.看似无关紧要的事件背景 之所以花时间折腾fontforge这个软件,去制作什么自定义的字体是有原因滴. 之前提过,最近我抽空将公司的手机软件HTML5网页化.期间碰到这么一个问题,页面低栏上的电话 ...
- 《FontForge常见问题FAQ》字王翻译版
<FontForge常见问题FAQ> 字王翻译版 原文: http://fontforge.github.io/en-US/faq/ 翻译: 字王·中国 blog: http://bl ...
- TTF字体基本知识及其在QT中的应用
字体类型 以Windows为例,有4种字体技术: Raster:光栅型,就是用位图来绘制字形(glyph),每个字都以位图形式保存 Vector:矢量型,就是用一系列直线的结束点来表示字形 TrueT ...
- Linux字体美化实战(Fontconfig配置)(转)
原文地址:http://www.jinbuguo.com/gui/linux_fontconfig.html 本文的主题是Linux环境下的字体美化,但是首先得要有字体,然后才能谈美化.所以第一件事就 ...
- 2019-1-29-Sublime-Text-安装中文、英文字体
title author date CreateTime categories Sublime Text 安装中文.英文字体 lindexi 2019-01-29 16:35:25 +0800 201 ...
- Sublime Text 安装中文、英文字体
在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...
- 2022-Aech安装(详细)
官方wiki:https://wiki.archlinux.org/ 基础安装 一:制作安装介质 下载ISO镜像文件: https://archlinux.org/download/ # 官方下载网址 ...
- 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
转:http://www.cnblogs.com/huangcong/p/3687665.html 首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包 ...
随机推荐
- 简约版八股文(day2)
Redis(内存中->非关系型数据库) redis是什么,为什么要用redis redis是基于键值对的NoSQL数据库,经常用来做缓存用户直接读取数据库中的数据效率是相对比较慢的,如果把数据读 ...
- 为什么使用ioutil.ReadAll 函数需要注意
1. 引言 当我们需要将数据一次性加载到内存中,ioutil.ReadAll 函数是一个方便的选择,但是ioutil.ReadAll 的使用是需要注意的. 在这篇文章中,我们将首先对ioutil.Re ...
- 【爬虫案例】用Python爬取知乎热榜数据!
目录 一.爬取目标 二.编写爬虫代码 三.同步讲解视频 3.1 代码演示视频 3.2 详细讲解视频 四.获取完整源码 一.爬取目标 您好,我是@马哥python说,一名10年程序猿. 本次爬取的目标是 ...
- 防火墙(iptables与firewalld)
防火墙 iptables 疏通和堵 进行路由选择前处理的数据包:prerouting 处理流入的数据包:input 处理流出的数据包:output 处理转发的数据包:forward 进行路由选择后处理 ...
- UE构建基础和实践:四、使用脚本打包
序言 使用UE版本为UE5.20 在实际项目中,我们常常使用自动化脚本来进行构建,它可以增加我们的生产效率,并降低人为操作带来的失误风险. BuildGraph BuildGraph UE官方提供的构 ...
- 何为DDD
从这一刻开始,请大家忘记自己是一名技术人员,用业务的角度来思考问题. 1.什么是DDD DDD(Domain-driven design,领域驱动设计),是一个很好的应用于微服务架构的方法论 DDD要 ...
- Uncaught TypeError: Failed to set the 'currentTime' property on 'HTMLMediaElement': The provided double value is non-finite.
musicSeekTo: function(value){this.audio.currentTime = this.audio.duration*value; }, musicVoiceSeekTo ...
- deepin install mariadb
输入指令: sudo apt-get install mariadb-server mariadb-client
- oracle 11g手工建库步骤(初学者)
要建立的数据库ORACLE_SID=test1sys和system的密码为oracle1.建立相应的目录mkdir /u01/app/oracle/oradata/test1mkdir /u01/ap ...
- 桌面应用打包:pyinstaller
1 背景 在使用python开发一些小工具时,如果其他人电脑中没有python环境或者没有安装相应的第三方库,是没办法运行的,而要求对方安装又不现实,尤其是对方不是技术人员,因此如何将一个独立的pyt ...