小金井にあるWEB制作会社の備忘録

MEMORANDUM

PHPでホームページに表示される画像をリサイズ

レスポンシブ対応での作成がメインとなり、大きな画像を使う機会が増えてきています。本来であれば機種に合わせて画像を用意するのが良いのですが、数が多いと対応が難しい場合もあるので、PHPでリサイズする方法をメモ。

PHP(resize.php)

//値を取得
$img_tmp = htmlspecialchars($_GET['img'], ENT_QUOTES, 'UTF-8');

//画像サイズを取得
$imgary = getimagesize($img_tmp);
$srcwidth = $imgary[0];
$srcheight = $imgary[1];
$srctype = $imgary[2];

//リサイズサイズの設定
$newwidth = 200;
$newheight = $srcheight * $newwidth / $srcwidth;

// 加工前のファイルをフォーマット別に読み出す(今回はjpg、gif、pngのみ対応)
switch ($srctype) {
	case 1:
		$original_image = imagecreatefromgif($img_tmp);
		break;
	case 2:
		$original_image = imagecreatefromjpeg($img_tmp);
		break;
	case 3:
		$original_image = imagecreatefrompng($img_tmp);
		break;
	default:
		echo('対応していないファイル形式です。: '.$srctype);
		exit();
}

//元画像を縮小してコピー
$newimage = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($newimage, $original_image, 0, 0, 0, 0, $newwidth, $newheight, $srcwidth, $srcheight);

// コピーした画像を出力する
switch ($srctype) {
	case 1:
		header('Content-type: image/gif');
		imagegif($newimage);
		break;
	case 2:
		header('Content-type: image/jpeg');
		imagejpeg($newimage);
		break;
	case 3:
		header('Content-type: image/png');
		imagepng($newimage);
		break;
	default:
		exit();
}

//リソースを解放
imagedestroy($original_image);
imagedestroy($newimage);

まずは「getimagesize」関数を使ってリサイズしたい画像の情報を取得。
取得情報をもとにリサイズの設定を行ったら、次に「imagecopyresampled」関数で元画像を縮小コピー。
最後は「imagejpeg」関数(jpegの場合)で出力。

実際にHTMLタグの中に組み込む場合は、下記のような使用方法になります。

HTML

<figure><img src="resize.php?img=対象画像のURL"></figure>