| 2003-12-10 | 公開開始 |
| 2003-12-18 | フォント名(NoBitmap)を変更 |
| ClearTypeとは |
Windows XPでは、画面表示の際、文字のエッジをスムーズ化して見た目を「きれいに」表示する機能がある。実はWindows 2000以前にも「文字のエッジをスムーズにする」機能はついていたのだが、ここで使われていた技術はごく普通のアンチエイリアシングにすぎない。これに対してWindows XPでは、液晶ディスプレイ限定、という制約はあるものの、よりスムージング効果の大きいClearType技術が利用できるのである。
それぞれ、どのような効果があるのかを比較したのが、下の表だ。
| 無し | 標準 | ClearType |
|---|---|---|
![]() |
![]() |
![]() |
| 無し | 標準 | ClearType |
|---|---|---|
![]() |
![]() |
![]() |
| 各色をRGBの要素に分解。さらにそれをグレーレベルに変換してサブピクセルの「明るさ」としてマッピングした図。仮に人間の目が「明るさ」しか感じないとすれば、このように見える。 | ![]() |
| 日本語フォントとClearType |
Windows XPでClearTypeを使うには、
[画面のプロパティ]→[デザイン]タブ→[効果(E)]→[次の方法でスクリーンフォントの縁を滑らかにする(S)]
にチェックをすると共に、プルダウンメニューから[ClearType]を選択する。
![]() |
[効果]ダイアログで、[次の方法でスクリーンフォントの縁を滑らかにする(S)]にチェックをして、プルダウンメニューから[ClearType]を選択することで、ClearTypeによるスムージングが利用できる。 |
![]() |
ClearTypeを有効にしても、MS明朝やMSゴシックフォントでは、エンベッドされたビットマップデータが存在するためにClearTypeが使われない。16ポイントと18ポイントで、文字の印象が大きく変化してしまう。 |
| 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をコピーしたフォルダにあわせて入れておく。
ここまでできたら、コマンドプロンプトを立ち上げ以下のようにコマンドを入力する。
![]() |
下線部を入力すると、ttcファイルが分解されて、中からttfファイルが抽出される |
![]() |
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 [元のフォント名] [メトリックファイル] [出力先ファイル名] |
[メトリックファイル]というのが、処理対象となるビットマップデータを格納したファイル名だ。すでに述べたように、sbit32.exeは、既存のフォントファイルにビットマップデータを追加することを目的としたツールであるため、本来であればここに指定するファイルの中に、ビットマップフォントのデータを入れておくのである。しかし今回は、既存のファイルからビットマップフォントのデータを取り去ることが目的なので、ここには、取り去りたいビットマップ情報を示すデータを入れておけばよい。具体的に言えば、このファイルのフォーマットは次の様になる。
PPEM [サイズ] END |
@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
|
rmEBDT font00.ttf msgot2.ttf rmEBDT font01.ttf msgotp2.ttf rmEBDT font02.ttf msuigot2.ttf |
すでに述べたように、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 [フォントファイル名]として起動し、
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で、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が有効になるようにした。液晶画面であればスムージングがかかって表示されるはず。 |
| 標準アンチエイリアシング | ![]() |
同じフォントで、標準アンチエイリアシングを使用。ちょっと文字が太めに見える。 |
| おまけ | ![]() |
今回作成したフォントで、アンチエイリアシングなしに設定。ビットマップフォントが無いので小さな文字でもすべてアウトラインから生成される。きたなくて使い物にならない? |
©Copyright 2003-2004, tomtia