17
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

OpenType フォントのプロポーショナルメトリクス情報をぶっこぬく

Saqooshaさんの「OpenType フォントのカーニング情報をぶっこぬく」という記事の最後に

palt があるならそれもちゃんと処理しないといけない。OTF 複雑すぎ、、、

と書いてあって。Saqooshaさんの記事を参考に、paltと、それに関連するhaltテーブルの情報をとってみたログです。

やりたいこと

Open Typeフォントのフォーマットからプロポーショナルメトリクス情報をとりだしたかったです。もっと直接的にいうと、paltとhaltのデータをぶっこぬきたかったです。

paltとは? haltとは?

両方とも、fontのGlyphの位置を調整するためのデータが入ったテーブルです。microsoft のページに書いてあるpaltとhaltの説明で重要そうな部分を抜いて以下にかきます。

palt

  • Proportional Alternate Widths。Glyphの全角幅の代わりのメトリクスとして適用する。
  • kernが有効なとき、paltが存在するなら、paltはマストで有効にするべき。
  • この機能は他の全てのglyph幅にまつわる機能と相互に排他的。

halt

  • Alternate Half Widths。カッコや句読点や記号などの半角幅のGlyphのメトリクスを全角幅にするために適用する。
  • haltはdefaultはoff。
  • カッコや句読点や記号などのときに限り有効にする
  • haltがONのときはpaltやkernがOFF。逆に、kernやpaltがONの時にはhaltがOFF。

Open Typeからどうやってpalt、haltにまつわる情報をとってくる?

microsoftの以下2つの英文がひたすら書かれてるページを、じーっと読んでるとなんとなく理解できました。

Saqooshaさんのページにのってるlibotfという OTF ファイルをパースできるツールを使って、以下の手順でOTFをdumpして、そのdump結果にそってみると、理解しやすかったです。

以下、libotfのotfdumpの使い方メモです。

  • このページからThe libotf library (0.9.13)をダウンロード
  • ダウンロードしたディレクトリへいき、いつもの./configure make make install する。
  • cd exampleすると、otfdumpができてる
  • ./otfdump {任意のOTFフォントファイルへのパス} > output.txt で、output.txtにdumpされた情報が出力される

このdumpしたデータに microsoft のページに書いてある paltテーブル ぶっこぬき方を、ざっくり書き込んでみると、以下のような感じです。

Screen_Shot_2016-07-11_at_13_02_54_2.png

LookUpテーブルのSubtableの中のValueというところに、paltやhaltの情報が入ってるのですが、その数字が何を意味するかというと、ValueFormatに応じて以下のような値が入っています。

  • ValueFormatが0x0001のときは、glyphのleft-side bearingを調整するために、XPlacementになる
  • ValueFormatが0x0004のときは、別のglyphとのadvanceを調整するためにXAdvanceになる
  • ValueFormatが0x0005のときは、XPlacementとXAdvanceになる

Advance、Bearingは、GlyphのPositionまわりの用語で、その用語についてはfreetypeのこのページがまとまっていました。

metrics.png

metrics2.png

これでpalt、haltの情報はとりだして、Glyphの各positionデータに反映することができるようになると思います。

おまけ:フォント用語

  • トラッキング : 文字間隔の「等間隔のアキ」の値。
  • プロポーショナル : 字幅に合わせた文字(グリフ)の位置を調整するもの。OpenTypeでは、横組みの場合は「palt」、縦組みの場合は「vpal」がこれに当たる。以下の図でいうと、「仮想ボディ」のwidth,heightにあたる部分。
  • カーニング : fontごとに、任意の文字ペアに対して登録された「文字間のアキ」の値。OpenTypeでは「kern」がこれに当たる。
  • メトリクス : プロポーショナル情報で字幅を整え、カーニング情報により文字間隔(ツメ)を調整すること。この機能はプロポーショナルメトリクスとか、メトリクスカーニングとか、自動(メトリクス)とか、ソフトによって、いろんな記述されてるっぽい。(もしかしたら厳密には違うかも)
  • オプティカル : イラレや、InDesignの独自機能。fontファイルに内蔵された情報を使わないで、文字の大きさを読み取り、文字間隔(ツメ)の調整を行う機能のこと。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
17
Help us understand the problem. What are the problem?