GD 라이브러리를 이용한 섬네일 이미지 만들기 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

GD 라이브러리를 이용한 섬네일 이미지 만들기 정보

GD 라이브러리를 이용한 섬네일 이미지 만들기

본문

<?php
// 설정 및 원본 파일
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
$r_filename = 'a1.gif';
$r_last_name = "_thumbnail";
$r_save_root = ".";

// 썸내일 크기
$r_img_width = 100;
$r_img_height = 75;

// jpg일경우 압축률
$r_zip = 80;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

// 파일이름 변경
$r_file_name = explode(".", $r_filename);
$r_cnt_name = count($r_file_name)-1;

// 파일이름에서 확장자를 제외한 순수이름에 "_thumbnail"를 붙인다.
for($i=0; $i<$r_cnt_name; $i++){
 if($i > 0) $r_re_name = ".".$r_re_name;
 $r_re_name = $r_re_name.$r_file_name[$i];
}
$r_re_name = $r_re_name.$r_last_name;

// GD 버젼체크
$r_gd = gd_info();
$r_gdver = substr(preg_replace("/[^0-9]/", "", $r_gd['GD Version']), 0, 1);
if(!$r_gdver){
 echo "GD 버젼체크 실패거나 GD 버젼이 1 미만입니다.";
 echo "<br>GD 버젼 $gdver";
 exit;
}

// 이미지 비률 수정및 이미지 포멧방식 체크
list($r_width, $r_height, $r_img_type) = getimagesize($r_filename);

// 확장자가 GIF,JPG,PNG 가 안일시에 에러메시지 출력
if($r_img_type<1 && $r_img_type > 3){
    echo "GIF,JPG,PNG 가 아닙니다.";
 exit;
}

// 이미지 크기 검사
if($r_img_width < $r_width && $r_img_height < $r_height){ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 클때
 // 가로 크기를 기준으로 섬네일 가로크기비률에 맞춰 사이즈를 조정한다.
 $r_percent = $r_width / $r_img_width;
 $r_new_width = $r_width / $r_percent;
 $r_new_height = $r_height / $r_percent; 
 // 위에서 사이즈 조정을 했을시 여백이 생긴다면 다시 세로를 기준으로 사이즈를 조정한다.
 if($r_img_height > $r_new_height){
  $r_percent = $r_height / $r_img_height;
  $r_new_width = $r_width / $r_percent;
  $r_new_height = $r_height / $r_percent; 
 }
}else if($r_img_width > $r_width && $r_img_height > $r_height){ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 작을때
 // 생성될 이미지 사이즈와 원본이미지 사이즈의 크기를 모두 같이 설정한다. 이때 섬네일 사이즈는 무시한다.
 $r_img_width = $r_width;
 $r_img_height = $r_height;
 $r_new_width = $r_width;
 $r_new_height = $r_height;
}else{ // 섬내일 가로, 세로 크기보다 이미지 가로 또는 세로 어느한쪽이 크거나 작을때
 $r_new_width = $r_width;
 $r_new_height = $r_height;


// 섬내일과 축소된이미지의 가로 크기를 비교하여 잘라낼 위치를 찾는다.
if($r_img_width == $r_new_width){
 $r_over_width = 0;
}else{
 $r_over_width = ($r_img_width - $r_new_width)*0.5;
}

// 섬내일과 축소된이미지의 세로 크기를 비교하여 잘라낼 위치를 찾는다.
if($r_img_height == $r_new_height){
 $r_over_height = 0;
}else{
 $r_over_height = ($r_img_height - $r_new_height)*0.2;
}

// 기본바탕색의 지정된 섬내일 사이즈의 이미지틀을 만든다.
$r_image_p = imagecreatetruecolor($r_img_width, $r_img_height); //이 함수는 GD 2.0.1 이상이 필요합니다. (2.0.28 이상을 권장합니다)

// 확장자를 구별하여 이미지 포멧을 변환한다.
if($r_img_type == 1){
 $r_image = imagecreatefromgif($r_filename);
}else if($r_img_type == 2){
 $r_image = imagecreatefromjpeg($r_filename);
}else if($r_img_type == 3){
 $r_image = imagecreatefrompng($r_filename);
}

// 원본이미지의 사이즈를 위에서 계산된 비률에 맞게 사이즈를 축소하고 섬내일 크기로 잘라낸다.
$r_image_s = imagecopyresampled($r_image_p, $r_image, $r_over_width, $r_over_height, 0, 0, $r_new_width, $r_new_height, $r_width, $r_height);

// 포멧에 맞추어 이미지를 저장한다.
if($r_img_type == 1){
 $r_re_name = $r_save_root."/".$r_re_name.".gif";
 imagegif($r_image_p, $r_re_name);
}else if($r_img_type == 2){
 $r_re_name = $r_save_root."/".$r_re_name.".jpg";
 imagejpeg($r_image_p, $r_re_name, $r_zip);
}else if($r_img_type == 3){
 $r_re_name = $r_save_root."/".$r_re_name.".png";
 imagepng($r_image_p, $r_re_name);
}

// 메모리에 있는 그림 삭제
imagedestroy($r_image_p);

//이미지를 출력한다.
echo "<img src='$r_re_name'>";
?>

추천
2
  • 복사

댓글 5개

jQuery의 갤러리 팁중에는 갤러리 보기를 할 때 자동으로 썸을 만들어주는 기능도 있어요. 갤러리 관련 팁을 쫙~ 둘러보세요. 클쿠 구글 api도 간단하게 만들어져 있어요.
© SIRSOFT
현재 페이지 제일 처음으로