JPEG画像の縦横比を保ったままリサイズして指定サイズで画像を切り抜くサンプルです。(PHP・GDを利用)
株式会社キャッチアップで働くエンジニアのブログです。
JPEG画像の縦横比を保ったままリサイズして指定サイズで画像を切り抜くサンプルです。(PHP・GDを利用)
// ---------------------------------------------------// JPEG画像の縦横比を保ったままリサイズして指定サイズで切り抜くサンプル// --------------------------------------------------- // 入力ファイル$filename1 = '001_01.jpg'; // 出力ファイル$filename2 = '001_02.jpg'; // 完成画像のサイズ$dst_w = 600;$dst_h = 250;// --------------------------------------------------- // 入力ファイルの縦横サイズを調べるlist($src_w, $src_h, $type) = getimagesize($filename1); // 入力ファイル読み出し$src_image = imagecreatefromjpeg($filename1);var_dump($src_w, $src_h, $type); // ---------------------------------------------------// 完成画像が横長画像// ---------------------------------------------------if ($dst_w > $dst_h) { // ① 横幅をあわせて縦横比を保ったまま縮小拡大する $dst_h_work = $src_h * ($dst_w / $src_w); var_dump($dst_w, $dst_h_work); $dst_image = imagecreatetruecolor($dst_w, $dst_h_work); imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h_work, $src_w, $src_h); // ② 左上の位置を中心から算出 $dst_x = 0; $dst_y = ($dst_h_work / 2) - ($dst_h / 2); // ---------------------------------------------------// 完成画像が縦長画像// ---------------------------------------------------} else { // ① 縦幅をあわせて縦横比を保ったまま縮小拡大する $dst_w_work = $src_w * ($dst_h / $src_h); var_dump($dst_w_work, $dst_h); $dst_image = imagecreatetruecolor($dst_w_work, $dst_h); imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w_work, $dst_h, $src_w, $src_h); // ② 左上の位置を中心から算出 $dst_x = ($dst_w_work / 2) - ($dst_w / 2); $dst_y = 0;} var_dump($dst_x, $dst_y); // 指定した位置とサイズで切り抜く$dst_image = imagecrop($dst_image, ['x' => $dst_x, 'y' => $dst_y, 'width' => $dst_w, 'height' => $dst_h]); // ファイルへ保存imagejpeg($dst_image, $filename2, 85); // 破棄imagedestroy($src_image);imagedestroy($dst_image);