Top >> Personal Computer >> TrueTypeフォント

MSゴシックとMS明朝で、ClearTypeを有効にする

2003-12-10公開開始
2003-12-18フォント名(NoBitmap)を変更
ClearTypeとは

Windows XPでは、画面表示の際、文字のエッジをスムーズ化して見た目を「きれいに」表示する機能がある。実はWindows 2000以前にも「文字のエッジをスムーズにする」機能はついていたのだが、ここで使われていた技術はごく普通のアンチエイリアシングにすぎない。これに対してWindows XPでは、液晶ディスプレイ限定、という制約はあるものの、よりスムージング効果の大きいClearType技術が利用できるのである。
それぞれ、どのような効果があるのかを比較したのが、下の表だ。

無し 標準 ClearType
なし 標準スムージング ClearType


好みの問題はあるだろうが、標準スムージングとClearType処理を施したものでは、曲線部分や斜線の部分がなめらかな感じになっているのがわかると思う。対して、処理を行っていないものでは、特に斜線がガタガタだ。標準スムージングとClearTypeとを比較すると、スムーズ感は同等もしくは標準の方が強いが、文字のエッジがぼんやりとぼやけた感じがする。特にAの文字の横棒や、Bの文字の一番下の部分などに顕著だ。対してClearTypeの方もぼやけた感じはあるが、ぼやけ具合は標準よりはずっと少なく、文字はきれいながらもシャープな印象だ(ただしClearTypeはデジタル接続の液晶専用なので、それ以外の環境で見ている人にはそう見えないはず)。
利用できる環境に限りがあるとはいえ、ClearTypeのスムージング機能は、個人的にはなかなか良くできているのではないかと思う。

ClearTypeのスムージング効果が何故大きいかと言えば、アンチエイリアシングをピクセル単位でなく、そのピクセルを更に3分割したピクセル単位で行っているからだ。なぜこんなことができるかというと、液晶のピクセルは、ひとつのピクセルが任意の色に発色するわけではなく、RGBの3つの「サブピクセル」によって1ピクセルが構成されているからだ。しかもこのサブピクセルは、RGBがこの並び順で水平方向に並んでいる。たとえば、液晶の解像度としては一般的なXGA解像度(1024×768)の場合、RGB別のサブピクセル数は3072×768となるわけだ。
もちろん、個々のサブピクセルにはRGBの色がついているために、このようにして解像度を上げると、本来表示したい色とは異なる色が発生してしまう。ただ幸いにして人間の目は明るさの変化には敏感だが色の変化には鈍感なため、狭い範囲であれば色変化は感じずらい。この原理を利用したのが、ClearTypeによるアンチエイリアシングの原理である。

この原理は、アンチエイリアス処理が行われている部分を拡大してみるとわかる。以下が「/」の文字の一部を15倍に拡大した画像だ。

無し 標準 ClearType
なし 標準スムージング ClearType


標準のアンチエイリアシング処理ではグレーレベルになっている部分のピクセルが、グレー以外の色つきになっていることがわかる。そこで、各ピクセルをそれぞれRGBの要素に分割して、さらにRGBごとの値をグレーレベルに変換して表示してみたのが、以下の図である。

各色をRGBの要素に分解。さらにそれをグレーレベルに変換してサブピクセルの「明るさ」としてマッピングした図。仮に人間の目が「明るさ」しか感じないとすれば、このように見える。 ClearType


一見してわかるように、これは通常のアンチエイリアシング処理を横方向だけ3倍の解像度で適用したのと同じような効果となっている。逆に縦方向に関しては、通常のアンチエイリアス処理となんら変わりない。原寸大表示の画像で、「C」の文字の上端や下端部分がちょっとでこぼこした感じにみえるのは、このことが原因だろう。

日本語フォントとClearType

Windows XPでClearTypeを使うには、

[画面のプロパティ]→[デザイン]タブ→[効果(E)]→[次の方法でスクリーンフォントの縁を滑らかにする(S)]
にチェックをすると共に、プルダウンメニューから[ClearType]を選択する。

