TTF - 阅读字形数据

时间:2017-10-31 14:35:33

标签: true-type-fonts

我正在努力在我的程序中实现真正的字体,但是将一些数据解释为字形表中的正确值存在很大的问题。

我正在使用Windows规范(链接:https://www.microsoft.com/typography/otspec/glyf.html) 另外还有苹果规格(链接: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html

为了检查我正在使用此页面的值: (链接:https://opentype.js.org/glyph-inspector.html

我使用的字体是raleway字体 - 中等
(链接:https://www.fontsquirrel.com/fonts/raleway

到目前为止,我可以看到numberOfContours,xMin,yMin,xMax,yMax和endpContour [0]的值是正确的。我不知道instructionLength [0]。

下面的示例不是通用代码,而是我需要正确解释的条目的字节码。
问题在于我无法理解下一个要填充的值。 (instructionLength,flags ...)
下面表示的字符是急性的。它由4分组成。

仅有一个轮廓的4个点的预期结果是:
p0:x = 106,y = 609
p1:x = 48,y = 629
p2:x = 106,y = 730
p3:x = 194,y = 730
附加信息:
advanceWidth:232
leftSideBearing:48
(来源:https://opentype.js.org/glyph-inspector.html

总之,arcute包含50个字节。

1.      0   | -> 0000 0000 | -> 1       | -> 0000 0000 0000 0001 | (ind. 0) <- numberOfContours
2.      1   | -> 0000 0001 | ^
3.      0   | -> 0000 0000 | -> 48      | -> 0000 0000 0011 0000 | (ind. 1) <- xMin
4.      48  | -> 0011 0000 | ^
5.      2   | -> 0000 0010 | -> 609     | -> 0000 0010 0110 0001 | (ind. 2) <- yMin
6.      97  | -> 0110 0001 | ^
7.      0   | -> 0000 0000 | -> 609     | -> 0000 0000 1100 0010 | (ind. 3) <- xMax
8.      194 | -> 1100 0010 | ^
9.      2   | -> 0000 0010 | -> 730     | -> 0000 0010 1101 1010 | (ind. 4) <- yMax
10.     218 | -> 1101 1010 | ^
11.     0   | -> 0000 0000 | -> 3   | -> 0000 0000 0000 0011 | (ind. 5) <- endpContour[0]
12.     3   | -> 0000 0011 | ^
13.     0   | -> 0000 0000 | -> 23  | -> 0000 0000 0001 0111 | (ind. 6) <- instructionLength[0]
14.     23  | -> 0001 0111
15.     177 | -> 1011 0001 
16.     6   | -> 0000 0110 
17.     100 | -> 0110 0100
18.     68  | -> 0100 0100
19.     64  | -> 0100 0000
20.     12  | -> 0000 1100
21.     1   | -> 0000 0001
22.     1   | -> 0000 0001
23.     0   | -> 0000 0000
24.     71  | -> 0100 0111
25.     0   | -> 0000 0000
26.     0   | -> 0000 0000
27.     0   | -> 0000 0000
28.     116 | -> 0111 0100
29.     18  | -> 0001 0010
30.     1   | -> 0000 0001
31.     9   | -> 0000 1001
32.     21  | -> 0001 0101
33.     43  | -> 0010 1011
34.     177 | -> 1011 0001
35.     6   | -> 0000 0110
36.     0   | -> 0000 0000
37.     68  | -> 0100 0100
38.     19  | -> 0001 0011
39.     39  | -> 0010 0111
40.     55  | -> 0011 0111
41.     51  | -> 0011 0011
42.     106 | -> 0110 1010
43.     58  | -> 0011 1010
44.     58  | -> 0011 1010
45.     88  | -> 0101 1000
46.     2   | -> 0000 0010
47.     97  | -> 0110 0001
48.     20  | -> 0001 0100
49.     101 | -> 0110 0101 
50.     0   | -> 0000 0000 

我需要告诉你如何获取instructionLegths和它的值是正确的以及它用于什么(无法​​在文档中找到相关内容。)上面提到的标志和点。

提前谢谢!

0 个答案:

没有答案