使用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文件夹,里面包 ...
随机推荐
- vue报错解决Duplicate keys detected: ‘[object Object]’
最近在做vue项目时遇到了报错 Duplicate keys detected: '[object Object]'. This may cause an update error. 由于这个 ...
- sensor binning信号及信噪比
Signal是简单的增加,Noise是以均方根形式增加 例如: 2*2的binning模式中,signal增加4倍,noise增加 4 \sqrt4 4 倍,so SNR增加2倍. sony sen ...
- 深度学习(五)——DatadLoader的使用
一.DataLoader简介 官网地址: torch.utils.data - PyTorch 2.0 documentation 1. DataLoder类 class torch.utils.da ...
- MapReduce实现TopN的效果
1.背景 最近在学习Hadoop的MapReduce,此处记录一下如何实现 TopN 的效果,以及在MapReduce中如何实现 自定义分组. 2.需求 我们有一份数据,数据中存在如下3个字段,订单编 ...
- 偷师MapStruct
转自自己的qq空间 2022年10月26日 一个项目看三遍 每遍都有新发现 嘿嘿嘿 我是代码小偷
- Django学习笔记:第二章django的安装和创建应用
1.安装Django 终端运行 pip install django 查看django是否安装成功 python -m django --version 1.1 安装虚拟环境 在控制台运行 pip i ...
- Cloudflare 重定向配置
最近把之前的一个网站域名换成另一个域名,想要添加一下重定向,避免流量流失(虽然本来就没流量).然后在 Cloudflare 配置时尝试多次都失败了,遇到各种 Your connection is no ...
- MAUI Blazor项目中如何添加一个返回服务,并支持安卓返回键
前言 MAUI Blazor中,安卓项目的返回键体验很不好,只能如同浏览器一样返回上一页.但很多时候,我们想让他返回的上一页,不一定就是实际上的上一页.而且也想让返回键去支持一些事件,按下返回键触发, ...
- PostgreSQL+GeoHash地图点位聚合
PG数据库安装扩展 需要用到pg数据库的空间扩展postgis,在进行操作之前需要在数据库中安装扩展. CREATE EXTENSION postgis; CREATE EXTENSION postg ...
- .Net Core控制台程序读取Json配置文件
1 添加依赖(可以直接通过nuget包安装 Microsoft.Extensions.Configuration.Json 这个会依赖其他两个会自动安装依赖的) Microsoft.Extension ...