前回記事PHPで画像のサムネイル表示1ではただ単にサムネイル画像の表示のコードを書いていきました。次にtmpフォルダに保存された画像のサムネイル画像をもう一つ作るコードを書いていきたいと思います。一時的に保存された画像のサムネイル画像を作っていきたいと思います。9月9日記事
目次
あらかじめご了承いただきたいのですが、これはプログラムの一部を切り取ったものです。
アップロードされた画像の処理やデータベースへの挿入の流れのコード部分は割愛します。
一時的に保存されたフォルダからサムネイル画像を複製していきたいと思います。
概要は100×100の画像の生成を行います。もし横長だった場合、横は100に、縦はアスペクト比を保ったサイズにし、もし縦長だった場合は、縦を100に、横はアスペクト比を保ったしていきたいと思います。サムネイルの指定されたサイズ100×100よりさらに小さい画像が投稿された場合は、そのままの状態(拡大しない)のサムネイル画像を作っていきます。
<?php //一行目に記述 $file = "./tmpdir/motogazou.jpg";//./を必ずつけることが重要。 list($width, $height) = getimagesize($file); //サムネイルするピクセル数 変更は可 $thum_width = 100; $thum_height = 100; //サムネイルする画像よりもさらに小さい画像を扱う場合はそのまま if($width <= $thum_width && $height <= $thum_height){ $thum_width = $width; $thum_height = $height; }else{ //そうでない場合は縮小率を決定する。 if($width >= $height ){ //横長または正方形だった場合の処理 $percent = $thum_width / $width;//縮小率計算 }else{ //横長だった場合の処理 $percent = $thum_height / $height;//縮小率計算 } //縮小率に従って、サムネイル画像の縦と横を再計算 $thum_width = $width * $percent; $thum_height = $height * $percent; } $thumb = imagecreatetruecolor($thum_width , $thum_height); $image = imagecreatefromjpeg($file); imagecopyresized($thumb, $image, 0,0,0,0, $thum_width, $thum_height, $width , $height); header('Content-Type: image/jpeg'); imagejpeg($thumb);//表示用これはなくてもよい。 imagejpeg($thumb,'./tmpdir/thum.jpg');//サムネイル画像作成用 imagedestroy($thumb); imagedestroy($image); ?>
サムネイル画像よりも小さい画像を扱う場合、とそうでない場合に切り分けたIF文を使い、そうでなかった場合、さらに、縦長か横長かを判定し、それによって縮小率を計算させるプログラムを作ることができると思います。
このようにすることで、jpeg画像のアスペクト比(縦横比)を保った状態でサムネイル画像を生成することができます。
以上