过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具  
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
Font­Tools安装与使用简明指南, 2015-06-27, 15:00:31 #1 | TOP
本文原载于我的,作为一个系列作品,详细介绍用fonttools系列工具修改字体的各种特性的方法,本篇将介绍fonttools的安装配置与基本命令,下一篇起将介绍如何修改字体的类型、组成字族等基本问题。由于论坛的界面排版比较难以控制,所以排版丑陋还请见谅,希望拥有较好排版感受的人可以前往我的Blog观看,不过关于帖子内容的讨论还请在themex这边留言。

读完本文,您应该可以运行起ttx,并且能够试着导出字体的各种表来查看或修改。您可以用ttx试探性地修改字体的name表试试,关于这些表的修改教程,请期待下一篇文章。

相关说明
FontTools是一套以ttx为核心的工具集,用于处理与字体编辑有关的各种问题,程序用Python编写完成,代码开源,具有良好的跨平台性。FontTools由以下4个程序组成:

安装FontTools
FontTools原本是托管在上的项目,由于长期不再更新,于是Behdad在上建立了fork,并继续进行开发。建议选择从Github下载FontTools。

Windows用户需要首先安装Python 2.7,py2exe,从下载FontTools,解压缩,随后在Setup.py的倒数第二行,**classifiers的上方加入:

随后运行:

即可在dist目录下找到ttx.exe。

Windows用户也可以从直接下载我编译好的ttx.exe使用。

Mac、Linux用户从下载FontTools,解压缩,随后执行:

即可完成安装。

Mac用户也可以选择使用Homebrew直接完成安装:

字体基本知识
一个字体由数个表(table)构成,字体的信息储存在表中。一个最基本的字体文件一定会包含以下的表:

使用TrueType曲线绘制的字体会包含如下的表:

使用PostScript曲线绘制的字体会包含如下的表:

使用SVG曲线绘制的字体会包含如下的表:

使用Bitmap图形构成的字体会包含如下的表:

包含高级书法特性的字体会包含如下的表:

包含其他特性的字体会包含如下的表:

TTX使用说明

ttx是FontTools的核心工具,用于将字体转换为xml文件,或者将xml文件转换回字体。ttx所产生的xml文件的后缀名是ttx,可以用各种文档编辑器打开进行编辑。

最基本的用法是这样的:

这样就能将字体全部的表转换为ttx文件。或是将ttx文件转换回字体文件了。

ttx可以加入一些参数使用,常见的参数包括以下一些:

-l参数用于显示字体包含哪些表。

-t参数用于将字体中的name表转换为ttx文件。

-m参数用于将只包含部分表的ttx文件合并到原有的字体文件中。

声望评价
  
  鼓励原创
  
  支持原创
此帖于 2015-08-17 21:01:23 被 BlackGear 编辑.
回复时引用此帖
以下 13 位极客对 BlackGear 此帖表示感谢:
Cartson (2015-06-27), czyczk (2015-07-26), DAOFU (2015-07-10), Etherft (2015-08-16), kmc (2015-06-29), liqunsz (2015-06-28), Margaret (2015-06-27), muscake (2015-06-28), Naco (2015-06-29), Tim_Daning (2015-08-10), wuhuili2010 (2015-06-28), xinlong (2015-06-27), 沉香屑 (2015-06-28)
Cartson
Cartson 的头像
极客III
级别:9 | 在线时长:511小时 | 升级还需:39小时级别:9 | 在线时长:511小时 | 升级还需:39小时级别:9 | 在线时长:511小时 | 升级还需:39小时级别:9 | 在线时长:511小时 | 升级还需:39小时
注册日期: 2006-01
帖子: 332
致谢: 373
2015-06-27, 19:17:26 #2 | TOP
这样的技术好文,必须消灭零回复,期待下一篇。
回复时引用此帖
cjmyuhui6
cjmyuhui6 的头像
极客III
级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时
注册日期: 2010-10
帖子: 585
致谢: 224
2015-06-27, 19:30:41 #3 | TOP
命令行的用起来总觉得复杂,也不方便。
回复时引用此帖
infinte
infinte 的头像
极客II
级别:5 | 在线时长:207小时 | 升级还需:3小时级别:5 | 在线时长:207小时 | 升级还需:3小时级别:5 | 在线时长:207小时 | 升级还需:3小时级别:5 | 在线时长:207小时 | 升级还需:3小时级别:5 | 在线时长:207小时 | 升级还需:3小时
注册日期: 2011-02
帖子: 193
致谢: 369
2015-06-27, 19:52:39 #4 | TOP
可惜是 python
我在用 nodejs 写一个库,可以读写 SFNT,FORK 自百度那个字体编辑器的项目(完成度令人惊愕),地址:
回复时引用此帖
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
2015-06-27, 20:57:24 #5 | TOP
从你之前的作品就看得出来你是个nodejs控 =_= 而后能用js写的东西果然终究会被写成js。

