TTF
グリフの幅を取得するために、フォントをに変換し、ファイルAFM
の内容を解析して各グリフの幅を取得します。AFM
技術的には、バイナリファイルfontforge
からグリフ幅をキャプチャしてから、標準テンプレートに基づいてフォント ファイルを作成します。fontforge コマンドで、ファイルをグリフ幅のリストに直接変換することは可能でしょうか?!?TTF
AFM
AFM
TTF
FontForge には 2 つのインタープリターが含まれているため、スクリプトを記述してフォントを変更できます。これらのインタープリターの 1 つは Python (推奨) で、もう 1 つはレガシー言語です。Fontforge には Python が組み込まれていますが、Fontforge を Python 拡張機能としてビルドすることもできます。
では、何を使用しますか: Pythonまたはレガシー言語? どのインターフェイス:コマンド ライン、GUI、またはPython 拡張機能?
スクリプトは、ファイル内にある場合もあれば、引数として提示された単なる文字列の場合もあります。-lang 引数で使用するインタープリターを指定する必要がある場合があります。コマンド ライン引数を参照してください。
$ fontforge -script scriptfile.pe {arguments}
$ fontforge -c "script-string" {arguments}
$ fontforge -lang={ff|py} -c "script-string"
ドキュメントをスキャンした後、scriptfile.pe を書きました。
Open($1, 1)
Select($2)
Print( GlyphInfo('Width') )
よりも:
$ fontforge -script scriptfile.pe YourFont.ttf A
... # Some output truncated.
1298
フォントを開きます。[ファイル] > [スクリプトの実行...] を選択します。入る:
Select('A')
Error(ToString(GlyphInfo('Width')))
[OK] をクリックします。
まず、1 つのグリフの幅 ( docs ):
>>> import fontforge
>>> f = fontforge.open("YourFont.ttf")
>>> f['A'].width
1298
ここにあなたの質問に対する答えがあります。各グリフのエンコーディング インデックス、名前、および幅:
>>> for i in f.selection.all():
... try:
... name, width = f[i].glyphname, f[i].width
... print i, name, width
... except:
... pass
...
0 uni0009 0
2 uni0002 0
13 nonmarkingreturn 510
# ... Truncated ...
65707 germandbls.smcp 2266
>>>
注: どういうf.selection.all()
わけか非グリフも選択するため、try/except を使用しました。存在しないグリフにアクセスすると、エラーが発生します。