mod_chxjでは端末ごとの画面サイズに合わせた画像のリサイズだけでなく、
実は、表示する画像ファイル自体を切り替えることが可能である。
(というか、そういう改善をおこない、オリジナルに返したということです。)

ただし、前回とどうようにまだ、v0.13というgitリポジトリからソースをとってこなければいけないです。

また、実際には機能のあるなしでいえば、画像のリサイズは重要と思えるが、
実際の運用では画像のリサイズよりも画像の切り替えのほうが重要である場合もあり、それだけで解決することもある。

ちょっと前までは、画面サイズがだいたい似通っており、そして小さかったが、今ではサイズがばらばらになってしまった。
そして、凝ったサイトを見るような利用者が持っている端末の場合にはほとんどが、画像のリサイズなどしなくても、
端末がもっている自動リサイズである程度対応できるようになってしまったし、
よほどのことがないと、端末が持っているキャッシュサイズやらファイルフォーマットなどもそれほど気にしなくてよくなった。(と思う)

一方、それでもまあ、見えればいいよ見えれば・・・という古い端末もサポートしなければいけない場合には、
画面サイズの関係上、リサイズというレベルではすまない。
デザインの簡略化だって必要だ。

また、画面のサイズによっては、デザインの配置を換えたほうがよい場合がある。
横がある程度ある端末ならば、横に2つの絵を並べても問題ないが、
狭いにも関わらず、2つの絵を同様に見せたければ、縦に組み替えることだって必要になる。

このあたりは、ロゴのポリシーを持っている方(会社)たちと話をしたことがあれば、わかると思う。
表示されるサイズごとに、使えるロゴが制限されていることだってある。

となれば、当然、一括画像リサイズが逆に都合がわるいということもわかるだろう。

そこで、ファイルの切り替えであり、本題である。

しかしながら、厳密にはこれから紹介する機能だけでは画像ファイルは切り替えられなく、
切り替えるプログラムを作って、それを利用することができるのである。

要は、指定した画像の読み込みを別のプログラムに委譲させ、その結果を表示するということである。
これをHTMLソースの書き換えなしに行うことができる。

ぶっちゃけ、mod_rewriteでもできるといえばできるけど・・・・、設定をより簡単にしたというところです。
だって、mod_rewriteのソースを参考にさせてもらったのですから・・・・

さて、設定ですが、

ChxjImageRerwite On
ChxjImageRewriteUrl /chxj/img.php
ChxjImageRewriteMode [all|tag|user]

のようにします。
もちろん、これらの設定はほかのmod_chxjを行うところと一緒です。

1行目は、単にこの機能を使いますよーという宣言です。
2行目は、画像のリクエストがきたときには、どのパスのリクエストですよという指定です。mod_rewriteでいえば、最終的に飛ばされるURLです。
3行目は、モードです。

モードとは、 all,user,tagがあり、
all とはあらゆるimage/* のリクエストが影響を受けます。
tagとは、タグのことです。このタグで書いた部分だけ影響を受けます。
この2つで何が違うかといえば、tagではbackgroundのような飾りのような画像は影響は受けないということです。

なので具体的には

ChxjImageRewriteMode user

のように記述します。(間違っても”[“や、”|”を書かないでください。これは3つの選択ができるという意味です。)

次に、userですが、こちらはHTMLのソースを書き換えて部分的に指定をするということです。
その指定方法は

<img src="/img.gif?_x-chxj_imgrewrite=on" />

みたいに、 _x-chxj_imgrewrite=on をつけてやる必要があります。

これで、この指定がない部分は影響を受けません。

ChxjImageRewriteUrlで指定したプログラムのサンプル

画像のリクエストは、ChxjImageRewriteUrlで指定したパスでリクエストを処理することになるのですが、
具体的にどのようなふうにしてファイルを切り替えるかといえば、

< ?php
// 固定で画像を返す。

header("Content-Type: image/jpeg");
$org_filename = $_SERVER["HTTP_X_CHXJ_IMAGE_FILENAME"];  //  これがオリジナルのファイルのパスである。

//  /var/www/img/size/logo.jpeg で、画像サイズごとに /size/ の部分を切り替えるとしたら・・・

if($_SERVER['HTTP_X_CHXJ_WIDTH'] > 200){
  $filename = str_replace("size","L",$org_filename);
}
else{
  $filename = str_replace("size","M",$org_filename);
}
$fp = fopen($filename,"r");
fpassthru($fp);
?>

とこんな感じです。
肝は、

$_SERVER["HTTP_X_CHXJ_IMAGE_FILENAME"];

にファイル名が入ってくるから、それを利用して本当に表示したい画像を表示すればいい。
というところです。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2011年2月
« 1月   3月 »
 123456
78910111213
14151617181920
21222324252627
28  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