nodejs下还有个opentype.js的完成度也很高的样子,不过兼容性等细节处理方面恐怕都难以和ttx相比,前两天还帮人研究了下opentype.js和PingFangDP2的兼容性问题,结果发现解析cmap表的代码居然只支持Windows Platform。

ttx项目开始得很早,这么长时间的修修补补基本上没有什么兼容性问题了,而最开始那时候好像还没流行nodejs呢。
回复时引用此帖
cjmyuhui6
cjmyuhui6 的头像
极客III
级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时级别:14 | 在线时长:1156小时 | 升级还需:44小时
注册日期: 2010-10
帖子: 585
致谢: 224
2015-06-27, 21:44:34 #6 | TOP
顺便问下,苹方10.11d9e1用FontCreator分解得到的字体能被Windows直接识别,苹方10.11d14e5用FontCreator分解得到的字体就不能被Windows直接识别,FontCreator编辑以后,能被识别,不过字体细节丢严重,Fontlab Studio编辑的话,还是不能被Windows识别,opentype.js与PingFang DP2那个帖子里面提及的参数,用FC和FLS应该都不能直接修改吧?
回复时引用此帖
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
2015-06-27, 22:14:02 #7 | TOP
那篇提到的核心,其实就是PingFang DP2把cmap里PlatformId=3的部分移除了,如果用ttx改,只要改两个数字就好,然后还有一些其他的表要处理下,字体就能用了,而且字体质量完全无损,这就是用ttx来改的好处。

FC和FLS基本上都会损伤字体质量,而ttx不会。
此帖于 2015-06-27 22:22:36 被 BlackGear 编辑.
回复时引用此帖
以下极客对 BlackGear 此帖表示感谢:
Hiropaul (2017-02-21)
yimingtx
极客II
级别:3 | 在线时长:92小时 | 升级还需:8小时级别:3 | 在线时长:92小时 | 升级还需:8小时级别:3 | 在线时长:92小时 | 升级还需:8小时
注册日期: 2014-07
来自: 江苏省无锡市
帖子: 174
致谢: 6
2015-06-27, 22:37:58 #8 | TOP
感谢楼主分享实用教程!
回复时引用此帖
Margaret 美女
Margaret 的头像
惟精惟一 允执厥中
级别:18 | 在线时长:1767小时 | 升级还需:133小时级别:18 | 在线时长:1767小时 | 升级还需:133小时级别:18 | 在线时长:1767小时 | 升级还需:133小时
注册日期: 2010-10
来自: Black Hole
帖子: 1,655
致谢: 2,352
2015-06-27, 22:39:22 #9 | TOP
ttx的命令行操作并不困难,难就难在读懂输出的xml…
里面一大堆名词,不知道控制的是哪一个属性。只好股沟一下大海捞针。

期待pyft****系列教程!
 
杂物试衣资源
回复时引用此帖
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
2015-06-29, 14:57:03 #10 | TOP
所以这个系列打算尽可能把几个常用表的修改功能讲清楚,name表我很清楚,OS/2表我知道一部分,head表我知道得少,但是还是能讲多少讲多少吧。

这方面的技巧真的太零散了,教程基本没有,但是如果不把经验写成文传下来,其他人想要学习的话太困难了。

pyft系列其实没啥好讲,

pyftmerge A.otf B.otf就能解决这个帖子里楼主提出的问题

pyftsubset A.otf ABCDE就能生成只包含ABCDE的字体子集

pyftinspector A.otf就能查看A字体的二进制信息

---------- 帖子于 14:57:03 更新 ---------- 之前内容发布于 00:56:23 ----------

顺便一提,把各种属性的相关修改总结一遍这个想法其实是2013年底就有的想法,当时只是在这里 粗略一提,

当时还和你讨论了下ttfname3和ttx之间的问题呢……现在回过头去已经过了一两年了呢。
回复时引用此帖
以下 4 位极客对 BlackGear 此帖表示感谢:
Hiropaul (2017-12-15), kmc (2015-06-29), liqunsz (2015-06-29), Margaret (2015-06-28)
过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具
发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码

论坛跳转:
Copyright ©2003-2014, THEMEX.NET [湘ICP备14009485号]
Powered by vBulletin® v3.8.3 ©Jelsoft Enterprises Ltd.
所有时间均为北京时间。现在的时间是 21:16:00