input의 이름이 pic라는 가정으로 아래와 같이 진행하시면 됩니다.
if($_FILES['pic']['name']){ // 파일명을 time함수를 이용해서 숫자로 변환하기
$tmp = explode(".",$_FILES['pic']['name']);
$ext = end($tmp);
$fn = time().".".$ext;
$fn = strtolower($fn);
}
move_uploaded_file( $_FILES['pic']['tmp_name'], "./data/".$fn); // data폴더에 파일을 업로드
$src = "./data/".$fn; // 원본파일
$dst = "./data/".$fn; // 대상파일(덮어쓸꺼라 같은이름으로 처리)
$quality = '80'; //-- jpg 퀄리티
$size = '1500'; //-- 줄일 크기 pixel (너비, 또는 높이에 적용)
//$ratio = '4:3'; //-- 이미지를 4:3 비율로 잘라냄
$ratio = 'false'; //-- 원본 이미지비율을 유지
$get_size = _getimagesize($src, $size, $ratio);
$result = resize_image($dst, $src, $get_size, $quality, $ratio);
// 사용함수들
function resize_image($destination, $departure, $size, $quality='80', $ratio='false'){
if($size[2] == 1) //-- GIF
$src = imagecreatefromgif($departure);
elseif($size[2] == 2) //-- JPG
$src = imagecreatefromjpeg($departure);
else //-- $size[2] == 3, PNG
$src = imagecreatefrompng($departure);
$dst = imagecreatetruecolor($size['w'], $size['h']);
$dstX = 0;
$dstY = 0;
$dstW = $size['w'];
$dstH = $size['h'];
if($ratio != 'false' && $size['w']/$size['h'] <= $size[0]/$size[1]){
$srcX = ceil(($size[0]-$size[1]*($size['w']/$size['h']))/2);
$srcY = 0;
$srcW = $size[1]*($size['w']/$size['h']);
$srcH = $size[1];
}elseif($ratio != 'false'){
$srcX = 0;
$srcY = ceil(($size[1]-$size[0]*($size['h']/$size['w']))/2);
$srcW = $size[0];
$srcH = $size[0]*($size['h']/$size['w']);
}else{
$srcX = 0;
$srcY = 0;
$srcW = $size[0];
$srcH = $size[1];
}
@imagecopyresampled($dst, $src, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);
@imagejpeg($dst, $destination, $quality);
@imagedestroy($src);
@imagedestroy($dst);
return TRUE;
}
// $img : 원본이미지
// $m : 목표크기 pixel
// $ratio : 비율 강제설정
function _getimagesize($img, $m, $ratio='false'){
$v = @getImageSize($img);
if($v === FALSE || $v[2] < 1 || $v[2] > 3)
return FALSE;
$m = intval($m);
if($m > $v[0] && $m > $v[1])
return array_merge($v, array("w"=>$v[0], "h"=>$v[1]));
if($ratio != 'false'){
$xy = explode(':',$ratio);
return array_merge($v, array("w"=>$m, "h"=>ceil($m*intval(trim($xy[1]))/intval(trim($xy[0])))));
}elseif($v[0] > $v[1]){
$t = $v[0]/$m;
$s = floor($v[1]/$t);
$m = ($m > 0) ? $m : 1;
$s = ($s > 0) ? $s : 1;
return array_merge($v, array("w"=>$m, "h"=>$s));
} else {
$t = $v[1]/intval($m);
$s = floor($v[0]/$t);
$m = ($m > 0) ? $m : 1;
$s = ($s > 0) ? $s : 1;
return array_merge($v, array("w"=>$s, "h"=>$m));
}
}