Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【PHP】サムネイル画像作成

こんにちは。

今回は、PHPでアップされた画像からサムネイル画像を作成する方法をメモしたいと思います。
元データから画像をコピーしてサムネイル化するので、元データは影響を受けません。

それでは、早速ソースコードを書いていきます。

<?php
// dstの値から最適なサイズにリサイズ(縦横比を)
function getImageSizeForSmartResize($dstWidth, $dstHeight, $srcWidth, $srcHeight){
   $factor = min(($dstWidth / $srcWidth), ($dstHeight / $srcHeight));

   return array($factor * $srcWidth, $factor * $srcHeight);
}

// サムネイル画像作成
function createThumnail($filename, $type){
   // 必要ないと思いますが、もしうまくいかない場合書いてみてください
   // header('Content-type: image/jpeg');
   
   // イメージサイズ取得
   list($width, $height) = getimagesize("./img/".$filename);
   
   // サムネイル画像のサイズを指定
   list($new_width, $new_height) = getImageSizeForSmartResize(100, 100, $width, $height);
   
   // 新しい画像を生成
   if ($type === "jpg" || $type === "jpeg")
      $src = imagecreatefromjpeg("./img/".$filename);
   else
      $src = imagecreatefrompng("./img/".$filename);
      
   // 画像領域の作成
   $image = imagecreatetruecolor($new_width, $new_height);
   // exifデータ生成
   $exif = exif_read_data("./img/".$filename);
   
   // サムネイル画像の生成
   imagecopyresampled($image, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

   if(!empty($exif['Orientation'])){
      switch ($exif['Orientation']) {
         case 8:
            $image = imagerotate($image, 90, 0);
            break;
         case 3:
            $image = imagerotate($image, 180, 0);
            break;
         case 6:
            $image = imagerotate($image, -90, 0);
            break;
         }
      }
      
   if ($type === "jpg" || $type === "jpeg")
      imagejpeg($image, "./img/thum_".$filename);
   else
      imagepng($image, "./img/thum_".$filename);

   imagedestroy($image);
   imagedestroy($src);

   return "img/thum_".$filename;
}
?>


以上です。
一つ一つの流れが分かれば意外とすぐに理解できそうですね。

それでは。