偏ったCGI

imodeで表示する画像を変える

DoCoMoのimodeには、現在大きく分けて、501シリーズと新型の502シリーズがあります。
imodeで使用できる画像データは、シリーズによって次のように異なります。

  501シリーズ 502シリーズ
ファイル形式 GIF87,87a,89a
カラー モノクロ2階調
(P501は独自仕様により、減色して表示可能)
カラー
F/D:256色
P/N/SO:モノクロ4階調
透明GIF ×
サイズ 最大94×72ドット 96×90ドット(D502)
96×72ドット(目安)

汎用のデータを作成するのであれば、501シリーズ準拠にすればよいのですが、
せっかく502シリーズでカラー表示機能がついたのに勿体ありません。(ちなみに私はD502ユーザー♪)
各機種を判断して表示する画像を変えるには、ユーザーエージェント を利用します。

サンプルとして、 くまの檻(imode版)で作成した、機種判別画像表示CGIソースを記します。

#!/usr/local/bin/perl
# i-mode機種判別画像表示CGI
#

# 表示画像ファイル(必要であればパス指定もつける)
# 白黒版

$IMG_M = 'kumaoriim.gif';
# カラー版
$IMG_C = 'kumaorii.gif';

#=====================#
# メイン
#=====================#
#ユーザーエージェントを取得し、「/」で分割
#@AGENTに格納
$HTTP_USER_AGENT =$ENV{'HTTP_USER_AGENT'};
@AGENT = split(/\//,$HTTP_USER_AGENT);

#ユーザーエージェントの情報を元に機種判別する

#DoCoMo(imode)かどうか判別
if($AGENT[0] eq "DoCoMo"){
  #501シリーズの場合
  if($AGENT[2] =~ ".501i"){
    $file = "$IMG_M";     #モノクロ画像指定
  }
  #502シリーズの場合
   else{
    $file = "$IMG_C";     #カラー画像指定
  }
}
#その他(汎用ブラウザ)用の画像指定
else{
  $file = "$IMG_C";       #カラー画像指定
}

#ファイル情報取得
#今回はファイルサイズ取得のため

($dev,$ino,$mode,$nlink,$uid,$gif,$rdev,
  $size,$atime,$mtime,$ctime,$blksize,$blocks)
    = stat($file);

#画像ファイルをバッファに読み込み
open(IN, "$file");
binmode(IN);
sysread(IN, $buf, $size);
close(IN);

#バッファデータをGIF画像データとして出力
print "Content-type: image/gif\n\n";
print $buf;

使用方法:

参考

iモード対応HTML Version1.0・2.0 タグ・画面イメージ対応表
My D-style for デジタル・ムーバ D

[HOME][実験君]