Feed on
Posts
Comments

前回は、FontForge に読む込むためのファイル形式の話と、実際に読む込むための操作手順について書きました。

しかしグリフの数というものは、もとより 1 つや 2 つで済むものではありません。日本語フォントともなれば、ずいぶん多くのグリフを扱わねばならず、それをいちいちマウスで手順どおりやるとなると、FontForge に読み込むだけでも手間になります。

このような大量の定型処理に便利なのが、プログラムによる自動処理です。FontForge には、スクリプトで操作できるようなインターフェイスが用意されていますから、もしこれを使ったらどうなるか、というのを今回書いてみたいとおもいます。

FontForge のスクリプトは、C 言語とシェルスクリプトの中間みたいな独自言語と、Python が用意されているようです。私は個人的に Python が多少使えますので、Python でやってみましょう。

まず、既存のフォントファイルもしくは FontForge の sfd ファイルを Python で開く方法です。これは、次のように書きます。

import fontforge
f = fontforge.open('フォントあるいは sfd ファイルのパス')

これで OK です。このように読み込めば、各グリフ(のスロット)には、

g = f[グリフのコード番号]

でアクセスできます。アクセスしたグリフに SVG ファイルを読み込む(インポートする)には、

g.importOutlines('SVG ファイルのパス')

という具合にすればよいのです。最後に保存するには、

f.save('保存先のパス')

で、sfd ファイルとして保存ができます。やり方がわかってしまえば、とても簡単そうですね?

具体的なスクリプトを考えてみましょう。たとえば、グリフをデザインした SVG ファイルを、uniXXXX.svg という形式のファイル名で、ひとつのフォルダにまとめて保存していたとします(XXXX の部分はグリフの16 進数表記のコード番号です)。この場合、次のようなスクリプトを書けば、すべて自動でグリフを読み込ませることができることになるでしょう(試してみたかぎりでは、たぶんこれで大丈夫…)。

#!/usr/bin/env python

import fontforge
import os

font_path = '読み込みたいフォントファイルあるいは sfd ファイルのパス'
output_path = '保存先にしたい sfd ファイルのパス'
svg_dir_path = 'SVG ファイルを格納しているディレクトリのパス'

font = fontforge.open(font_path)

files = os.listdir(svg_dir_path)
for n in files:
  if n.endswith('.svg'):
    cd = int(n[3:-4], 16)
    if not (cd in font):
      font.createChar(cd)
    else:
      font[cd].clear()
    font[cd].importOutlines('%s/%s' %(svg_dir_path, n))

font.save(output_path)

なお、FontForge の Python インターフェイスについては、こちらのサイトに資料が用意されていますので、参照してみてください。それから、もっといい便利なスクリプトが書けるよ、などの情報がありましたら、ぜひお知らせくださったら嬉しいです。

2 Responses to “ドローソフトでデザインしたグリフの読み込み方 (2)”

  1. 慈雨 より:

    はじめまして。慈雨と申します。
    御サイトの記事を参考にしてフォントを作成しています。
    貴重な情報をありがとうございます。
    上記のpythonスクリプトを実行したところ、
    エラーが出て実行できません。
    import fontforge
    ImportError: No module named fontforge

    端末で実行
    Fontforgeのウィンドウから実行
    ubuntuとcygwinで実行しましたが、うまくいきませんでした。
    もしお時間ございましたら解決法をご伝授いただけませんでしょうか?
    よろしくお願いします。
    (因みに私のlinux使用歴はまだ一日です。
    windowsのコマンドプロンプトは少しわかります。)

    • mshio より:

      この記事を書いたころはちがったと思うのですが、
      最近のパッケージでは FontForge の本体と
      その Python バインディングが別々のパッケージになっていることが多いようです。
      「python-fontforge」というパッケージがあると思いますので、
      それをインストールしてみてください。

      $ sudo apt-get install python-fontforge

Leave a Reply