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'>";
?>
// 설정 및 원본 파일
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
$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
2
댓글 5개

아거 이거 수고하셨습니다~ GD엔진을 한번써봐야 하는데 도전해보겠습니다.

와웅 불당님 알라븅 ~~ ^^
jQuery의 갤러리 팁중에는 갤러리 보기를 할 때 자동으로 썸을 만들어주는 기능도 있어요. 갤러리 관련 팁을 쫙~ 둘러보세요. 클쿠 구글 api도 간단하게 만들어져 있어요.
个