« FOMAとMacintosh(2) | メイン | Macintoshのメーラー »
2004年03月12日
サムネイル画像自動生成関数(PHP)
PHPユーザー定義関数の備忘録。
$file1のjpgファイルを短辺を一辺として正方形(以下のサンプルの場合60px四方)にリサイズします。
戻り値の$imgはimagejpeg関数でブラウザに出力するなりファイルに保存するなりします。
最後の2行のimagedestroyって関数外で$imgを使っているので意味ないような気がしますが、一応入れておきました。
どんな場合にこのスクリプトが利用できるかと言うと、例えばYahoo!トラベルのように詳細画面には写真があるけど、画像の縦横比がばらばらの場合、わざわざリスト表示用に同一サイズのサムネイル画像を手動で1枚1枚作るのではなく、既にサーバー上にある画像を使い自動で一気に生成します。
たぶんYahoo!トラベルも同じようなシステムのはず。
サンプルではGD2.0がインストールされている場合をコメントアウトしていますが、GD2.0ならサムネイル画像が綺麗にできるはず。でも環境がないのでGD2.0での動作確認はしていません。
function createThumb($file1){
$imagesize = getimagesize($file1);
if ($imagesize[0] < $imagesize[1]){
//縦長の画像の場合幅を60pxにして余った上下を切り取り
$resizerate = 60 / $imagesize[0];
$resize_h = (int)($resizerate * $imagesize[1]);
$resize_w = 60;
$resize_x = 0;
$resize_y = (int)(($imagesize[1] - $imagesize[0]) / 2);
}else{
//横長の画像の場合高さを60pxにして余った左右を切り取り
$resizerate = 60 / $imagesize[1];
$resize_h = 60;
$resize_w = (int)($resizerate * $imagesize[0]);
$resize_x = (int)(($imagesize[0] - $imagesize[1]) / 2);
$resize_y = 0;
}
$img = imagecreate(60,60);
$imagefrom = imagecreatefromjpeg($file1);
imagecopyresized($img,$imagefrom,0,0,$resize_x,$resize_y,$resize_w,$resize_h,$imagesize[0],$imagesize[1]);
//GD2.0以上が使える場合
//$img = imagecreatetruecolor(60,60);
//$imagefrom = imagecreatefromjpeg($file1);
//imagecopyresampled($img,$imagefrom,0,0,$resize_x,$resize_y,$resize_w,$resize_h,$imagesize[0],$imagesize[1]);
return $img;
imagedestroy($imagefrom);
imagedestroy($img);
}
実際のプログラム内での記述では、上記で作成したサムネイル画像は特定のディレクトリに保存した上で、
サムネイル画像がある →サムネイル画像を表示
↓
サムネイル画像が無い
↓
詳細ページに大きい画像がある →サムネイル作成
↓
詳細ページに画像がない →画像がない旨のサムネイル表示
というようにすると、サムネイルがない画像を新たにアップすれば自動でサムネイル作成されるので、サーバー負荷も減り、良いと思います。
投稿者 Utayume : 2004年03月12日 13:13| 05 Work(Perl, PHP, etc)
AD
トラックバック
このエントリーのトラックバックURL:
http://ondes-martenot.info/MT/mt-tb.cgi/22