gd_image_resize , gd를 이용한 이미지 리사이즈, 워터마크 함수

<?
//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 '이미지 리사이즈 완료'; 

}
?>
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1