2009年 5月 24日(日曜日)
docomoがこの夏モデルから導入した「iモードブラウザ2.0」。CookieやReferer、JavaScript対応など従来より大幅に進化しているのは間違いないのですが、ちょっと気になることもちらほら。この記事では新たに導入された「VGA描画モード」について書いてみたいと思います。
実は今までのiモード端末では、画面がVGA(480×640)以上の解像度を持つ端末であっても、画像ファイルなどはQVGA(240×320)を想定して描画を行っていました。つまりVGA端末では画像が縦横2倍に拡大表示されていたわけです。これは従来のQVGA端末との互換性を優先した仕様ですが、せっかくのVGA解像度が生かされず、画像が粗く表示されてしまうという問題点もありました。
そこでiモードブラウザ2.0では、従来のQVGA描画モードに加え、画像ファイルなどをネイティブにVGA描画するモードが追加されました。QVGA描画モードとVGA描画モードの切り替えはHTMLファイルのmetaヘッダによって行われ、
<meta name=”disparea” content=”qvga”>
と書けばQVGA描画モード、
<meta name=”disparea” content=”vga”>
と書けばVGA描画モードになります。何も書いていない場合は互換性重視でQVGA描画モードです。言うまでもありませんが、従来のiモード端末でVGA描画モードがONになっていても、今までどおりQVGAを想定した描画が行われます。
で、問題としたいのは、今端末がどちらのモードになっているのかの情報を、HTMLファイルだけが握っているということです。
例を挙げます。「バリいくつ?」の携帯サイトでは、タイトル画像が画面の幅いっぱいになるように、元画像から端末の画面サイズに合った画像を動的に生成しています。このロジックでは「pc2m」というスクリプトを使わせていただいており、HTML内に
<img src=”…/pc2m.php?hogehoge.png”/>
のような感じ(あくまで「感じ」、詳細は異なります)で、PHPスクリプトの変数に画像ファイルURLを指定するような感じで指定しています。pc2mは非常に優れたスクリプトで、端末の画面サイズを自動的に検出して画像をリサイズしてくれます。
ただその内容を見ると、auやSoftBankの場合はリクエストヘッダに格納された画面サイズ変数(auは「HTTP_X_UP_DEVCAP_SCREENPIXELS」、SoftBankは「HTTP_X_JPHONE_DISPLAY」)を見て画像サイズを決定していますが、docomoの場合はそのような変数がないため、ユーザーエージェントから端末の種類を判定して、プログラム側で持っている端末ごとの画面サイズとつき合わせて判定しています。
ここで先ほどのiモードブラウザ2.0における描画モードの件を再度考えます。QVGA描画モードとVGA描画モードでは描画する画面サイズが異なるわけですが、この情報を知っているのはHTMLだけなので、スクリプトのリクエスト単体では今どちらのモードになっているのかを判断することができず、どのサイズで画像をリサイズしていいかわからないことになります。
解決策がないわけではなく、スクリプト呼び出しをこのように変更すれば、
<img src=”…/pc2m.php?hogehoge.png?mode=vga”/>
「mode」リクエストパラメータを参照することで現在の描画モードを判定することができます。ただし、VGA描画モードだったら必ずVGAになるわけでもない(iモードブラウザ2.0端末が必ずVGA以上の画面を持っているとは限らないし、そもそも旧iモード端末に対してはQVGAにしなければならない)ので、結局スクリプト側には、「端末と描画モードの組み合わせ」で画面サイズの一覧を持っておかなければならないことになります。
| 機種 | 画面サイズ (VGA) |
画面サイズ (QVGA) |
備考 |
| P-07A | 480×662 | 240×331 | |
| N-06A | 480×640 | 240×320 | |
| N-01A | 240×320 | 240×320 | 旧iモード端末 |
|
… |
… |
… |
… |
こんな感じの表を延々と持たなければいけないわけで、なんだか不毛な感じがしてしまいます。せっかくリスクを負って仕様を大きく変更できるタイミングだったのに、なぜ他社と同じような画面サイズ変数を設定しなかったのか、大いに疑問がもたれるところです。
コメント
Leave a Reply
Trackbacks
-
[...] iモードブラウザ2.0の死角2 [...]
どうでもいいところだと思いますが、
表のQVGAとVGAが逆だと思います。
あつしさんコメントありがとうございます。
> どうでもいいところだと思いますが、
> 表のQVGAとVGAが逆だと思います。
ご指摘ありがとうございました。こっそり直しておきましたw。また何かございましたらご指摘ください。