【PHP】サムネイル画像を作成・保存

php

よくプロフィール画像をアップしたりするとサムネイル画像を表示するときがあると思うのでそれをメモ。
画像がアップロードされてからの処理。

サムネイル作成の流れ

サムネイル画像の作成の全体の流れは以下のようになります。



//アップロードの処理
 $uploadImage=date("YmdHis").$_FILES["image"]["name"];
 $upflag=move_uploaded_file($_FILES["image"]["tmp_name"],"upload/".$uploadImage);

//--------------------------------------------------------
//  ①アップロードした画像のサイズを取得する
//--------------------------------------------------------    
$imagesize=getimagesize("upload/".$uploadImage);
     
     //サイズを取得
     $width=$imagesize[0];
     $height=$imagesize[1];

     //サムネイルのサイズ
     $width_s=120;
     $height_s=round($width_s*$height/$width);

     //サムネイルの画像のディレクトリ
     $thumb_dir="upload/s/";
     
     //保存するときのファイル名は同じにする
     $thumb_name=$thumb_dir.$uploadImage;

//--------------------------------------------------------
//  ②imagecreatefromjpeg関数で画像を取り出しサンプリングに使う。
//--------------------------------------------------------    
     $image=imagecreatefromjpeg("upload/".$uploadImage);


//--------------------------------------------------------
//  ③imagecreatetruecolor関数でベースをつくり
//    そこにサンプリングしてコピーする
//--------------------------------------------------------
 
     $image_s=imagecreatetruecolor($width_s, $height_s);
                
     //サンプリングする
     $result=imagecopyresampled($image_s,$image,0,0,0,0,$width_s,$height_s,$width,$height);

//--------------------------------------------------------
//  ④imagejpg関数でブラウザあるいはファイルとして出力する
//--------------------------------------------------------

     if($result){ //サンプリングによる画像作成成功
            if(imagejpeg($image_s,$thumb_name)){ //imagejpeg関数で画像を保存
                 $msg="サムネイル作成成功";
               }else{
                 $msg="サムネイル作成失敗";
               }
         }else{
            $msg="サンプリング失敗";
         }
                
         //取り出した元画像とサンプリングのための作成したベースが画像を削除する
         imagedestroy($image);
         imagedestroy($image_s);

①getimagesize:アップロードした画像のサイズを取得する

getimagesizeで指定した画像のデータを取得することができる。今回はアップロードした画像の幅と高さを知りたいので変数「$imagesize」で配列アクセス演算子で「0番」に画像の幅、「1番」に画像の高さが保存されている。

後は、サムネイルの画像サイズの変数とサムネイル画像の名前はアップロードした画像ファイル名と同じにしてある

②imagecreatefromjpeg:アップロードした画像を読み込む

imagecreatefromjpeg関数で新しい画像をファイルあるいは URL から作成する「PHP Manual -imagecreatefromjpeg-

③imagecreatetruecolor:アップロードした画像を読み込む

imagecreatetruecolor関数で空の画像を作り引数には作成する画像サイズを指定する。

imagecopyresampledでサンプリングして画像をコピーする

imagecopyresampled関数の引数はこちら

この関数でimagecreatetruecolorで作成した空の画像に転写する。成功した場合は「true」を返すのでその結果を$resultに代入している。

④imagejpeg:ブラウザまたはファイルとして出力する

作成した画像をブラウザに出力するかもしくはファイルとして出力するにまimagejpeg関数を使用する。
第1引数はimagecreatetruecolor() のような画像作成関数が返す画像リソースとなるので上記だと$image_sになる。
第2引数は、保存するファイルへのパスになるので今回は「”upload/s/画像ファイルの名前”」になる。ここはフォルダも含め保存するときにファイル名も忘れないようにする。