1
bitinn OP 补充下,问题肯定在L33-L35,但我看了半天TrueType Collection spec也没搞清楚苹果是怎么给ttc加入font name的。换而言之,ttc允许你给一个ttf字体多个名字,例如萍方就附带了.PingFang和PingFang共24个字体名,但实际上只有12个字体文件……
|
2
Daniel65536 2015-06-24 18:01:30 +08:00
其实脚本的计算没有出错。
你可以参考: https://www.microsoft.com/typography/otspec/otff.htm 简单来说,这个ttc确实定义了24个otf,也确实包含24个otf,相对应的每两个otf的表的offest与length是相同的,除了这些字体的name表。 两个字体在ttc中共用了大部分文件内容,但是分别使用了两个name表,字体名称就是在name表中定义的。 |
3
janxin 2015-06-24 18:11:47 +08:00
字体的zip下载了两次都是压缩包错误,是我的网络问题还是压缩问题...
|
4
Daniel65536 2015-06-24 18:15:55 +08:00
唔,我又具体看了下每个表的情况,好像字体只是共用了BASE表(offset相同),不过其他除了name表内容确实是相同的。
修正下上面的说法: 这个ttc包含了24个otf,也确实有24个otf,带点不带点的字体在ttc中是两个字体,带点的字体会在字体册中隐藏,所以你只看到了12个字体,但是文件中确实是有24个字体的,虽然每组字体中差的也就是name表。 |
5
bitinn OP @Daniel65536 我后来观察到了这个情况,但有几点不能理解:
1. 含有24个字体的DP2版只比含有12个字体的DP1版多了几百K,TTC用了什么压缩方式吗?否则它是怎么做到的? 2. 用这个脚本解DP1和DP2的字体,前者的表是正常的,后者似乎丢失了一些数据,导致我无法用opentype.js打开。具体错误见我发的文章里的更新。 |
7
Daniel65536 2015-06-24 19:47:26 +08:00 via iPad
@bitinn ttc没有带压缩,不过ttc可以把不同字体的表指向相同的offset来节约空间。比如带点不带点的字体的字形是一样的,所以对应的表可以只在ttc后面放一份,然后在前面Offset Table里写上相同的offset。
至于脚本,有可能是因为这种offset相同导致出现奇怪的问题。 至于是不是真是这样,我得先下载DP1的ttc看看到底是不是,不过现在比较忙,估计明天下午才能搞定,到时候大概会把研究结果丢到themex顺便往mai3上的前端群组丢一份吧,v2ex这边传图实在是不方便啊。 |
8
ratazzi 2015-06-24 20:10:52 +08:00
为什么不用 fontforge 搞定
|
9
Daniel65536 2015-06-25 01:31:00 +08:00
@bitinn opentype.js还没有具体研究,不过fonttools对于DP2的处理是没有问题的,恐怕这和opentype.js中可能存在的bug有关。
如果要具体研究字体还是推荐用fonttools里的pyftinspect或是ttx比较妥当。 |
10
bitinn OP @Daniel65536 哦,你的意思是ttc2ttf没bug,解出来的ttf字体没错?这超出了我的预期(虽然我最初是准备上个issue给他们)。
|
11
bitinn OP 开了issue,静待官方回复 https://github.com/nodebox/opentype.js/issues/139
或许我该去用fonttools,之前用opentype.js也是因为它比较多web interface,方便啊(不用上传文件,在客户端用JS分析本地文字)。 |
12
Daniel65536 2015-06-25 17:14:53 +08:00
研究结果见: http://bbs.themex.net/showthread.php?t=16903866
fonttools就是个完美的本地工具,pyftinspect自带GTK界面,其他的工具都是命令行程序。 另外Mac可以用 brew install https://raw.githubusercontent.com/blackgear/homebrew-formula/master/fonttools.rb 来装fonttools |
13
bitinn OP |