大それた事書いてますが、要は大きな画像ファイルをimode用にリサイズして表示しようという話です。
imodeでは液晶サイズと内部メモリの使用上、96×72ドット程度の画像の表示を推奨しています。
これ以上のサイズの場合、メモリ不足により表示できない等のメッセージがでて画像が表示出来ません。
それ以前に9600bpsで大きな画像を読み込むのが辛いと思いますが(^^;今回はPHP+GDで画像リサイズプログラムを作ってみました。
残念ながら私のサイトのPHP(GD)ではGIFしかサポートできませんが、現行バージョンはJPEGやPINGをサポートしているようです。その代わりGIFはサポートから外されたようですが・・・このプログラムはくまの檻(imode版)の掲示板で利用しています。
PC版掲示板は画像貼り付けできるのですが、PC版とimode版は同じログを使用しています。
PC版でGIFの貼り付けがあった場合、このプログラムを経由することによりリサイズをすることが出来ます。【imgresize.php3】
<?php /******************************************* GIF画像サイズ補正 *******************************************/ // 画像ファイル指定 if(!isset($image)){ $image = "ku-man_naku.gif"; } $im2 = ImageCreateFromGif($image); // 画像サイズ if(!isset($w) && !isset($h)){ $w = ImageSX($im2); $h = ImageSY($im2); } // 幅だけ指定されていた場合 else if(isset($w) && !isset($h)){ $h = ImageSY($im2) * $w / ImageSX($im2); } // 高さだけ指定されていた場合 else if(!isset($w) && isset($h)){ $w = ImageSX($im2) * $h / ImageSY($im2); } // 最大サイズ調整 // 高さだけ指定されていた場合 $rate = 1; if(isset($maxw)){ if($maxw < $w){ $rate = $maxw / $w; } } if(isset($maxh)){ if($maxh / $h < $rate){ $rate = $maxh / $h; } } if($rate != 1){ $w = $w * $rate; $h = $h * $rate; } // 画像生成 $im = imageCreate($w, $h) or die ("Cannot Initialize new GD image stream"); ImageCopyResized ($im, $im2, 0, 0 , 0, 0, $w, $h, ImageSX($im2), ImageSY($im2) ); // 画像表示 Header("Content-type: image/gif"); ImageGif($im); ImageDestroy($im2); ImageDestroy($im); ?>[EOF] |
このプログラムはPHPのプログラムタグ「<?」の前や「?>」の後に改行を入れてはいけません。
GIF画像出力時に改行文字が付加されてしまい、壊れた画像になってしまいます。使用方法:
<img>タグで画像ファイルを直接指定せず、このプログラムを経由させます。
書式:
imgresize.php3 [image=<GIFファイル名>] [w=画像幅] [h=画像高さ] [maxw=最大画像幅] [maxh=最大画像高さ]
スイッチ パラメータ image GIF画像ファイル。サーバーのファイルを指定する。
PHPマニュアルにはURLも指定可能と記載されているが、指定するとエラーとなるw 画像幅指定
指定サイズにリサイズする
指定が無い場合、画像ファイルから幅を取得し、画像高さのリサイズ率で補正するh 画像高さ指定
指定サイズにリサイズする
指定が無い場合、画像ファイルから高さを取得し、画像幅のリサイズ率で補正するmaxw 画像最大幅
これを指定すると、この幅以上の物のみ補正するmaxh 画像最大高さ
これを指定すると、この高さ以上の物のみ補正する使用例:
<img src="imgresize.php3?image=image/image00.gif&maxw=96&maxh=72">
幅96ドット×高さ72ドットに収まるように"image/image00gif"を表示する。