TTF字体文件裁剪(支持简体中文,繁体中文TTF字体裁剪)

Google开源的字体提取神器——sfntly

sfnttool,官网地址是:https://code.google.com/p/sfntly/

可用于编辑、创建和使用字体文件,主要针对OpenType,TrueType字体。
我在项目中,主要用于对汉字字体库的裁剪(ttf字库一般都很大10M以上),提取项目需要的一个汉字子集(subset)。

环境准备:
首先安装好Java环境,jdk 1.8.x以上,以及ant编译工具;
然后下载源码https://github.com/googlei18n/sfntly;
编译得到sfnttool.jar包。

裁剪字体库以及注意事项:
1. 使用SfntToolGUI.jar或sfnttool.jar 提取指定字符子集(SfntToolGUI.jar是基于sfnttool.jar加了GUI界面)

java -jar sfnttool.jar -s '需要提取的字体' 源字体库 导出的最终字体库
如:java -jar sfnttool.jar -s '01中国人' llk.ttf llk2.ttf

java -jar SfntToolGUI.jar
会有一个GUI界面可以操作(SfntToolGUI.jar是网上下载的),使用这个GUI工具点击确定生成完成后,需要关闭这个软件,新生成的ttf文件
才能预览或使用FontCreator打开,否则它会提示生成的ttf格式错误。

2. 需要注意的事项:
a. sfnttool 会根据当前系统使用的字符集编码(GBK or BIG5等)把输入的提取字符串转换成Unicode码,然后再去ttf查到到对应的字,进而提取。

我第一次使用也是遇到一个坑:我使用的是简体中文Windows系统(代码页936(chcp命令可查询当前系统使用的代码页)),输入GB2312编码的简体字符串,
且输入简体中文黑体ttf字体,确实可以裁剪到自己设定的子集ttf字体。
   由于最近项目用到繁体中文,需要对繁体中文ttf进行裁剪,很直观的想法就是输入BIG5编码的繁体字符串和输入一个繁体字库mingliu.ttf,
直接使用sfnttool提取子集,发现提取出来的并不是子集想要的。
   后来开始看sfnttool源代码,发现sfnttool会根据当前系统使用的字符集编码(我的系统使用GBK)把输入的提取字符串转换成Unicode码。也就是说我输入的是BIG5
编码的数据,而sfnttool把这些数据当做是GBK编码的数据来转成Unicode,这显然是有问题的。
   一个最简单的办法把电脑系统的代码页切换到950(BIG5),即切换到繁体版Windows,然后重新再使用这个工具。把BIG5编码的字符串输入到sfnttool
   另外一个办法就是修改下sfnttool源代码可配置当前输入的是什么编码的数据,以及正确的转成对应的Unicode。

b. 还有些细节
mingliu.ttc, 細黑體_0.ttc, ttc可以使用FontCreator转成mingliu_0.ttf, 細黑體_0.ttf

从 "mingliu_0.ttf" 提取字符子集,仅仅提取几个字符就有4M多大小(源ttf有26M);

而提取常用汉字3000个左右,使用 "細黑體_0.ttf" 提取子集仅仅2.5M, 使用 "mingliu_0.ttf" 提取的子集有8.5M 。(估计是跟字体库本身设置了什么有关)

 

另外网上还有一个TTF字体裁剪小工具“TTF字体库裁剪转换工具”:

经过测试有部分字体不支持,也不支持繁体字体裁剪。

 

工具下载地址:https://download.csdn.net/download/leichelle/10673940

 

参考资料:
【工具】在TTF字体中提取想要的文字,让字体文件变迷你
https://blog.csdn.net/ldpjay/article/details/46561031

大坑已填,留个纪念:裁剪ttf,让其大小更适用于移动设备与网页
https://blog.csdn.net/tianxiawuzhei/article/details/45720563

sfntly源代码
https://github.com/googlei18n/sfntly
https://github.com/rillig/sfntly

谷歌开源的字体提取工具 sfntly 的正确打开方式
https://www.skiy.net/201706064777.html

中文汉字 | ASCII | Unicode互相转换工具 - aTool在线工具
http://www.atool.org/chinese2unicode.php

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值