FontForge によるビットマップフォントの埋め込み

公開日:平成25年11月17日
最終更新日:平成26年01月04日
更新情報

概要

UI のフォントを変えると劇的に見やすくなったりするもので、私も MacType とかを導入して綺麗なレンダリングを謳歌していたのですが、ノートパソコンを使うとなると、画面の大きさの割に解像度が高いために小さい文字では非常に見づらい。かといってあまり文字サイズを上げると高解像度の意味がなくなってしまいます。

で、いろいろ試した末にたどり着いたのが昔ながらのビットマップフォント。といっても、MS UIゴシックはなんか見飽きたせいか嫌、どっちかというと明朝が好きだがMS 明朝は UI として使うにはあまりに見辛い、それに対してさざなみフォントはビットマップが綺麗だなぁ……と。

じゃあ、さざなみフォントで決定! でも良かった気もしますが、ビットマップが用意されていない漢字はアウトラインフォントのほうで代用されるはずなので、その点さざなみフォントは不安だったのです。ならビットマップだけ抜き出してIPAフォントに抜き出したらいいのでは、という着想に至ったわけです。

ということで、全力で時代に逆行していくビットマップ埋め込みフォントの作成手順です。

道具と素材

FontForge

総合フォント作成ツール

非公式 Windows 移植版は unofficial fontforge-cygwin のページにあります。

ダウンロードして解凍したら、fontforge.bat を実行します。すると、中の image.7z の解凍作業が始まりますので結構時間がかかります。途中で ファイアウォールの警告が出ると思いますが、許可する必要はないようです。「フォントを開く」の画面が出たらそこで一回終了。二回目からは同様に fontforge.bat を実行することで、すぐに立ち上がります。

なお、このページでは現時点での最新版の「fontforge-cygwin_2013_10_07」のバージョンを使います。バージョンによってそれなりにダイアログの名前等が変わっていますが、なんとなく分かると思います。ただ、この最新版では縦書き用字送りの問題が解決されていたり(IPAフォント系はちょっと特殊なのかこれを弄ったフォントは縦書きできないようです)、日本語ファイル名の扱いが出来るようになっていたりするため、最新版の利用をお奨めします。

ttfname3

フォントのヘッダ(名称など)を変更するツール。

作者サイト(アーカイブ:ttfname3) は閉鎖。MONZEN.ORG/EXT TCPDF などに転載されています。

解凍して出てくる ttfname3.exe をどこか適当なところに作った作業フォルダにコピーしておきます。

IPA フォント

独立行政法人情報処理推進機構(IPA)が公開しているオープンソース日本語フリーフォント。ライセンスはIPAフォントライセンス。明朝/ゴシックの2書体と等幅、プロポーショナル(以上の2つがIPAフォント)、英字のみプロポーショナル(IPAexフォント)の種類があります。(なお、IPAフォントとIPAexフォントは幅以外にもひらがなの字形等が結構異なります)

今回は、組み合わせるビットマップフォントが等幅であるため、等幅のIPAフォントを使います。

IPAexフォント/IPAフォント からダウンロード。作業フォルダに ipam.ttf をコピーしておきます。

さざなみフォント

修正 BSD ライセンスで公開されているオープンソース日本語フォント。アウトラインは和田研フォント由来の漢字とオリジナルの仮名。ライセンス問題のあった東風フォントの代替として開発されたもので、東雲フォントをはじめとしたフリーのビットマップフォントが埋め込まれています。

おそらくは埋め込まれているビットマップフォント部分はパブリックドメインなのでしょうが、フォント全体としては修正 BSD ライセンスで配布されている以上、それも修正 BSD ライセンスと考えた方がよいと思います。修正 BSD ライセンスはIPAフォントライセンスと共存不能(だと思う)なため、このページの手順で作ったフォントは再配布できません。もちろんもとのビットマップフォントを探して来れば良いのですが、今回はとりあえず使えればよいということで、簡単のためにさざなみフォントから抜き出したものを用いることにします。

efont プロジェクト日本語トップページ - SourceForge.JP からダウンロード。中の sazanami-mincho.ttf を作業フォルダにコピーしておきます。

jiskan24

さざなみフォントには 21 ピクセルまでのビットマップが埋め込まれているのですが、折角なので(?)24 ピクセルまで埋め込むことにします。

jiskan24 はパブリックドメインの日本語フォント。もとは JIS にあるプリンタで使うフォントの規格表らしいです。