ClearTypeを選択 [効果]ダイアログで、[次の方法でスクリーンフォントの縁を滑らかにする(S)]にチェックをして、プルダウンメニューから[ClearType]を選択することで、ClearTypeによるスムージングが利用できる。

しかし、設定した経験のある人ならわかると思うが、これを設定すると英文フォントに関してはClearTypeが有効になるものの、日本語フォントについては特に変化が起きない。
一見すると、日本語フォントについてはClearTypeが無効なのかと思えてしまうが、これは違う。試しに「メモ帳」などでフォントサイズを18ポイント以上にすると、ClearTypeによるスムージングが有効になるのがわかる。
実はマイクロソフトが用意した日本語フォント(MSゴシックやMS明朝)には文字サイズが小さいとき、文字表示を高速にし、かつ細かい部分が潰れないようにするために、あらかじめビットマップ化された文字データを埋め込んでおくEmbedded Bitmap Data(EBDT)が含まれているためだ。Windowsは、EBDTが用意されているフォントサイズではそのビットマップデータをそのまま表示用に使用し、Cleartypeの適用は行わないのである。MSゴシックやMS明朝では、16ポイントまでのEBDTが用意されているため、通常使われる文字サイズ(10〜12pt前後)ではClearTypeが有効にならない。

Embedded Bitmap Data ClearTypeを有効にしても、MS明朝やMSゴシックフォントでは、エンベッドされたビットマップデータが存在するためにClearTypeが使われない。16ポイントと18ポイントで、文字の印象が大きく変化してしまう。


では、日本語文字でも常にClearTypeを有効にするにはどうすればよいのだろう。Webで検索すると、いくつか方法が見つかる。特にあちこちで紹介されているのが、ttfmodというツールを使用する方法。これはTrueTypeフォントに含まれるパラメータテーブルのうちのひとつである、gasp(Grid-fitting and scan conversion procedure data)領域の情報を書き換えるツールだ。このgaspとは、フォントがレンダリングされる際、アンチエイリアシングを行うかどうか、と、ヒンティングを行うかどうかをフォントサイズごとに設定するテーブル。通常、日本語フォントでは16ポイント以下の文字サイズではアンチエイリアシングが無効になっていることが多いのだが、これを有効に変更してくれる。

ところが、実はこの方法では「通常」のアンチエイリアシングは有効になるものの、ClearTypeは有効にはならない。というのは、ClearTypeのレンダラは、EBDTが存在する場合には、gaspの設定いかんに関わらず、常にアンチエイリアシングを無効にしてビットマップデータをそのまま表示するようになっている(らしい)のだ。
このため、ClearTypeを任意の文字サイズで使いたい、という場合には、前出のttfmodは利用できず、EBDT自体を削除してしまうしかない。ちなみに、EBDTを削除しただけでは「通常」のアンチエイリアシングは機能しないので、通常のアンチエイリアシングとClearType、どちらも有効なフォントを作成するためには、EBDTの削除とgaspの書換え、どちらも併せて行う必要がある。

TTCファイルを分解する

では実際にフォントの変更をしてみよう。ここでは例として、MSゴシックのEBDTを取り除いて、任意の文字サイズで常にClearTypeが有効になるフォントを作ってみる。

まず用意しなければいけないのが、元となるフォントだ。これはWindowsのシステムフォルダの下の「Fonts」フォルダに入っている。標準であれば「C:\Windows\Fonts」だ。もしくは[コントロールパネル]→[フォント]で開いてもよい。この場所で直接フォントファイルを編集することはできないので、まずこのフォルダからMSゴシック用のフォントファイルを、通常のフォルダにコピーする。

フォントフォルダ内では、フォントファイルはファイル名ではなく「フォント名」で表示されている。フォントフォルダ内では「MSゴシック & MS Pゴシック & MS UIゴシック」という名称で表示されているファイルを、通常のフォルダにコピーしてやると「msgothic.ttc」というファイルとなって表示されるはずだ。

