在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件FontPruner 字体精简工具。他们各自提供了一个用于精简字体的工具, FontSubsetGUIFontPruner。前者是网络上一个作者提供的免费软件,现在不是很好找,后者是西山居开源的内部工具,基于 google 的 sfntly 制作。

  我分别使用两个工具裁剪同一个字体,使用同一套文本,发现结果还是有区别。字体:仿宋;大小10Mb;裁剪文本:“abcdefg0123我要喝咖啡”;裁剪后查看工具:FontCreator(试用了众多工具后发现是最好用和专业的工具)。

  使用 FontSubsetGUI 裁剪后的字体大小:182Kb,FontCreator 打开后如图:

图一

图二

  注意红色线框部分,Glyphs 总共定义了 28562 个,同原始字体一样,但是 Empty 了 28542 个,就是如上 图一 中所有空白方快,他们都是缺失字体外形定义,但有字体符号表,也就是说有这个字但没有定义和映射字体外形,处于不可用状态。下面 Characters 是当前拥有的字体定义和外形,一共19个,奇怪的是多出了一个“双引号”和一个“M”,而这一部分空的 Glphys 定义其实也是需要占空间的。

  下面看 FontPruner 的裁剪结果,环境和数据都相同,裁剪后文件大小6Kb,结果如下:

图三

图四

  如 图三 所示,我的裁剪文本是16个,字体文件内可用的 Characters 也是16个,显示的 Glyphs 定义是17个,其中包含一个 .notdef 系统预留的定义(图四),值为0;也就是其余所有没用到的 Glyphs 都被裁剪掉了,变得更加精简,所以文件就更小。总体结果如下:

图五

  以上两种导入到项目中使用都没有问题,但是 FontPruner 更加精简准确,所以我最终选择后者集成到项目中,做一个批处理能够自动根据设定的文本来处理所有使用的字体,也非常方便。

  但是以上两个工具都不能直接处理 otf 字体,均会报错。在处理前建议使用 FontCreator 将 otf 转换为 ttf 然后在处理,选择 “File->Export Font As...->Export as TrueType/OpenType Font...” 弹出的对话框中第一个选项 “Outline Format” 一定要选择 “TrueType”,否则即使最终在保存对话框选择 ttf 格式后导出了也无法使用。

  经过此步骤,就可以处理 otf 字体了(比如安卓默认的那一套思源字体等)。

  另外,原本 FontPruner 在处理临时路径时有一点点小 bug,我修复提交了 pr 且已经合并了;不过每次运行裁剪命令 Temp 目录都不会自动创建需要先手动创建好,这样使用有点不方便,我修改成自动创建,但是没有 pr,需要这个功能的请在这里下载:https://github.com/yaukeywang/FontPruner/tree/extend


  发现很多朋友在找 FontSubsetGUI 的下载地址,现在不是太好找了,这里给出下载地址:https://download.csdn.net/download/yaukeywang/10012038

关于字体剥离和精简工具 FontSubsetGUI 和 FontPruner 的比较。的更多相关文章

  1. Font Combiner – 自定义网页字体和图标生成工具

    Font Combiner 是一个功能丰富的 Web 字体生成工具和字体改进工具,提供字距调整.构造子集.各种提示选项和自定义字体字形组合.您可以生成您自己的自定义字体的格式和文件大小. 另外还有成千 ...

  2. CSS精简工具——除去多余的css样式

    有时候开发网页中在改版之后,存在很多无意义的样式,对于后期的管理和维护很不友好. 如果手动去删除,很可能会导致出现更混乱的问题. 最近找到一个Chrome插件,CSS remove and combi ...

  3. 代码精简工具lombok

    Lombok是一种通过注解的方式减少JAVA实体类中大量冗余代码,诸如get.set以及构造方法等的Java库 一.安装Lombok 步骤一 项目引入lombok插件 1 - 非maven依赖托管项目 ...

  4. 通过使用 NTLite 工具实现精简Windows系统

    NTLite 是一款专业于Windows平台的系统精简工具,NTLite主要面对系统封装人员使用,比如各大下载站及GHO镜像下载站,Windows系统二次精简封装打包使用,NTLite可以对系统进行极 ...

  5. TrueType字体

    TrueType字形描述技术和TTF文件 TrueType字体技术的研究分析与应用 看起来上面两篇都是翻译的文档. 看微软的原文介绍: TrueType fundamentals 其他文章: 获取Tr ...

  6. [转]TrueType(TTF)字体文件裁剪(支持简体中文,繁体中文TTF字体裁剪)

    原文入口: TTF字体文件裁剪(支持简体中文,繁体中文TTF字体裁剪) 对于TrueType(TTF)字体格式的介绍可以看: https://www.cnblogs.com/slysky/p/1131 ...

  7. Kali 使用ssh,安装vmware tools 和字体重叠

    Kali一直是我所爱,说说遇到的问题吧 第一个:字体重叠 gnome-tweak-tool --打开工具 第二个:ssh 修改sshd_config文件,命令为: vi /etc/ssh/sshd_c ...

  8. [原创] Win7全自动精简批处理_绝对原创,绝对给力_感谢无忧给了我一年的潜水

    2011htpcfans发表于 2012-5-5 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=210043 @echo 全自动/手动精简 ...

  9. [分享] 晒一晒我的Windows7_SP1封装母盘(多图,附部分工具),老鸟飘过~

    [分享] 晒一晒我的Windows7_SP1封装母盘(多图,附部分工具),老鸟飘过~ 大宝贝1 发表于 2012-8-9 18:01:57 https://www.itsk.com/thread-20 ...

随机推荐

  1. Linux高级编程--01.vi命令

    VI是Linux/Unix下标配的一个纯字符界面的文本编辑器.由于不支持鼠标功能,也没有图形界面,相关的操作都要通过键盘指令来完成,需要记忆大量命令.因此很多人不大喜欢它,但同时由于键盘的方式往往比鼠 ...

  2. 常用Path路径

    正三角形(左):<Path Data="M40,0 L0,30 40,60 z" Stretch="Uniform"/> 正三角形(上):<P ...

  3. WPF:ComboBox使用XmlDataProvider做级联

    程序功能: 使用ComboBox做级联,数据源为XML文件,适合小数据量呈现 程序代码: <Window x:Class="WpfApplication1.LayouTest" ...

  4. parseInt

    本文地址:http://www.cnblogs.com/veinyin/p/7647863.html 先来个简单的 console.log(parseFloat("8")); 嗯, ...

  5. 【译】Attacking XML with XML External Entity Injection (XXE)

    原文链接:Attacking XML with XML External Entity Injection (XXE) XXE:使用XML外部实体注入攻击XML 在XML中,有一种注入外部文件的方式. ...

  6. Date对象相关函数使用

    参考:http://www.w3school.com.cn/jsref/jsref_obj_date.asp

  7. Hbuilder连接第3方模拟器(夜神)

    http://www.bcty365.com/content-146-5148-1.html

  8. phpmywind目录结构

    phpmywind目录结构了解 admin/ 后台管理目录 admin/editor/ 后台编辑器存放目录 admin/inc/ 后台公用文件引用目录 admin/plugin/ 后台插件存放目录 a ...

  9. python中随机数生成

    1.random.random random.random()用于生成一个0到1的随机符小数: 0 <= n < 1.0 2.random.uniform random.uniform的函 ...

  10. python基础之内置异常对象

    前言 什么叫异常?简单来说就是程序运行发生了预计结果之外的情况从而导致程序无法正常运行.而python解释器将一些常见的异常情况在它发生时打包成一个异常对象,我们可以通过捕捉这些异常对象从而进行处理, ...