🔡

フォントファイルの中身は何が入ってるの?

2023/03/25に公開

フォントファイル(ttf)

GMT、matplotlibと描画ソフトに読み込ませるだけで日本語が表示できしまうttfの拡張子のフォントファイルって一体どんなデータなのか、それが気になったので調べてみました。

フォントの種類

まずは、フォントには大きく2つの種類があるようです。

  • ビットマップ
  • アウトライン

ビットマップフォントは、点の集合体で表現されるフォントで、昔のPCでは主流だったようです。格子点を用意しておいて、色を塗ることで文字を表現するイメージです。画像ファイルと言ってもいいかもしれません。そのため、拡大や縮小すると品質が変わってしまうことと、データ量が大きくなる傾向があることがデメリットです。

引用:ビットマップフォント -モリサワフォント-

一方で、現在主流となっているアウトラインフォントは、文字の輪郭を線(outline)として表現するフォントです。こちらは、輪郭の曲線を描くための情報を持つだけなので、拡大・縮小によらずきれいに表示でき、さらに最低限のデータでよいことがメリットです。

引用:アウトラインフォント -モリサワフォント-

アウトラインフォントの種類

次に、アウトラインフォントの中でもフォーマットがいくつかあり、その中でも代表的なものが以下の2つです。

  • TrueTypeフォント
  • OpenTypeフォント

TrueTypeフォントは、アップルとマイクロソフトが共同開発したフォーマットで、適用環境が多く安価のため、よく使われているそうです。アウトラインを2次ベジェ曲線で表現します。拡張子がttfとなっているのが、TrueTypeフォントです。

OpenTypeフォントは、アドビとマイクロソフトが共同開発したフォーマットだそうです。TrueTypeフォントよりも新しく、TrueTypeフォントとPostScriptフォントを統合して開発されました。TrueTypeフォントに比べて文字セットが多く、柔軟で拡張性が高いという特徴があります。これは、アウトラインを3次ベジェ曲線で表現することに起因しているようです。拡張子はotfです。

以下のサイトを参考にさせていただきました。
知ってますか?TrueTypeとOpenTypeの違い

GMT、matplotlibで読み込ませたのはttfファイルなので、TrueTypeフォントだった訳です。

フォントファイルの中身を見てみる

ここまでで、ttf形式がTrueTypeフォントのファイルであることがわかりました。さて、本題です。フォントファイルの中身がどうなっているか、です。

ttfファイルは、FontForgeというアプリケーションで開けました。

IPAexフォントを読み込ませてみると、こんな感じです↓

なるほど!それぞれの文字のアウトラインの情報を見ることができます。このFontForgeを使うと、アウトラインを編集をすることもできます。Aの文字を変えてみました。


編集ができるなら自分のオリジナルフォントができるってことですね。

描画ソフトにおける文字の描画

matplotlibの場合、font_managerというモジュールでttfファイルを読み込むことで文字が描画できるようになりました。

matplotlib.font_manager

A module for finding, managing, and using fonts across platforms.

This module provides a single FontManager instance, fontManager, that can be shared across backends and platforms. The findfont function returns the best TrueType (TTF) font file in the local or system font path that matches the specified FontProperties instance. The FontManager also handles Adobe Font Metrics (AFM) font files for use by the PostScript backend.

The design is based on the W3C Cascading Style Sheet, Level 1 (CSS1) font specification. Future versions may implement the Level 2 or 2.1 specifications.

ここまで調べてみて、matplotlibのような描画ソフトでttfファイルを読み込ませることで様々なフォントが描画できるのは、輪郭の情報を保持しているためで、それにしたがって海岸線を描くのと同様に描画できるからということがわかりました。つまり、描画をするための位置が違うだけで線を引いて、色を塗るということは同じことをしているということですね。このことから考えると、OpenTypeフォントに対応するアプリケーションが多くないのは、3次ペジェ曲線に対応していないためなのかな?と思ったりしました。

たくさんのフォントがある理由も、アウトラインの定義が多岐にわたるためですね。というかほぼ無限な気がします。オリジナルフォント作ってみたいなーと思いました。

Discussion