[フォント]フォルダ ←[フォント]フォルダ内にある「MSゴシック」のフォントファイルを通常のフォルダにコピーしてやる。

すると、コピー先のフォルダ内では「msgothic.ttc」というファイルとなって表示される。→
通常フォルダ

ところで、実はこのファイル、いわゆる「TrueTypeフォント」とはちょっと違う。一般にTrueTypeフォントファイルは「ttf」という拡張子を持っているが、このファイルの拡張子は「ttc」だ。

この拡張子ttcというのは「TrueType Collection font file」と呼ばれるもので、ひとつのファイルの中に複数のTrueTypeフォントファイルを収めたもの。複数のファイルとはいっても、単にttf同士をくっつけたという単純なものではなく、それらのフォントファイルの中で、一部、またはすべての文字を共有したりできる、という特徴を持っている。
これができるとなにがうれしいかというと、一部の漢字やかなの字体だけを変更し、他のすべての文字は同一というフォントを簡単に作ることができるのだ。
たとえばmsgothic.ttcの場合、MSゴシックとMS P ゴシック、MS UIゴシックという3種類のフォントファイルが含まれている。これら3つの書体は、漢字および仮名については、すべて同じ文字が使われているが、英数字や仮名の部分はそれぞれ異なる。MSゴシックは、1バイト文字(いわゆる半角文字)の幅は2バイト系(全角)文字の1/2の幅となる。対してMS Pゴシックは、英文字および数字に関しては、文字の種類に応じて文字幅が異なる「プロポーショナル文字」となっている。MS UIゴシックは、2バイト系のカタカナ文字の幅が通常の漢字よりも狭く、ちょうど「半角カタカナ」くらいの幅で表示されるようになっている。これはメニューバーなどでカタカナ文字を表示する場合に、あまり横幅をとらないようにするためだ。
ttcファイルでは、それに含まれる複数フォントのうち、共通の文字については文字データを共用できるように作られている。このため「一部だけが異なる複数のフォント」を保持するのに都合がよい。

ところが、今回行うような編集ではttcのままでは都合が悪い。大抵の編集ツールは、ttcを直接編集することはできないのだ。そこでまずttcから、その内部に含まれるttfファイルを取り出さなければならない。これには「breakttc.exe」と呼ばれるツールが利用できる。

breakttc.exeは、マイクロソフトが公開していたTrueType SDKに含まれているソフトで、ttcファイルを分解して、複数のttfファイルを出力する機能を持っている。またこれとは逆に、複数のttfファイルを結合してttc化する「makettc.exe」もある。これらは他のSDKツールとあわせてttsdk.zipというアーカイブ名でマイクロソフトのFTPサイトで公開されていたのだが、現在はすでに公開されていない。幸いXLSoftさんでアーカイブされているものがあるので、これをダウンロードすると良いだろう。必要なのは、TTCというフォルダの中に含まれているBREAKTTC.EXE、それにMAKETTC.EXEという2つの実行ファイルだ。これらは、さきほどのmsgothic.ttcをコピーしたフォルダにあわせて入れておく。


ここまでできたら、コマンドプロンプトを立ち上げ以下のようにコマンドを入力する。


breakttc 下線部を入力すると、ttcファイルが分解されて、中からttfファイルが抽出される

コマンドを実行すると、ttcファイルに含まれるttfファイルが、FONT00.ttf〜FONTxx.ttfという名前で抽出される(xxは連番)。MSゴシックの場合、3つのフォントが含まれているため、FONT00.ttf〜FONT02.ttfまでが抽出される。どのファイルがどのフォントにあたるかは、エクスプローラーから確認するしかない。

breakttc FONT00.ttf〜FONT02.ttfまでの3つのTTFファイルが抽出されたのがわかる

EBDTを取り除く

