altebute.hatenablog.com

犬も歩けば規格にあたる

Google Chrome 37(というかDirectWrite)でAAがずれる件について

Google Chrome 37で、文字の描画がGDIからDirectWriteに刷新された。2バイト文字が表示されない不具合が発生していたようだが、もう修正されたようだ。

閑話休題。DirectWriteではグリフの位置の計算にサブピクセルポジショニングが用いられるため、従来のGDIとは異る位置にグリフが表示される。これによって、 - 拡大縮小してもグリフの位置関係が崩れない。改行位置が変わらない。 - 字間がより正確に表示される。 といった恩恵を受けることが出来る。

IE9 のサブピクセル フォント - Internet Explorer ブログ (日本語版) - Site Home - MSDN Blogs

一方で、明らかにサブピクセルポジショニングを用いるべきでないビットマップフォントの描画においても、アウトラインフォントの字幅からサブピクセルポジショニングを用いてグリフを配置する、という致命的な欠陥仕様が存在する。

Bug-org 574907 [DW] Don't use subpixel positioning for bitmap glyphs - WebStudio

Bug-org 574907 [DW] Don't use subpixel positioning for bitmap glyphs #2 - WebStudio

Mozilla Firefoxではこの問題に対して個別に対処を行うことで解決しているようだが、結局のところ、DirectWriteにおいてAAがずれて表示されるのはMicrosoft的には「仕様」なのだろう。

AA対応フォントのGDIとDirectWriteの比較

f:id:agate_pris:20140830170954p:plain

DirectWrite環境ではtextar以外のフォントではAAがずれてしまっている事が分かる。

GDIとDirectWriteを重ねた表示

f:id:agate_pris:20140830171925p:plain

textarのみ、ピタリと一致していることが分かる。MS Pゴシックではずれてしまっている。

DirectWriteでの拡大表示

100%表示を画像加工で125%に拡大したものと、ブラウザ側で125%サイズで描画したものを重ねた表示。

f:id:agate_pris:20140830173929p:plain

DirectWrite環境では、拡大しても殆どずれていないことが分かる。ただし、Y座標は若干ずれてしまっている。

結論

  • 今後はMS PゴシックではAAが表示出来ない環境が標準になっていくと思ったほうが良い。
  • DirectWrite環境では今のところはtextarを使え。
  • IPA モナー PゴシックのDirectWrite対応に期待したい。

各ブラウザでフォントを置換したり、OS自体の設定でフォントを置換する方法については各自ググられたし。