过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具  
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
opentype.js与PingFang DP2, 2015-06-25, 16:49:50 #1 | TOP
DP1时代的PingFang一共有4组CMap:

两组Win平台的编码,两组Unicode平台的编码。

PingFang DP2的CMap减少了一半,变成了这样:
Win平台被去掉了。

然后是opentype.js的代码:
注意其中的:We're only interested in a "platform 3" table. This is a Windows format

DP2版本缺少了Win平台CMap支持,所以opentype.js无法处理这一问题了!

如果我们对比两个字体,会发现他们文件体积只差一点点,明明少了一半CMap,怎么文件只减少了这么一点呢?

注意看DP1版本的CMap表具体定义:

这个图片在这里也有:

这两个表对应的偏移量都是0x24,具体位置都是在0x9CFF98,Win平台和Unicode平台其实共用了一张子表数据,但是在前面声明了两次。

所以DP2其实只是删掉了Win平台的支持声明,数据并没有少,这样一来,我们只要把opentype.js的代码修改一下,把
改成
就好了,对于用opentype.js处理PingFang DP2是完全没问题的。

上面这种共用子表数据的方式也被用在了ttc文件中,DP2的ttc中可以提取出24个字体,其中带点的字体和不带点的字体共用了大部分的表数据,比如.PingFang TC Regular和PingFang TC Regular的CMap表在ttc文件中都保存在0x3D686A4,而.PingFang TC Regular的name表在0xA820,PingFang TC Regular的name表在0x6950,依靠这种技术,DP2的ttc实现了字体数量多一倍,但是文件大小基本不变的有趣情况。

声望评价
  
  支持原创
上传的图像
文件类型: jpg Untitled.jpg (475.3 KB, 237 次查看)
此帖于 2015-06-25 17:20:46 被 BlackGear 编辑.
回复时引用此帖
以下 5 位极客对 BlackGear 此帖表示感谢:
Cartson (2015-06-25), DAOFU (2015-06-25), extc (2015-06-29), kmc (2015-06-26), Tim_Daning (2015-06-25)
Tim_Daning
Tim_Daning 的头像
极客II
级别:5 | 在线时长:198小时 | 升级还需:12小时级别:5 | 在线时长:198小时 | 升级还需:12小时级别:5 | 在线时长:198小时 | 升级还需:12小时级别:5 | 在线时长:198小时 | 升级还需:12小时级别:5 | 在线时长:198小时 | 升级还需:12小时
注册日期: 2015-04
帖子: 96
致谢: 66
2015-06-25, 18:30:30 #2 | TOP
好高端的样子,最后一段是不是要改一下?都是TC

好像多了 "."
此帖于 2015-06-25 20:54:11 被 Tim_Daning 编辑.
回复时引用此帖
BlackGear
BlackGear 的头像
极客II
级别:6 | 在线时长:211小时 | 升级还需:69小时
注册日期: 2013-06
帖子: 213
致谢: 329
2015-06-25, 23:20:18 #3 | TOP
这篇写得太技术向了,不过姑且还是留着当个存档。中文的关于otf、ttc格式的具体二进制数据的研究估计就这一篇吧。
有兴趣深入研究的可以继续查阅:
回复时引用此帖
过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具
发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

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

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