ttcの分解ができたら、次に抽出されたttfファイルそれぞれに対して、ビットマップデータ(EBDT)を取り除く。これを行うツールはちょっと探すといろいろ見つかるが、今回はマイクロソフト純正ツールであるsbit32.exeを使用した。このツール、本来は既存のttfファイルに対して、ビットマップフォントをエンベッドするためのツール。つまり今回行うのとは逆の目的のツールなのだが、エンベッド済みのフォントを削除する機能も持っている。ファイルの入手先だが、先のttsdk.zipとは違い、こちらは現在もマイクロソフトのサイトで公開中なので、ここからfonttools.exeをダウンロードする。

ファイルは自己展開形式になっているが、sbit32.exeを取り出すには、これを実行した結果出力されるsbit.zipの中に含まれているので、さらにzipを展開しなきゃならない。へんなの...
sbit.zipの中には、sbitというフォルダがあり、さらにその中にsbit32.exeというファイルが含まれているので、これを取り出してさっきフォントを展開したフォルダに一緒に入れておく

既存フォントからEBDTを削除するには、以下の様にする


SBIT32 -d [元のフォント名] [メトリックファイル] [出力先ファイル名] 

ここで、[元のフォント名]とは、加工対象元となるビットマップ込みのフォントファイル。今回の手順で言えば、先ほど抽出したFONT00.ttf〜FONT02.ttfを指定する。[出力先ファイル名]は、ビットマップデータを取り除いた結果を入れる、新しいファイル名。

[メトリックファイル]というのが、処理対象となるビットマップデータを格納したファイル名だ。すでに述べたように、sbit32.exeは、既存のフォントファイルにビットマップデータを追加することを目的としたツールであるため、本来であればここに指定するファイルの中に、ビットマップフォントのデータを入れておくのである。しかし今回は、既存のファイルからビットマップフォントのデータを取り去ることが目的なので、ここには、取り去りたいビットマップ情報を示すデータを入れておけばよい。具体的に言えば、このファイルのフォーマットは次の様になる。


PPEM [サイズ] 
END

ここで[サイズ]とはビットマップデータのピクセル数。この内容をテキストファイルとして保存し、SBIT32.EXEのパラメータとしてやることで、[サイズ]で指定されたピクセルサイズを持つビットマップデータだけが削除される。通常、ひとつのフォントには複数のびくセルサイズを持つビットマップデータが含まれていることが普通なので、取り去りたいサイズすべてについてこのコマンドを実行してやる必要がある。
MSゴシックやMS明朝などには、サイズ7〜22までの、16通りのEBDTがエンベッドされている。実はSBIT32.EXEでは、これらを一度に削除することはできず、ひとつひとつ順番に削除していくしかない。つまり16通りのメトリックファイルを作らないといけないわけだ。
もちろん、すべて手作業でやっても同じことはできるが、あまりに面倒なので、バッチファイルを作ってみた。


@echo off
copy %1 %2 >nul
for /l %%i in ( 7,1,22 ) do (
    echo PPEM %%i > mtemp.txt
    echo END >> mtemp.txt
    sbit32 -d %2 mtemp.txt ftemp.ttf  
    del %2
    ren ftemp.ttf %2
)
del mtemp.txt

この内容をバッチファイルにセーブして、以下のように、元のフォントファイルと新しいフォントファイルの名前をセットする。これでサイズ7からサイズ22までのEBDTがすべて削除されたものが、出力先に指定されたフォントファイルに収められる。たとえば、バッチファイル名をrmEBDT.batとする場合、


rmEBDT font00.ttf msgot2.ttf 
rmEBDT font01.ttf msgotp2.ttf 
rmEBDT font02.ttf msuigot2.ttf 

と入力してやれば、font00.ttfからEBDTが取り除かれたものが、msgot2.ttf、font01.ttfからEBDTが取り除かれたものがmsgotp2.ttfといった具合に保存されるわけだ。もちろんMS明朝についても同じことが可能だ。