GNU Project Archives などから intlfonts-1.1.tar.gz をダウンロード。中の Japanese-X フォルダに入っている jiskan24.bdf と、24ピクセルの英数字ビットマップフォントである 12x24rk.bdf(こっちは修正 BSD ライセンス)を作業フォルダにコピーしておきます。

一、ビットマップフォントの抜き出し

FontForge を起動し、作業フォルダに準備した sazanami-mincho.ttf を開きます。ちなみに、このときに作業フォルダをブックマーク登録しておくと後々便利です。ブックマーク登録は「フォントを開く」ダイアログの左上にある栞のマークで出来ます。

途中で読み込むビットマップの大きさを訊ねられますが、「全て選択」して進みます。

ファイル > フォントを出力 を選びます。でてくるダイアログでアウトラインフォントの種類(左)を「アウトラインフォント無し」、ビットマップフォントの種類(右)を「BDF」にします。あとは何も弄らずに作業フォルダに生成します。

スクリーンショット1

ここでこのまま FontForge を終了させずに次へ進んでも良いのですが、Windows 版 FontForge はなにぶん不安定なため、念のためここで一度終了させることをお奨めします。

二、フォントの合成

もう一度 FontForge を実行したら、今度は ipam.ttf を開きます。

ファイル > 取り込み を選択します。出てきたダイアログで作業フォルダ内の BDF ファイルを全て選び取り込みます。

途中で「既にこのピクセルサイズ(24ドット)のビットマップフォントが含まれています」云々の警告がでますが、これは取り込む 24 ピクセルのビットマップフォントが 12x24rk.bdf と jiskan24.bdf の二つに分かれているためです。特に問題はないので、「OK」を選びます。

スクリーンショット2

これで一応フォントの合成自体はできたのですが、このまま出力するとまともなフォントにならないので、いくつかフォントの属性情報を弄ります。

エレメント > フォント情報 を選びます。ここで名前などを変えることも出来るのですが、日本語入力が出来ない以上まともに編集できないので、ここでは最低限の編集だけします。

左の選択肢から「OS/2」を選んで下さい。まず、「その他」タブの「OS/2バージョン」を 3 から 1 に変更して下さい。なんでかはよく分かりませんが、これで文字化けが起こらなくなります。

スクリーンショット3

次に同じく「OS/2」の「Panose」タブの「幅の比率」を「等幅」から「任意」に変更します。これで出力したフォントの文字幅が正常になります。どうも欧米的な基準では日本語の“等幅”フォントのような英数字と仮名漢字で幅が違うものは「等幅」と見なさないため、ここで「等幅」を選ぶとフォントの幅がおかしくなるようです。

スクリーンショット4

これでひとまずの設定は終わりなので、「OK」を押します。「ユニークフォントIDが多すぎます」という警告が出ますが、これは無視して「OK」を押します。

設定が終わったので、フォントファイルを出力します。ファイル > フォントの出力 を選んで下さい。今度は名前を IPAMincho から分かりやすいものに変えて下さい。アウトラインフォントの種類(左)を「TrueType」、ビットマップフォントの種類(右)を「TTF/OTF埋め込み」にします。オプションで「OpenTypeの仕様」がオンになっているか確認して下さい。

スクリーンショット5

「生成」を選ぶと「Validating...」の後に「問題が見つかりました」とか出てきますが、無視して「生成」を選びます。これで作業フォルダに合成したフォントファイルができているはずです。確認したら(決してこの状態でインストールしてはいけません)FontForge を終了します。

三、ヘッダの書き換え

出来上がった合成フォントの ttf ファイルを ttfname3.exe にドラッグアンドドロップ(つかんでポイ)します。フォントと同じ名前の xml ファイルが作業フォルダに生成されるはずです。この xml ファイルをテキストエディタで開き、必要な部分を修正して上書き保存、この xml ファイルとフォントファイルを一緒にもういちど ttfname3.exe にドラッグアンドドロップすることで「(フォント名)_mod.ttf」という名前のフォントファイルが作業フォルダに出来上がります。これで完成です。

修正する内容

おそらく見れば分かると思います。が、一応説明を書いておきます。

OpenType フォントの仕様は 漢字データベースプロジェクト - OpenType にまとめられていますが、この xml ファイルはその「name」テーブルに当たります。詳細はそのページからもリンクされている マイクロソフトのページ が参考になります。上の方には長々と言語コードみたいなのの一覧が載っていて、「Name IDs」以下が具体的な説明になります。

