3

オープンタイプのフォントファイルの読み方を学ぼうとしています。

問題は、いくつかのテーブルの読み取りに問題があることです。http://www.microsoft.com/typography/otspec/otff.htmにある情報で十分だと思いました

glyf テーブルを読み取ろうとすると、 simple glyph description flags[n]の下に見つかります。ここで、n はフラグの数です。

問題は、フラグの数をどこから取得するかわからないことです。フラグの数がないと、テーブルを読み取ることができないようです。

4

3 に答える 3

6

わかりました、質問に対する答えが見つかりました。 endPtsOfContours には、座標リスト内のすべての輪郭の最後の点の位置がありました。

TTFDUMP を使用して、答えが何であるかを調べました。

于 2012-04-06T20:15:59.623 に答える
2

これは古い質問ですが、上記の回答が間違った結果をもたらす可能性があるため、このトピックにさらに情報を追加する必要があると感じています.

グリフ内のポイントの数は、最後のendPtsOfContours+ 1 に等しくなります。通常、これは flags の数に等しくなりますnが、必ずしもそうとは限りません。フラグ (繰り返しフラグ)のビット 3 は、同じフラグが数回繰り返されることを示します。このフラグが設定されている場合、フラグの数はポイントの数よりも少なくなる可能性があります。

真実は、フラグを読み取る前に、読み取る必要があるバイト数を知ることができないということです。ポイント数に達するまでフラグを読み続ける必要があります。以下は、フラグの読み取りを実装する方法を示す小さな Javascript スニペットです。

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 の 2 つのフォントで使用されています)。フラグの数、そのビットを考慮に入れる必要があります。

于 2016-04-02T09:22:16.057 に答える