2010-06-11

Webの高PPI対応はどうするのだろう

DPI(Dot per inch)といい、PPI(Pixel per inch)といい、同じ意味である。本来、DPIは印刷に対して用いられ、PPIは、ディスプレイに対して用いられるのだが、本質的に意味するところは同じである。

印刷やディスプレイの表示は、細かな点をもって表している。この点が細ければ細かいほど、人間の目には、自然に見える。しかし、あまりに細かすぎるのは、コストがかかるし、また現代の技術では難しいということもある。

今日、日本において、紙への印刷は、最低でも数百DPIはある。漢字を表現するには、ある程度の細かさが必要なのだ。

ところが、ディスプレイは、いまだに、紙の質に達していない。デスクトップに使われるディスプレイは、通常96PPI、高くても、120PPI程度が関の山である。携帯電話などの小さいディスプレイは、200から300PPIのディスプレイを備えるものもある。しかし、これは、ディスプレイが小さいから実現できるのである。デスクトップに使われる大きさのディスプレイで、200PPIなどというものは、現状では、一般に普及してはいない。コストと技術の両方の問題があるのだろう。

ディスプレイが高PPIになるのは、望ましいことである。しかし、ここに互換性という問題が立ちはだかる。

今、ほとんどのソフトウェアは、ディスプレイのPPIが、それほど高くないことを前提に書かれている。現代の多くのソフトウェアは、何らかの図画を描画する必要がある。最もよく描画される図画とは、文字である。

アウトラインフォントがどうの。それを実際のピクセルに落とす処理がどうのということは、省略する。それは、この問題に、あまり重要ではない。

文字を描画する際には、どのくらいの大きさで、その文字を描画するかということが、問題になってくる。大きさを指定するには、単位が必要である。現在、最も用いられている単位は何か。ピクセルである。

たとえば、この文字列は、20ピクセルの大きさで描画されている。これは、現代の多くの環境で、普通に読める大きさであると思われる。

しかし、この文字列は、10ピクセルの大きさで描画されている。視力とディスプレイなどの環境にも夜が、一般に言って、日本語の文字を、たったの10ピクセルで描画するのは、あまり読みにくいとは言えない。

この文字列は、たったの8ピクセルの大きさである。これは、多くの環境で、読みづらい文字であろう。

一体、何が問題だというのか。今、私は、96PPIのディスプレイを使って、この文章を書いている。ということは、この文字列の大きさの感覚、つまり読みやすい読みづらいというのは、96PPIにとっての、感覚である。今もし、PPIが10倍のディスプレイを使ったとして、ブラウザが、愚直に指定されたピクセル数の大きさで、文字を描画した場合、どうなるであろうか。

文字の物理的な大きさは、十分の一になってしまう。もちろん、ピクセル数は変わらないので、「細かさ」は同じだが、おそらく、相当に読みづらい極小文字になってしまうだろう。

クライアントのアプリケーションにとって、この問題は、Webサイト以上に深刻である。たとえば、MSのWindowsはどうなっているだろうか。

WindowsのGDIでは、DPI(MSは公式にDPIという用語を用いているので、この言葉を使う)の対応は、プログラマ側に任されていた。プログラマは、MSDN LibraryのCreateFontの説明にあるように、自前でDPIにあわせてスケールするよう期待されていた。しかし、そんな面倒なことは、誰もやろうとしなかった。それ故、MSは、Vista以降で、特別なはからいを提供した。もし、システムのDPIが、標準(96DPI)以外に設定されていた場合、Windowsは、あたかも96DPIであるかのように描画して、描画結果を、スケールして表示する。高DPIに対応していて、この「粋なはからい」をしてほしくないアプリにためには、この挙動を止めるためのAPIが存在する。

DirectGraphicは、96DPI固定である。これは、OSの実装の方で、実際のDPIにあわせてスケールされる。

では、Webの場合はどうなるのか。ブラウザがどう実装するのか。厳格に考えれば、CSSなどで、文字のサイズをピクセル数で指定している場合は、その大きさで描画すべきである。そもそも、ピクセル数を指定しているのだから、DPIがどうなどということは、関係がない・・・はずである。

とはいえ、現状で、多くのサイトは、96PPIないしは、百数十程度の低PPIのディスプレイで表示されることを、アテにしている。愚直にピクセル数の指定を守ると、現状のほとんどのサイトが、悲惨なことになる。

ちなみに、プリンターは、一足早く、この問題に直面している。今のPC用のプリンターは、どんなに安い製品でも、600DPIとか1000DPIなどといった、相当な高DPIでの印刷ができる。これは、Webページを印刷する際、非常に問題となる。

確か、W3CのCSSの規格では、この現状を踏まえて、印刷の際のレイアウトは、96DPIを前提にするような推奨の文面が存在したはずだ。

言うまでもなく、私は未来の技術の進歩を信じている。私が生きている間に、600PPIとか1000PPIで24インチぐらいあるPC用ディスプレイが、安価で発売されるであろうことを信じている。そのような未来において、既存のWebサイトはどうなるのだろうか。

しかし、どうも最近、コンピューターの性能の進歩に、勢いがないように思う。CPUの周波数は、何か画期的な技術が発明されない限り、もはや頭打ちである。マルチコアといっても、通常のアプリケーション処理は、何十にも分割して並列実行するのが難しい。SDRAMの速度向上というのも、あまり実感できない。GPUは、電子レンジ並の消費電力になろうとしている。唯一、HDDだけが、SSDの登場によって、一気に別物になった。

3 comments:

edvakf said...

px がインチの (CSS での) 定義を変えてしまうという本末転倒なことにもうなってました。
http://weblogs.mozillazine.org/roc/archives/2010/01/css_absolute_le.html

Anonymous said...

> 環境にも夜が
環境にもよるが
> あまり読みにくいとは言えない。
あまり読みやすいとは言えない。

江添亮 said...

やっぱりそうなるか。