すでに述べたように、EBDTを削除することで、以後このフォントでClearTypeが有効になるのだが、通常のアンチエイリアシングはこれだけでは有効にならない。これを行うには、すでに紹介したttfmodを使うのが便利。このツールも、TTFファイルにしか有効ではないので、この段階で各フォントにttfmodをかけておくと、ClearTypeと通常のアンチエイリアシングのどちらも有効になる

フォント名を変える

次のステップでは、フォントファイル中に含まれる「フォント名称」を変更する。Windows上のフォントは、フォントフォルダ中で「フォント名」の一覧が表示されることからもわかるように、フォントのファイル名ではなくフォント自身の「名前」で区別される。つまり、データが収められているフォントファイルが異なっていても、内部に記録されたフォント名が同じであれば、同じフォントと見なされるわけだ。

これまでの手順では、フォント名にはまったく変更を加えていないため、フォント名称は「MSゴシック」のままだ。つまりこのままでは、システムに標準で備わっているMSゴシックと名称がバッティングするため、いま新たに作ったフォントをシステムに登録することはできない。(正確にいえば、TTCフォントとTTFフォントに関しては、名前がバッティングした時にはTTFが優先するようになっているようだ。このため、TTFフォントのままであれば名前がバッティングしていても登録は可能で、再起動後は新規に登録したTTFフォントが使われるようになる。ただしこの方法はイレギュラーな方法なので、あまりお勧めしない)

これに対処する方法は二通りある。ひとつは、新規に作成するフォントの名称を変更して「MSゴシック」や「MS明朝」以外にし、これまでのMSゴシックやMS明朝と併用する方法だ。Windowsの大抵のアプリケーションは、標準で使うフォントを変更する機能があるので、この機能を使ってシステムフォントを新規に作った「ClearType有効」のフォントにしてしまえば、そのアプリケーションの内部ではClearTypeが有効になる。

もうひとつの方法は、フォント名称は変更せず、システムに標準で備わるMS明朝やMSゴシックのフォントと置き換えてしまう方法だ。この方法であれば、アプリケーションの設定は一切変更することなく、これまでMS明朝やMSゴシックを使っていたすべての表示部分がClearType対応となる。Windows標準のメニューバーやアイコンの文字など、すべてがClearType対応になるわけだ。
ただしこの場合、元々存在するビットマップフォントと、TrueTypeによりレンダリングされる文字とのサイズの微妙な違いなどから、一部画面デザインなどが崩れる可能性もある。少々リスキーな方法だ。どちらにするかは好みの問題で決めればよいと思うが、ここではフォントの名称を変更する方法を紹介する。

フォントの名称を変更するには、ttfname.exeというツールが便利。こちらのページからttftools.zipをダウンロードすると、この中に含まれている。ちなみにツールの使い方もこのページにあるのを参照した方がずっとわかりやすい。

注意点は、既存の他のフォントとバッティングさせないことだ。つまりttfname.exeの画面内にある入力項目のうち、FontName、FamilyName、UniqueIdentifierに関しては、必ず変更するよう注意しなければならない。
(追加)PostScriptNameについても変更した方がよさそうだ。

MSゴシックの場合、Encode欄は3通り選択できるようになっているので、これら3つについてすべて変更する。
どのように名前を変更するかは、利用者の好みでかまわない。私の場合、ビットマップデータを削除したことがわかるように、フォント名の後にすべて(NoBitmap)NBという文字列を付加した。
(注) フォント名に括弧がついていると、正しく認識できないアプリケーションが一部に存在する(たとえばVisualStudio.Netなど)ようなので、この部分を変更した。


ttfname ttfname [フォントファイル名]として起動し、
  • FontName
  • FamilyName
  • UniqueIdentifier
  • PostScriptName
4つの値を変更する。一番上のプルダウンボックスで選択できるすべてのページについて変更すること
PostScriptNameも変更するよう、キャプション追加。
図を差替え。


TTCを作る

すべてのTTFフォントの名前を変更したら、TTCからTTFを抽出したのとは逆の順番で新たなTTCを作る。これには、冒頭の「breakttc.exe」とペアで入っていた「makettc.exe」を使う。makettc.exeの使い方は以下の様になる。



