我正在尝试学习如何阅读开放式字体文件。
问题是我在阅读一些桌子时遇到了问题。我认为在http://www.microsoft.com/typography/otspec/otff.htm
提供的信息就足够了在尝试读取我在简单字形描述下找到的glyf表时
flags[n]
,其中n是标志数。
问题是我不知道从哪里获取标志数,并且没有读取表的标志数似乎不可能。
答案 0 :(得分:4)
好的,我找到了我的问题的答案,endPtsOfContours有坐标列表中每个轮廓的最后一个点的位置。
我使用TTFDUMP找出答案是什么。
答案 1 :(得分:1)
只是为了澄清如何计算标志的数量。标记n
的数量是endPtsOfContours
+ 1中的 last 元素。
答案 2 :(得分:1)
虽然这是一个老问题,但我觉得我需要在这个主题中添加更多信息,因为上面的答案可能会产生错误的结果。
一个字形中的点数等于最后一个endPtsOfContours
+ 1.通常这等于标志n
的数量,但不一定。标志中的位3(重复标志)用于指示相同的标志重复多次。如果设置了此标志,则标志数可以低于点数。
事实是,在阅读标志之前,您无法知道需要读取多少字节。你必须继续阅读旗帜,直到达到分数。这是一个小的Javascript snipplet,它显示了如何实现读取标志。
var pointCount; // This has to the set to the last endPtsOfContours + 1
var flags = []; // our internal array of flags
while (flags.length < pointCount) {
var flag = fontReader.readByte(); // flag is a single byte
flags.push(flag); // add flag
if (flag & 8) { // if bit 3 is set
var repeats = fontReader.readByte(); // next byte indicates repeats of the flag
for (; repeats > 0; repeats--) {
flags.push(flag); // add same flag again
}
}
}
我不能告诉你在真实世界的字体中是否或经常使用 Repeat 标志(可能是上面评论中提到的两种字体Bradley Hand ITC Regular和Rage Italic使用它),但是如果你想确保你读取正确数量的标志,你必须考虑到这一点。