Fonts OpenType字体解析的乐趣和利润(有人明白这些愚蠢的表格吗?)

Fonts OpenType字体解析的乐趣和利润(有人明白这些愚蠢的表格吗?),fonts,core-text,truetype,opentype,Fonts,Core Text,Truetype,Opentype,所以,这主要是为了好玩,我四处摸索,试图在一些字体中找到我的方法,我有一些问题,如果有人做过这种事情,我真的很感谢你的帮助 cmap表 我正在测试的字体包含几个不同格式的cmap子表。我能读,但我不明白该用哪一个。选择最合适的子表的策略是什么?这有意义吗 glyf表格 这真让我头疼。我按实际情况去做。查看该页的第二个表格,我有'n'endptsofcourts',n'指令和'n'标志,但我不清楚我是否有与轮廓相同数量的标志(我知道我有多少轮廓)。然后,更糟的是……(有趣!)我有一个xCoords

所以,这主要是为了好玩,我四处摸索,试图在一些字体中找到我的方法,我有一些问题,如果有人做过这种事情,我真的很感谢你的帮助

cmap表

我正在测试的字体包含几个不同格式的cmap子表。我能读,但我不明白该用哪一个。选择最合适的子表的策略是什么?这有意义吗

glyf表格

这真让我头疼。我按实际情况去做。查看该页的第二个表格,我有'n'endptsofcourts',n'指令和'n'标志,但我不清楚我是否有与轮廓相同数量的标志(我知道我有多少轮廓)。然后,更糟的是……(有趣!)我有一个xCoords数组和一个yCoords数组。这些数组的长度似乎不确定,可能包含字节或短字节的数据,但我们不会告诉您是哪个


好的,我想这就是说明和标志的作用,但正如你可能知道的,我真的不知道如何处理它们。我需要TrueType解释器来访问坐标数据吗?

当然,您是正确的

标志位1:如果设置,对应的x坐标为1字节长。如果未设置,则为2个字节

标志位2:如果设置,则相应的y坐标为1字节长。如果未设置,则为2个字节


很久以前,我编写代码来遍历TrueType表——当然是用C语言编写的。我想您可以将结果与TTFDump(仍然可用)的输出进行比较。

当然,您是正确的

标志位1:如果设置,对应的x坐标为1字节长。如果未设置,则为2个字节

标志位2:如果设置,则相应的y坐标为1字节长。如果未设置,则为2个字节


很久以前,我编写代码来遍历TrueType表——当然是用C语言编写的。我想您可以将结果与TTFDump(仍然可用)的输出进行比较。

对于cmap编码,首先支持任何Unicode编码,平台id=0或平台id=3,编码id=10或1(上的平台id列表),支持cmap格式12(完整的Unicode空间)而不是4(仅基本的多语言平面)。此后,编码的相对优先级变得更加模糊{Wansung,BIG5,PRC,Shift JIS…},但也不那么重要,因为字体往往主要是日文、中文或韩文字体,而不是同时使用上述所有字体。到目前为止,格式4和12在0、2和6中最为常见。格式14可以在带有变体选择器的CJK字体中找到,作为格式4或12的补充,格式13可以找到一种特殊的“最后手段”字体(当没有好的选择支持给定文本时,在字体回退期间使用)。

对于cmap编码,首先支持任何Unicode编码,平台id=0或平台id=3,编码id=10或1(上的平台id列表),支持cmap格式12(完整Unicode空间)而不是4(仅基本多语言平面)。此后,编码的相对优先级变得更加模糊{Wansung,BIG5,PRC,Shift JIS…},但也不那么重要,因为字体往往主要是日文、中文或韩文字体,而不是同时使用上述所有字体。到目前为止,格式4和12在0、2和6中最为常见。格式14可以在带有变体选择器的CJK字体中找到,作为格式4或12的补充,格式13可以找到一种特殊的“最后手段”字体(当没有好的选择支持给定文本时,在字体回退期间使用)。

Python对于破解OTF非常有帮助,如果有可能的话。谢谢@bobince任何能做到这一点的代码都是一个很好的帮助。如果有可能的话,Python对攻击OTF非常有帮助。谢谢@bobince任何能做到这一点的代码都是一个很好的帮助谢谢@egrunin我还在努力想知道我可能有多少标志和坐标,但是有了TTFDump的输出将是一个很大的帮助。因此我在一些字体上使用了TTFDump,这使它变得非常清晰。谢谢@egrunin,我仍在努力查看我可能有多少标志和坐标,但是有了TTFDump的输出将是一个很大的帮助。因此,我在一些字体上使用了TTFDump,这使它变得非常清晰