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进行字体拆分的更多相关文章

  1. 使用fontforge修改字体,只保留数字

    设计图上的数字采用了Roboto字体,原字体文件200多k,而小程序主包最大2m,承受不起这么大的字体.因为只用到了数字,所以可以使用fontforge编辑字体,删除多余的部分. 一.下载并安装fon ...

  2. fontforge制作自定义字体及在手机上应用举例——张鑫旭

    一.看似无关紧要的事件背景 之所以花时间折腾fontforge这个软件,去制作什么自定义的字体是有原因滴. 之前提过,最近我抽空将公司的手机软件HTML5网页化.期间碰到这么一个问题,页面低栏上的电话 ...

  3. 《FontForge常见问题FAQ》字王翻译版

    <FontForge常见问题FAQ> 字王翻译版 原文: http://fontforge.github.io/en-US/faq/ 翻译: 字王·中国   blog: http://bl ...

  4. TTF字体基本知识及其在QT中的应用

    字体类型 以Windows为例,有4种字体技术: Raster:光栅型,就是用位图来绘制字形(glyph),每个字都以位图形式保存 Vector:矢量型,就是用一系列直线的结束点来表示字形 TrueT ...

  5. Linux字体美化实战(Fontconfig配置)(转)

    原文地址:http://www.jinbuguo.com/gui/linux_fontconfig.html 本文的主题是Linux环境下的字体美化,但是首先得要有字体,然后才能谈美化.所以第一件事就 ...

  6. 2019-1-29-Sublime-Text-安装中文、英文字体

    title author date CreateTime categories Sublime Text 安装中文.英文字体 lindexi 2019-01-29 16:35:25 +0800 201 ...

  7. Sublime Text 安装中文、英文字体

    在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...

  8. 2022-Aech安装(详细)

    官方wiki:https://wiki.archlinux.org/ 基础安装 一:制作安装介质 下载ISO镜像文件: https://archlinux.org/download/ # 官方下载网址 ...

  9. 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...

  10. phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    转:http://www.cnblogs.com/huangcong/p/3687665.html 首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包 ...

随机推荐

  1. Redis Stack:基于Redis的搜索、文档、图形和时间序列功能

    基于Redis的搜索.文档.图和时间序列功能整合到一个扩展Redis Stack中,以使开发人员能够轻松构建实时应用程序. Redis Stack 于 3 月 23 日发布,由三个组件组成: Redi ...

  2. 伸展树(Splay)详解

    引入 在一条链中,二叉查找树的时间复杂度就会退化成 \(O(n)\),这时我们就需要平衡树来解决这个问题. \(Splay\)(伸展树)是平衡树的一种,它的每一步插入.查找和删除的平摊时间都是 \(O ...

  3. 玩转 PI 系列-如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?

    概述 618 买了几个便宜的 Purple PI OH 开发板 (500 块多一点买了 3 个), 这个开发板类似树莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片.如下: ...

  4. Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框

    Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框 本文是项目中关于 弹窗界面 设计的技术分享,通过 FluentAvalonia+Dialo ...

  5. SSH远程主机执行命令:s2c

    #!/bin/bash ip=$1 ip_num=$(echo $ip | awk -F\. '{print NF}') if [ $ip_num -eq 2 ]; then ip=192.168.$ ...

  6. Linux 上 KVM 虚拟机网络问题

    通过控制台连接虚拟机,ping自己的ip,ping宿主机的ip,ping同网段的ip 1. 自己的ip也不通,先检查网络配置 2. 宿主机的ip不通,就要确认下虚拟机网卡的类型 对于macvlan网卡 ...

  7. [爬虫]2.3.1 使用Python操作文件系统

    Python提供了许多内置库来处理文件系统,如os.shutil和pathlib等,这些库可以帮助你创建.删除.读取.写入文件和目录. 读取文件 在Python中,你可以使用内置的open函数来打开一 ...

  8. EasyExcel中使用表头模板示例

    解决方案 在EasyExcel的官方示例中,使用模板导出Excel,其结果仍然还会重新打印表头.不满足使用表头模板的需求.在参考源码后,找到如下解决方案. String templateFileNam ...

  9. C/C++八大排序

    排序 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 按照难易程度排序,八大排序算法可以从简单到复杂 ...

  10. cpu,gpu的种类