PR

[PHP] 画像を縮小して保存する

前回、リサイズ(縮小用)するときのサイズを求めるものを書きました。

pc.casey.jp » PHP|画像圧縮時のサイズを計算する :
http://pc.casey.jp/archives/2479

今回は、それを使って保存されているJPGファイルのリサイズを CakePHP 上で実際に行ってみました。

サンプル画像


▲truecolor ではないもの、Quality100(89kb


▲truecolor のもの、Quality100(92kb

スポンサードリンク



▲truecolor で Quality92のもの(35kb


▲縮専で同じ設定でだしたもの(34kb

※元画像は巨大すぎるので結果のみ

処理例

	function index(){
		Configure::write('debug', 2);

		// init
		$max_x  = 400;
		$quality= 92;

		// test data
		$file  = WWW_ROOT . "img_original.jpg";
		$output= TMP . "output.jpg";

		if($this->_makeThumbnail($file, $output, $max_x, $quality)){
			debug('OK');
		}else{
			debug('NG');
		}
	}

	/*
	 * by pc.casey.jp, GPL
	 *
	 * TEST RESULT
	 * -----------------------------------------------------
	 *  Original Image File:
	 *    w/X=5184, h/Y=3456, Size=5,910,079
	 *
	 *  Output Image File (imagecreate)[Dirty]:
	 *    w/X=400, h/Y=200, Size=90,281, Quality=100%
	 *
	 *  Output Image File (imagecreatetruecolor):
	 *    w/X=400, h/Y=266, Size=92,958, Quality=100%
	 *  Output Image File (imagecreatetruecolor)[GoodJob]:
	 *    w/X=400, h/Y=266, Size=35,051, Quality=92%
	 *
	 *  Syukusen-kun Image File:
	 *    w/X=400, h/Y=266, Size=34,723, Quality=92%
	 */
	function _makeThumbnail($file, $output, $max_x = 400, $quality = 92){
		// open iamge and get X Y
		if(!$img = @imagecreatefromjpeg($file)) return false;
		list($img_x, $img_y) = getimagesize($file);
	//	$img_x= imagesx($img);		// get x = width, 5184px
	//	$img_y= imagesy($img);		// get y = height, 3456px

		// new size
		$new_y = $this->_getNewImageY($img_x, $img_y, $max_x);

		// create image
		//$new_img = imagecreate($max_x, $new_y);
		$new_img = imagecreatetruecolor($max_x, $new_y);

		// copy image
		imagecopyresampled(
			$new_img,		//
			$img,			// original
			0,				// start x
			0,				// start y
			0,				// original start x
			0,				// original start y
			$max_x,			// w
			$new_y,			// h
			$img_x,			// original w
			$img_y			// original h
		);

		imagedestroy($img);

		// output image
		if(!@imagejpeg($new_img, $output, $quality)) return false;

		return true;
	}

参考文献

コメント