반응형

// 첨부파일 원본 +  110 * 110 crop 사이즈 입니다

// 이미지경로, 이미지명, 워터마크결정, width, height, 이미지타입, 썸내일 width, 썸네일 height, crop&ratio

public function getThumb($path, $name, $folder, $mark = 0, $width, $height, $type, $setWidth = 0,$setHeight = 0, $ratio = "ratio")
{                                    
 $setImg = $path."/".$name;        
 $checkDir = $path."/".$folder;
 $thumbImg = $checkDir."/".$name;

 // thumb 폴더생성
 if(!is_dir(checkDir)){    
  @mkdir($checkDir);
  @chmod($checkDir,0777);
 }

 switch($type)
 {
  case 'gif' :
  $source = imagecreatefromgif($setImg);
  break;

  case 'jpeg' :
  case 'jpg' :
  $source = imagecreatefromjpeg($setImg);
  break;

  case 'png' :
  $source = imagecreatefrompng($setImg);
  break;

  case 'wbmp' :
  case 'bmp' :
  $source = imagecreatefromwbmp($setImg);
  break;

  default :
  return false;
 }

// 아래있음
$resizeImg = self::GetImgSize($width, $height, $setWidth, $setHeight, $ratio);

//  구해진 크기의 이미지 크기를
if($ratio=="ratio")    
{
 $resizeWidth = $resizeImg[0];
 $resizeHeight = $resizeImg[1];
 $thumb = imageCreatetruecolor($resizeWidth, $resizeHeight);            
}
// 썸네일 크기 crop
else                
{
 $resizeWidth = $resizeImg[0];
 $resizeHeight = $resizeImg[1];
 $thumb = imageCreatetruecolor($setWidth, $setHeight);            
}    

if($source)
{            
 $x = 0;
 $y = 0;
 ImageCopyResampled($thumb, $source, $x, $y, 0, 0, $resizeWidth, $resizeHeight, $width, $height);

  // 워터마크 값이 들어오면 워터마크 찍고..
  if($mark==1)
  {
  $markImg = "mark.png";                
  $imgWaterMark = imagecreatefrompng($markImg);

  // 썸네일가로, 썸네일 세로
  $overlay_img = imagecreatetruecolor($resizeWidth, $resizeHeight);                        
  imagecopy($overlay_img, $imgWaterMark, 0,0,0,0, $resizeWidth, $resizeHeight);                
  imagedestroy($imgWaterMark);

  $bg  = imagecolorallocate($overlay_img, 0x00, 0x00, 0x00);
  imagecolortransparent($overlay_img, $bg);

  // 썸네일 이미지, 워터마크 이미지
  imagecopymerge($thumb, $overlay_img, 0,0,0,0,$resizeWidth,$resizeHeight,50);
  imagecolorallocate($thumb, 255, 255, 255);
  }                

  // 파일을 쓰고 끝냄
  switch($type)
  {
  case 'gif' :
  $output = imagegif($thumb, $thumbImg, 80);
  break;
  case 'jpeg' :
  case 'jpg' :
  $output = imagejpeg($thumb, $thumbImg, 80);
  break;
  case 'png' :
  $output = imagepng($thumb, $thumbImg, 80);
  break;
  case 'wbmp' :
  case 'bmp' :
  $output = imagewbmp($thumb, $thumbImg, 80);
  break;
  }            
 }
 else
 {    
  return false;
 }    

 chmod($thumbImg, 0777);
 imagedestroy($source);
 imagedestroy($thumb);
 return true;
}    

/************** 이미지 사이즈 구하기 ***********************/
public function GetImgSize($width, $height, $resizeWidth = 0, $resizeHeight = 0, $ratio="ratio")
{

 if(!$resizeWidth) $resizeWidth = 110;
 if(!$resizeHeight) $resizeHeight = $resizeWidth;

 if($width > $resizeWidth || $height > $resizeHeight)
 {

  ## 크롭이면
  if($ratio=='crop')                        
  {
  $width_per = $resizeWidth / $width;
  $height_per = $resizeHeight / $height;

  if($width_per < $height_per)
  {
    $per = $height_per;
  }
  else
  {
    $per = $width_per;
  }

  $resize[0] = (int)($width * $per);
  $resize[1] = (int)($height * $per);
 
  }
  ## 아니면 비율
  else if($ratio=='ratio')                
  {
  // 넓이가 더크면 넓이는 지정사이즈, 높이는 비율에 맞추고
  if($width > $height)                
  {
    $resize[0] = $resizeWidth;
    $resize[1] = ceil(($height * $resizeWidth) / $width);
  }
  // 요고는 반대...
  else if($width < $height)            
  {                    
    $resize[0] = ceil(($width * $resizeHeight) / $height);
    $resize[1] = $resizeHeight;
  }
  else
  {
    $resize[0] = $resizeWidth;
    $resize[1] = $resizeHeight;
  }
  // 구해진 width 가 썸네일 width 보다 클 경우
  if($resize[0] > $resizeWidth)        
  {
    $resize[0] = $resizeWidth;
  }
  // 구해진 height 가 썸네일 height 보다 클 경우
  else if($resize[1] > $resizeHeight)    
  {
    $resize[1] = $resizeHeight;
  }
  }
 }
 else
 {
  $resize[0] = $width;
  $resize[1] = $height;
 }
 return $resize;
}

반응형

'Web > PHP' 카테고리의 다른 글

이미지 리사이징 하여 저장하기  (0) 2009.11.23
디렉토리의 파일 읽어 콘트롤  (0) 2009.11.23
이미지 사이즈 구하기  (0) 2009.11.16
메일보내기 소스  (0) 2009.11.12
날짜관련  (0) 2009.11.12

+ Recent posts