前回、リサイズ(縮小用)するときのサイズを求めるものを書きました。
pc.casey.jp » PHP|画像圧縮時のサイズを計算する :
https://pc.casey.jp/archives/2479
今回は、それを使って保存されているJPGファイルのリサイズを CakePHP 上で実際に行ってみました。
サンプル画像

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

▲truecolor のもの、Quality100(92kb)
スポンサードリンク

▲truecolor で Quality92のもの(35kb)
※元画像は巨大すぎるので結果のみ
処理例
	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;
	}
参考文献
- 画像を拡大・縮小する方法 [PHP – 画像 – Tips] :
画像を拡大・縮小する方法 [PHP - 画像 - Tips] - 離れPHP島 :
離れPHP島 


コメント