ソフトモヒカンの勉強と開発の記録

サービス開発を目指して、プログラミングの勉強とコーディングをしています。本ブログは、そのログになります!

【PHP】画像ファイルのリサイズをする関数の作成

今回は、PHPで画像ファイルのリサイズを行う関数を作成してみます。

開発環境

macOS High Sierra(バージョン10.13.5)
PHP7.1.16
Sublime Text

前提条件とやりたいこと

  • PHPコードの存在するディレクトリ内に「images」という名前のディレクトリがあり、中に画像ファイルが置いてある。
  • 「images」ディレクトリ内の画像ファイルのサイズを変更する。
  • 「images_resized」ディレクトリを用意して、そこに保存する。

プログラム

<?php
function image_resize($width_resized, $origin_path, $imagefile, $resize_path){
      /** width_resized:リサイズ後の画像ファイルの横幅
         orgin_path:リサイズする元画像ファイルのパス
            imagefile:画像ファイル名
            resize_path:リサイズ済みの画像ファイルの保存先パス **/

    //元の画像情報(横幅、縦、拡張子)を取得
    list($width_origin, $height_origin, $type) = getimagesize($origin_path.$imagefile);

    //画像を加工前にフォーマットごとに書き出し
    switch ($type) {
    case IMAGETYPE_JPEG:
        $image_origin = imagecreatefromjpeg($origin_path.$imagefile);
        break;
    case IMAGETYPE_PNG:
        $image_origin = imagecreatefrompng($origin_path.$imagefile);
        break;
    default:
        throw new RuntimeException('対応していないファイル形式です。: ', $type);//jpg、png以外は処理中止
    }

    /** アスペクト比を固定して、リサイズ後の縦の長さを算出
      リサイズ後の横幅は、function image_resizeを実行時に引数として指定済み **/
    $height_resized = ($height_origin / $width_origin) * $width_resized;

    // 新しく描画するキャンバスを作成
    $canvas = imagecreatetruecolor($width_resized, $height_resized);

    //$canvasオブジェクトに画像をリサイズしてコピー
    imagecopyresampled($canvas, $image_origin,0,0,0,0, $width_resized, $height_resized, $width_origin, $height_origin);

    //$canbasオブジェクトを$resize_pathに出力
    switch ($type) {
        case IMAGETYPE_JPEG:
            imagejpeg($canvas, $resize_path.$imagefile);
            break;
        case IMAGETYPE_PNG:
            imagepng($canvas, $resize_path.$imagefile);
            break;
    }

    // 読み出したファイルは消去
    imagedestroy($image_origin);
    imagedestroy($canvas);
}
?>

結果

これで、画像ファイルをリサイズする関数が完成しました。


次回は、この関数を使って、ファイル名で2種類に分類された画像ファイル群を、それぞれ別のサイズにリサイズするという処理を行いたいと思います。


それでは!