しろもじメモランダム

文字についてあれこれと。

てきとうに書いて作ったフォントができるまで(6)[終]

てきとうに書いて作ったフォントについて、(1), (2), (3), (4), (5) の続き。

FontForge でフォント生成

これで準備は整ったので、FontForge を使って SVG からフォントを生成する。FontForgeスクリプトから操作することができるので、それを使った。

スクリプトはこんな感じ。流用する場合には、フォント情報などを適宜書き換えて。

#!/usr/bin/fontforge -script

_fontname = "out/tktf.otf"
_importfile = "out/svg/u*.svg"

New()

# .notdef作成
Select(0x0000)
SetWidth(1000)
SetGlyphName(".notdef")

# エンコードにUnicodeを指定
Reencode("unicode")

# SVGをすべてインポート
Print("import...")
Import(_importfile, 0)
 
# WAVE DASH -> FULLWIDTH TILDE
Select(0u301c); Copy(); Select(0uff5e); Paste()
# CENT SIGN -> FULLWIDTH CENT SIGN
Select(0u00a2); Copy(); Select(0uffe0); Paste() 
# POUND SIGN -> FULLWIDTH POUND SIGN
Select(0u00a3); Copy(); Select(0uffe1); Paste()

# 自動ヒントづけOFF
SelectAll()
DontAutoHint()

# 整数値に丸める
RoundToInt()

# 半角文字の文字幅設定
Select(0u0020, 0u007e, 0uff61, 0uff9f)
SetWidth(500)

# 全角スペース作成
Select(0u3000)
SetWidth(1000)

# フォント情報設定
SetFontNames("TekitouniKaiteTsukuttaFont",\
             "Tekitouni Kaite Tsukutta Font",\
             "Tekitouni Kaite Tsukutta Font",\
             "Medium",\
             "Created by mashabow (http://shiromoji.net), with FontForge 2.0 (http://fontforge.sf.net)",\
             "1.00") 
SetTTFName(0x411, 1, "てきとうに書いて作ったフォント")
SetTTFName(0x411, 4, "てきとうに書いて作ったフォント")

# SFD書き出し
Save("out/temp/" + _fontname:t:r + ".sfd")
Print("saved: out/temp/" + _fontname:t:r + ".sfd")

# OTF生成
Generate(_fontname, "", 0x94)
Print("generated: "+ _fontname)

Close()

Quit()

ざっと見てみたところ、環境によって シフトJISUnicode の対応が一部違うようなので、そのような部分は同じ字形をコピーしている(〜/~、¢/¢、£/£)。また「フォント情報設定」にある SetTTFName() は、日本語でのファミリー・フルネームを設定している。SFD の書き出しはあまり必要ないが、一応つけておいた。

フォントの生成は、あっけないほどにすぐ終わる。上のスクリプトで実際にできた OTF のファイルは、103KB。点の座標を整数値に丸める RoundToInt() を使わない場合は、380KBになった。RoundToInt() にはほとんど時間もかからないので、採用。一方、無駄な点を取り除く Simplify() という関数もあるが、これはかなり重たい処理であるにもかかわらず、97.8KBにしかならなかった。ということで、不採用。

ちなみに、パスが含まれていない空白の SVG を読み込もうとすると 申し訳ありませんがこのファイルは複雑すぎて解釈できません(または壊れています) というエラーが出るが、フォント自体はちゃんと生成できる。

Potrace は FontForge から呼び出して使うこともできる。ただ、後から個々の字形を修正しようと思った場合に、SVG にしてあれば Inkscape など他のアプリケーションからでもすぐ扱うことができる。ということで、今回はこのような流れにした。

実際に使う

Ubuntu でフォントを使うには、まずフォントのファイルを ~/.fonts*1に入れる。全ユーザから使いたい場合は、/usr/share/fonts 以下に(要管理者権限)。その後、端末から

$ fc-cache -fv [フォントファイルを入れたディレクトリ]

としてフォントキャッシュを更新する。動画では -fv の後のディレクトリを指定していなかったが、そのような場合はフォントディレクトリをすべてチェックするので時間がかかる。フォントキャッシュの更新が終われば、他のフォントと同様に各アプリケーションから使えるようになっている。

また、Windows XP, Windows Vista, Mac OS X など、他の OS でも使うことができる(サンプル)。

というわけで、これで一通りできあがり。

*1:隠しディレクトリになっている。存在しない場合は、自分で作成すれば良い。