以下の表に、重要な部分のみまとめておきます。二重鉤括弧内は抄訳です。

番号 内容
1 フォントファミリ名。一般的なワープロソフト等でフォント選択画面に出てくるフォントの名前。
2 フォントサブファミリ名。ここには一般的には「Regular,Bold,Italic,Bold italic」の4種類のうちどれかを入れておくと良い、と思われます。理由は後述。
4 フォントの正式名称。ここの名前はフォントをプレビューするソフトで見られる外は、おそらくあまり使われません。(例えば Windows 標準のフォントプレビューソフト(フォントファイルを普通にダブルクリックすると出てくるやつ)ではタイトルバーがこの正式名称になる)よって、他のとかぶらないことだけ注意して好きなように決めればいいでしょう。
6 PostScript フォントとしての名前。よく分からないのですが、空白とか特殊な記号は使えないようなので、英数字とハイフンくらいを使ってつけておくのが吉でしょう。
16 優先フォントファミリ名。『歴史的理由で、フォントファミリ(訳注:ID が 1 のほう)は4つまでしかスタイルをもつことができません。しかし、デザイナーは 4 つより多くのフォントを一つのファミリにまとめたいと思うかもしれません。優先ファミリには 4 つより多くのフォントを含めることが出来ます。この ID は ID 1 の値と異なるときのみ有効になります』
17 優先フォントサブファミリ。優先フォントファミリの下にはいる分類です。「Thin,Light,book,Medium,DemiBold,Bold,ExtraBold,UltraBold」とか「W3,W5,W7,W9」とか。
21 WWS フォントファミリ名。WWSというのがよく分かりませんが、少なくとも日本語フォントにはあまり関係なさそうです。SmallCaps とか Condensed とかのバリエーションを作りたいときに必要みたいです。でも最近はそういうのも日本語フォントで増えていますから案外使われているのかもしれません。(あくまで商用フォントに限った話ですが)
22 WWS フォントサブファミリ名。

これらの情報を、xmlファイルで設定していきます。書式は、

<T n="(Platform ID),(Encoding ID),(Langage ID等),(Name ID)">値</T>
で、例えば
<T n="3,1,0411,4">IPA明朝</T>
ならば、「Windows、Unicode BMP、日本語、フォントの正式名称」が「IPA明朝」であることを表します。

余談:フォントのファミリについて

フォントのファミリ、とは何かということに関しては ウエイトとファミリー | フォント製品 | 株式会社モリサワ に分かりやすい説明があります。

しかし、これをコンピュータ上のソフトで扱うに当たっては問題があります。 [Font] M+フォントのWindowsにおける多ウェイトと縦書き - itouhiroメモ というサイトに例が挙がっています。

理想的なフォントの扱い方は Adobe 社の製品(Photoshop や Illustrator)でのものであります。が、一般的にフォントを用いて文字を打ち出すのはワードや一太郎のようなワープロソフトを使うことが多くなります。すると、問題が起きてきます。ワープロソフトで扱えるのは、一つのフォントファミリで、ただ選んだときのフォント(Regular)、文字に太字の属性をつけたときのフォント(Bold)、文字にイタリックの属性をつけたときのフォント(Italic)、文字に太字とイタリックの属性をつけたときのフォント(Bold Italic)の 4 種類だけだからです。確かにこれは便利です。一部を選んで一つボタンを押すだけで、自動的に強調表現のためのフォントが選ばれるのですから。いちいちフォントを選び直す必要がありません。また、昔はそんなに沢山のフォントを用意できない事情もあったのでしょう。ですが、この方式は多ウェイトのフォントファミリを排除しました。イタリックなど存在しない日本のような国では、結果として一つのフォントファミリに細字と太字の 2 つのフォントしか組み込むことが出来なくなったのです。

結果として、日本の普及向けフォントは一つのフォントファミリに一つのフォント、という形式を持つものが多くなったものと思います。Word を立ち上げてみて下さい。きっと「HGゴシックM」というフォントが入っているでしょう。それを太字にして、「HGゴシックE」というフォントと比べてみて下さい。違うフォントなのです。「HGゴシックM」は太字を指定しても「HGゴシックE」が使われることはなく、「HGゴシックM」が機械的に太らされた文字が使われます。一方、「Times New Roman」を太字にしたときには明らかに違う字形になります。「Times New Roman Regular」が「Times New Roman Bold」という別のフォントに切り替わったためです。「ID 1 で設定するフォントファミリ」はこのような意味を持つものです。

