<?
//GD를 이용한 이미지 리사이즈 함수
//$img_file : 원본파일
//$simg_name :리사이즈 파일 : 없을 경우 이미지를 직접출력합니다.
//*리사이즈와 워터 마크를 사용하지 않을 경우 직접 출력하는건 효율성이 떨어집니다.
//(직접 출력의 경우 header가 수정되기 때문에 다른 출력이 있으면 안됩니다.)
//$simg_width :리사이즈 너비
//$simg_height :리사이즈 높이
//* $simg_width와$simg_height 가 둘다 없을 경우 원본크기 그대로 작업합니다.
//$simg_type :리사이즈 파일타입 (1:gif , 2:jpg , 3:png) : 기본 gif
//$simg_str : 워터마크 문자열 (시작 위치:10px,20px ) 폰트는 gulim.ttc 지만, 없을 경우 기본 폰트로 시도한다.
function gd_image_resize($img_file,$simg_name='', $simg_width='', $simg_height='', $simg_type=1,$simg_str=''){
if(!is_file($img_file)){ return '원본 파일이 없습니다.'; }
//if(!$simg_name){ return '리사이즈 파일이름이 없습니다.'; } : 리사이즈 파일 이름이 없으면, 이미지로 그냥 출력합니다.
//if(!$simg_width && !$simg_height){ return '너비 와 높이 둘중 하나는 값이 있어야합니다'; } : 원본 크기로 작업합니다.
// GD 버젼체크
$gd = gd_info();
$gdver = substr(preg_replace("/[^0-9]/", "", $gd['GD Version']), 0, 1);
if(!$gdver) return "GD 버젼체크 실패거나 GD 버젼이 1 미만입니다.";
list($img_width, $img_height, $img_type, $img_attr) = getimagesize($img_file); //소스이미지파일 크기
if(!$simg_width && !$simg_height){
$simg_width = $img_width;
$simg_height = $img_height;
}else if(!$simg_width){
$simg_width = $img_width * ($simg_height/$img_height); //자동 비율생성 : 너비
}else if(!$simg_height){
$simg_height = $img_height * ($simg_width/$img_width); //자동 비율생성 : 높이
}
/*
지원 이미지 타입
1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order),
9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM.
1,2,3 만 지원하도록한다.
*/
if($img_type<1 && $img_type > 3){
return "GIF,JPG,PNG 가 아닙니다.";
}
if($img_type==1){
$img_im = imagecreatefromgif($img_file); //원본 이미지: gif
}else if($img_type==2){
$img_im = imagecreatefromjpeg($img_file); //원본 이미지: jpg
}else if($img_type==3){
$img_im = imagecreatefrompng($img_file); //원본 이미지: png
}else{
return "지원되는 이미지형식(GIF,JPG,PNG)이 아닙니다.";
}
if($gdver >= 2){ //GD 2.XX : truecolor로 작업한다.
$simg_im = imagecreatetruecolor($simg_width, $simg_height);
imagecopyresampled($simg_im, $img_im, 0, 0, 0, 0, $simg_width, $simg_height,$img_width, $img_height); //이미지를 리사이즈한다.
}else{ //GD 1.xxx
$simg_im = imagecreate($simg_width, $simg_height);
imagecopyresized($simg_im, $img_im, 0, 0, 0, 0, $simg_width, $simg_height,$img_width, $img_height); //이미지를 리사이즈한다.
}
if($simg_str){
$color_000000 = imagecolorallocate($simg_im, 0, 0, 0); //색상 : 검정
$color_FFFFFF = imagecolorallocate($simg_im, 0xFF, 0xFF, 0xFF); //색상 : 흰색
$simg_str = iconv("EUC-KR","UTF-8",$simg_str); // UTF-8로 한글 변경
$font_file = dirname(dirname(__FILE__)).'/_m_comm/HYCYSM.TTF';
@imagettftext($simg_im, 10, 0, 6, 21, $color_000000, $font_file,$simg_str); //글자 적기
@imagettftext($simg_im, 10, 0, 5, 20, $color_FFFFFF, $font_file,$simg_str); //글자 적기
// @imagettftext($simg_im, 10, 0, 12, 22, $color_000000, "",$simg_str); //글자 적기
// @imagettftext($simg_im, 10, 0, 10, 20, $color_FFFFFF, "",$simg_str); //글자 적기
}
if($simg_name){
if($simg_type==1){
imagegif($simg_im,$simg_name); //원본 이미지: gif
}else if($simg_type==2){
imagejpeg($simg_im,$simg_name,80); //원본 이미지: jpg
}else if($simg_type==3){
imagepng($simg_im,$simg_name); //원본 이미지: png
}
}else{
Header("Content-Disposition: attachment; filename=".basename($img_file));
header("Content-Transfer-Encoding: binary");
if($simg_type==1){
header("Content-type: image/gif"); //이미지 타입에 맞도록 해더 구성
imagegif($simg_im); //원본 이미지: gif
}else if($simg_type==2){
header("Content-type: image/jpg"); //이미지 타입에 맞도록 해더 구성
imagejpeg($simg_im,'',80); //원본 이미지: jpg
}else if($simg_type==3){
header("Content-type: image/png"); //이미지 타입에 맞도록 해더 구성
imagepng($simg_im); //원본 이미지: png
}
}
// 메모리에 있는 그림 삭제
imagedestroy($img_im);
imagedestroy($simg_im);
return '이미지 리사이즈 완료';
}
?>
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=45236