【PHP】2種類の連番画像ファイルをそれぞれ別サイズにリサイズする
連番になっていて、かつ、ファイル名が2種類に分けられている画像ファイル群をそれぞれ別のサイズにリサイズしたい!
前提条件
以下で作成した関数をさっそく使いたいと思います。
【PHP】画像ファイルのリサイズをする関数の作成 - ソフトモヒカンの勉強と開発の記録
以下の設定で、画像を2種類のサイズにリサイズしたいと思います
プログラミング
以前に作成した関数になります。画像をリサイズして、リサイズしたファイルを指定したディレクトリに保存します。
今回は、このファイルを「imageReseze_func.php」という名前で使用します。
<?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種類に分けてリサイズします。
<?php //画像リサイズ関数のPHPファイルの読み込み require "imageResize_func.php"; //リサイズした画像の置き場所の確認と作成 $dir_resized = './images_resized/'; if(!file_exists($dir_resized)){ if(mkdir($dir_resized, 0777, true)){ echo $dir_resized."フォルダ作成成功"; }else{ echo $dir_resized."フォルダ作成失敗"; } }else{ echo $dir_resized."フォルダはすでに存在"; } //ディレクトリ内のファイル名一覧の取得 $dir = './images/' ;//ファイルのバス $filename = [];//ファイル名一覧の格納配列 if( is_dir( $dir ) && $handle = opendir( $dir ) ) {//ディレクトリが存在する&開くことが可能である while( ($file = readdir($handle)) !== false ) { if( filetype( $path = $dir . $file ) == "file" ) { $filename[] = $file; } } } /** 正規表現を用いて、p付きか、pなしかを判別 pなしは300px、p付きは600pxへリサイズ **/ $cnt_file = count($filename); $pattern_size = '/_p.*\..*/'; for( $i = 0; $i < $cnt_file; $i++ ){ if( preg_match($pattern_size, $filename[$i]) ){ image_resize(300, $dir, $filename[$i], $dir_resized);//引数:リサイズサイズ(px)、元ファイルのパス、元ファイル名、リサイズファイルの保存先パス }else{ image_resize(600, $dir, $filename[$i], $dir_resized);//引数:リサイズサイズ(px)、元ファイルのパス、元ファイル名、リサイズファイルの保存先パス } } ?>