Name テーブルのフォントファミリを決めることは、このような機能に関わる、それなりに大きな意味を持ちます。

ここに、例えば「斎明朝」という明朝体のフォントファミリがあったとしましょう。細明朝(light)、中明朝(Medium)、中太明朝(DemiBold)、太明朝(Bold)、極太明朝(ExtraBold)のウエイトを備えた立派なフォントです。

これにどういう Name ID をふるとどう扱われるかを見ていきます。

なお、示してあるのは日本語のほうで、英語のほうの設定もローマ字できちんと記されているとします。英語のフォントサブファミリの指定は「Light」など、さっき括弧で示したものにします。

例一

正式名称(4) ファミリ(1) サブ(2) 優先ファミリ(16) 優先サブ(17)
斎細明朝体 斎明朝体 細字 なし なし
斎中明朝体 斎明朝体 中字 なし なし
斎中太明朝体 斎明朝体 中太 なし なし
斎太明朝体 斎明朝体 太字 なし なし
斎極太明朝体 斎明朝体 極太 なし なし

この設定は妥協を許さない姿勢ですね。これをやると Adobe 製品からはきちんと全ウェイト使用できるにしても、他の一般的なソフトでは、細字と太字(かどうかは分かりませんが、どれか2つ)しか使えなくなります。

例二

正式名称(4) ファミリ(1) サブ(2) 優先ファミリ(16) 優先サブ(17)
斎細明朝体 斎明朝L Regular なし なし
斎中明朝体 斎明朝M Regular なし なし
斎中太明朝体 斎明朝DB Regular なし なし
斎太明朝体 斎明朝B Regular なし なし
斎極太明朝体 斎明朝EB Regular なし なし

これが最も分かりやすい指定でしょうか。どんなソフトにも平等に、全てのウェイトが扱えます。しかし、フォントファミリという機能は一切機能していません。Adobe 製品のようなものにも、全てのウェイトが別のフォントとして表示され、Word や一太郎では太字を選んでもフォントが切り替わることはありません。

例三

正式名称(4) ファミリ(1) サブ(2) 優先ファミリ(16) 優先サブ(17)
斎細明朝体 斎明朝L Regular 斎明朝体 細字
斎中明朝体 斎明朝M Regular 斎明朝体 中字
斎中太明朝体 斎明朝DB Regular 斎明朝体 中太
斎太明朝体 斎明朝B Regular 斎明朝体 太字
斎極太明朝体 斎明朝EB Regular 斎明朝体 極太

例二のものに、優先ファミリを足したものです。これで Adobe 製品からは一つのフォントファミリとして扱われるようになります。ワープロソフトからも全てのフォントが扱えますが、相変わらず太字指定でのフォントの切り替えは行われません。小塚フォントなどはおそらくこの設定でしょう。

例四

正式名称(4) ファミリ(1) サブ(2) 優先ファミリ(16) 優先サブ(17)
斎細明朝体 斎明朝 Regular 斎明朝体 細字
斎中明朝体 斎中明朝 Regular 斎明朝体 中字
斎中太明朝体 斎中太明朝 Regular 斎明朝体 中太
斎太明朝体 斎明朝 Bold 斎明朝体 太字
斎極太明朝体 斎極太明朝 Regular 斎明朝体 極太

例三のものから、ワープロソフトでの太字機能を有効に使えるよう、細明朝と太明朝を「斎明朝」という一つのファミリにした例です。一つの妥協点といえそうなところですが、「インストールしたのに太明朝がない」といった混乱を生じやすくなるという難点があります。

例五

正式名称(4) ファミリ(1) サブ(2) 優先ファミリ(16) 優先サブ(17)
斎細明朝体 斎明朝 Regular 斎明朝体 細字
斎中明朝体 斎明朝 Italic 斎明朝体 中字
斎中太明朝体 斎明朝 Bold 斎明朝体 中太
斎太明朝体 斎明朝 Bold Italic 斎明朝体 太字
斎極太明朝体 斎極太明朝 Regular 斎明朝体 極太

なんとなく思いついた、どうせイタリックなんか使わないんだから……という設定。独自路線を行き過ぎると誰もついて行かなくなります。自分だけで使うなら、可。

(c) 平成25年-平成26年 神和電子
誤りの指摘や意見等、何かあればご連絡ください。

戻る