先来总结
软件 | ttf | otf | tips |
---|---|---|---|
fonttools-pyftsubset | ✔ | ✔ | Python pip安装即可 源代码:Github |
sfntly-sfnttool.jar-(Shell版本-java) | ✔ | ❌ | Google开源 源代码:Github |
sfntly-sfnttool.jar-FontZip(Gui版本-java)[ttf推荐] | ✔ | ❌ | GUI版本 源代码:Github |
sfntly-sfnttool.jar-FontPruner(未测试) | ✔ | ❌ | 西山居开源的内部工具 更多看这里->关于字体剥离和精简工具 FontSubsetGUI 和 FontPruner 的比较。 |
请直接参考下面教程使用 fonttools-pyftsubset 就完事了
sfntly-sfnttool.jar shell 若不懂配置环境将会花费你很多的时间。
我就是因为不是很懂Java和ant的配置,打包研究了半小时…丢人行为
fonttools-pyftsubset
因为sfntly- sfnttool不支持,于是我再搜索引擎搜“sfntly otf” 找到个close的issue…发现了
注意
使用过程中我遇到了otf转换会有报错情况(尚未解决)
$ ~ pyftsubset 1.otf --text-file=1.txt --output-file=2.otf
Traceback (most recent call last):
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\Scripts\pyftsubset.exe\__main__.py", line 7, in
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\misc\loggingTools.py", line 372, in wrapper
return func(*args, **kwds)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\__init__.py", line 3104, in main
subsetter.subset(font)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\__init__.py", line 2907, in subset
self._prune_post_subset(font)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\__init__.py", line 2890, in _prune_post_subset
retain = table.prune_post_subset(font, self.options)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\cff.py", line 471, in prune_post_subset
self.remove_unused_subroutines()
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\cff.py", line 620, in remove_unused_subroutines
subr.subset_subroutines (local_subrs, font.GlobalSubrs)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python39\lib\site-packages\fontTools\subset\cff.py", line 165, in subset_subroutines
p[i-1] = subrs._used.index(p[i-1] + subrs._old_bias) - subrs._new_bias
AttributeError: 'list' object has no attribute '_used'
但是使用otf转换后的ttf正常!
使用教程
# 使用环境:Python ( 工具4.x版本需要 Python 3.6+)
pip install fonttools
pyftsubset 1.otf --text-file=1.txt --output-file=2.otf
# 1.otf 要被裁剪精简的字体文件
# --text-file=1.txt裁剪的字体中保留1.txt这个文档中的所有字符
# --output-file= 将裁剪后的字体保存为2.otf
sfntly-sfnttool
OTF转TTF
因为不支持otf,于是我搜了一些方法,比如利用软件转换otf为ttf:
在线转换、FontCreator(收费)、fontforge(开源)
直接转换会错误,会无法识别
主要是轮廓线制式不一样:ttf 需要设置 TrueType(TTF是二次元曲线 / OTF是三次元曲线-CFF PostScript)
字体转换资料收集:
这样转换出来系统就能识别了,但是使用 sfnttool 的工具还是转换失败。
Shell官方版本(不推荐)
自行打包环境:java JDK + ant(JRE的环境变量要为JDK路径,不是JRE(Windows10环境))
参考教程:https://www.cnblogs.com/slysky/p/11209662.html
如果没有编程技术请勿自行打包,可能你会难在配置环境
顺便提一下:
CSDN很多重复类似的文章,然后 jar 附件下载全要积分。开源软件这样搞太恶心了…
GUI版本(推荐使用)
最后找到了Gui版本(已经打包好了)….
源代码和下载:Github