MAKETTC [TTCファイル名] [TTFファイル名1] [TTFファイル名2] ...

第一パラメータには、作成されるTTCファイルの名前。第二パラメータ以降が、そのTTCファイルに含まれるTTFフォントのファイル名だ。TTCファイルのファイル名は適当に決めて良いのだが、あとでこのファイルをフォントフォルダにコピーしなければならないので、フォントフォルダに同じ名前のファイルが無いようにしなければいけない。今回は、MSゴシックのビットマップ無し版ということで、nbmsgot.ttcという名前にした。


makettc makettcで、3つのフォントをひとつのttcファイルにまとめる

フォントを登録する

フォントの作成手順はこれで終了だ。できあがったEBDT無しのフォントファイルを、Windowsのフォントフォルダにドラッグ&ドロップしてやれば、以後ここで作成したフォントは、「MSゴシック(NoBitmap)」という名前で使用できるようになる(ttfnameで設定した名前で使用できる)。

フォントの登録 フォントフォルダに、できあがったttcファイルをドラッグ&ドロップすると、フォントが登録される

ただし今回は、フォント名を変更することで標準のMSゴシックやMS明朝と共存させるようにしているので、これだけではいま作ったフォントは使われない。フォントを使いたい場合には、各アプリケーションでそのフォントを使うように指定しなければならない。たとえばIEで使うのであれば、[ツール(T)]→[インターネットオプション(O)...]→[全般]タブ→[フォント(N)...]で、使用するフォントとして「NoBitmap」を選択する必要がある。

フォントの選択 IEのフォント設定で、使用するフォントとして[(NB付き)]を選択する

この操作はちょっと面倒ではあるが、その分、自分が使いたいアプリケーションだけでフォントを変更できるというメリットがある。もし仮に、どんなアプリでも常にこの「NoBitmap」フォントを使いたいのであれば、上の「ttfnameによるフォント名変更」を行わないようにし、またttcファイルの作成の項で作成するttcファイル名を、元のMSゴシックとMS明朝のファイル名(それぞれmsgothic.ttc, msmincho.ttc)と同じにすればよい。これをフォントフォルダの元ファイルに対して「上書き」してやればOKだ。

ただし、元ファイルに対して上書きする際には、Windows上から行うことはできない。なぜならWindowsの起動中は常にMSゴシックがシステムフォントとして利用されているため、それまで使われていたMSゴシックのファイルを削除することができないためだ。このため、この操作を行うには、他のOSでディスクを直接編集したり、回復コンソールからファイルの上書き操作をしなければならなくなる。

ところで、小さな文字でも常にアンチエイリアスが効くというのは、特に高密度の液晶画面では気持ちがよい。たとえばUXGA(1600×1200)解像度の液晶などでは非常に効果的。IEなどでも、普段使っているよりも一ランク文字サイズを落として使うことができる。逆に、17インチでSXGA(1280×1024)といった、1ピクセルのサイズが大きな液晶画面だと、ClearTypeの副作用である「文字の境目に色が付いて見える」現象が目立ってしまい、あまり好ましくない。結局は「好みの問題」なのである。

アンチエイリアシングなし アンチエイリアシングなし 多くの人が使っているであろう、文字サイズ「小」の表示。このサイズだと、ClearTypeを有効にしても、日本語文字にはアンチエイリアシングはかからない。
ClearTypeを使用 ClearType 今回の方法を使ってClearTypeが有効になるようにした。液晶画面であればスムージングがかかって表示されるはず。
標準アンチエイリアシング ClearType 同じフォントで、標準アンチエイリアシングを使用。ちょっと文字が太めに見える。
おまけ ClearType 今回作成したフォントで、アンチエイリアシングなしに設定。ビットマップフォントが無いので小さな文字でもすべてアウトラインから生成される。きたなくて使い物にならない?







©Copyright 2003-2004, tomtia