PHP 縦横比をキープしたまま画像をリサイズするサンプルプログラム

前提条件:GDライブラリが使えること

resize関数仕様:

 パラメータ
  $filename:元ファイル名(拡張子を除く)
  $ext:元拡張子
  $resizeWidth:リサイズ後のwidth(デフォルト=640px)

 出力
  リサイズ後の画像で元ファイルが上書きされます。
  ※上書きしたくない場合は、imagexxxx()の第2パラメータにリサイズ後のファイル名を指定してするような作りにして下さい。

function resize($filename, $ext, $resizeWidth = 640){

	list($width, $height) = getimagesize("./".$filename.".".$ext);

	// 縦横のリサイズ後のピクセル数を求める
	$ratio = $resizeWidth / $width;
	$newWidth = $width * $ratio;
	$newHeight = $height * $ratio;

	$baseImage = imagecreatexxxx($filename, $ext);
	if($baseImage === false) return false;

	$newImage = imagecreatetruecolor($newWidth, $newHeight);

	$res = imagecopyresampled($newImage, $baseImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

	$res = imagexxxx($newImage, $filename, $ext);
	if($res === false) return false;

	return true;

}

function imagecreatexxxx($filename, $ext){

	switch($ext){
		case 'jpg':
		case 'jpeg':
			$baseImage = imagecreatefromjpeg("./".$filename.".".$ext);
			break;
		case 'png':
			$baseImage = imagecreatefrompng("./".$filename.".".$ext);
			break;
		case 'gif':
			$baseImage = imagecreatefromgif("./".$filename.".".$ext);
			break;
		default:
			$baseImage = false;
			break;
	}

	return $baseImage;

}

function imagexxxx($newImage, $filename, $ext){

	switch($ext){
		case 'jpg':
		case 'jpeg':
			$res = imagejpeg($newImage, "./".$filename.".".$ext);
			break;
		case 'png':
			$res = imagepng($newImage, "./".$filename.".".$ext);
			break;
		case 'gif':
			$res = imagegif($newImage, "./".$filename.".".$ext);
			break;
		default:
			$res = false;
			break;
	}

	return $res;

}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です