4

TTFグリフの幅を取得するために、フォントをに変換し、ファイルAFMの内容を解析して各グリフの幅を取得します。AFM

技術的には、バイナリファイルfontforgeからグリフ幅をキャプチャしてから、標準テンプレートに基づいてフォント ファイルを作成します。fontforge コマンドで、ファイルをグリフ幅のリストに直接変換することは可能でしょうか?!?TTFAFMAFMTTF

4

1 に答える 1

7

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

GUI からスクリプトを実行する

フォントを開きます。[ファイル] > [スクリプトの実行...] を選択します。入る:

Select('A')
Error(ToString(GlyphInfo('Width')))

[OK] をクリックします。

Fontforge エラー ウィンドウ

Python 拡張機能

まず、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 を使用しました。存在しないグリフにアクセスすると、エラーが発生します。

于 2014-01-07T10:42:13.787 に答える