이미지 업로드시 썸네일 변환하지 않고 원본 이미지 사용
본문
아래 php파일은 게시판에서 이미지 업로드 시에 이미지를 썸네일로 변환하여 생성 후 외부에서 이미지가 썸네일로 보여지게끔 해주는 구문입니다.
그런데 썸네일 화질이 않좋아서 이 구문을 사용하지 않고 그냥 원본 파일이 보여지게끔하고 싶습니다.
전부다 지워버리니 아예 액박이 뜨거나 안나오더군요ㅜ
무엇을 어떻게 수정하면 좋을지 한번 봐주시길 부탁드립니다...!!
<?
//2011 / 11 / 02 : 장대혁
//-------------------------------------
$w = 236; //변경 너비
$h = 154; //변경 높이
$path = "$g4[path]/data/file/$bo_table/"; //경로명
//-------------------------------------
//--------------------------------------
//현재 등록되어 있는 이미지를 삭제한다
$result = mysql_query("select wr_10 from $write_table where wr_id='{$wr_id}'");
if(mysql_num_rows($result)){
$row = mysql_fetch_array($result);
if($row[wr_10] && file_exists($path.$row[wr_10])) {
@unlink($path.$row[wr_10]);
}
}
//--------------------------------------
//내용을 찾는다
$result = mysql_query("select bf_file from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no limit 1");
if(mysql_num_rows($result))
{
$row = mysql_fetch_array($result);
$source_f = $row[bf_file];
$change_f = "sumnail_{$bo_table}_{$wr_id}";
//이미지 생성 (패스명 , 소스 이미지명 , 변경 이름 , 변경높이 , 변경길이)
$return_val = img_resizer( $path , $source_f , $change_f , $w , $h );
if($return_val){
mysql_query("update $write_table set wr_10 = '{$return_val}' where wr_id='{$wr_id}'");
}
}
?>
<?
//----------------------------------------------
//이미지 사이즈 조정 함수
function img_resizer( $path , $source_f , $change_f , $w , $h )
{
$image_type_arr = array(1=>"gif" , 2=>"jpg" , 3=> "png");
//소스이미지가 존재하는지 확인
$source_file = $path.$source_f;
if( !$source_f || !file_exists($source_file) ){ return ""; }
//--------------------------------
$h=intval($h); //변경높이
$w=intval($w); //변경너비
$timg = @getimagesize($source_file);
$width = $timg[0];
$height = $timg[1];
$change_w = intval($width); //실변경너비
$change_h = intval($height); //실변경높이
//원본 이미지의 비유을 유지 하면 줄인다
//$cmode -> true : 넓이 기준 , false : 높이 기준
if( !$h ){$cmode = true;} //너비만 상관있다
else if( !$w){$cmode = false;} //길이에만집중한다
else if( $width > ( ( $w / $h ) * $height ) ) {$cmode = true;} //정상적인 비율로 줄인다
else {$cmode = false;} //나머지를 정의한다
if($cmode) {
if($width > $w ) {
$change_w = $w ;
$change_h = $height * ( $change_w / $width) ;
}
}
else {
if($height > $h ) {
$change_h = $h ;
$change_w = $width * ( $change_h / $height) ;
}
}
//-------------------------------------
$change_h = intval($change_h);
$change_w = intval($change_w);
/**************************************************************************/
//이미지 형식 정의
$e = $image_type_arr[$timg[2]];
if(!$e){$e=strtolower(substr($source_f,strrpos($src,".")+1)); }
//이미지를 변경한다
$r=1; //정상변경
$image_p = imagecreatetruecolor($change_w , $change_h) or $r=0 ;
//변경파일이름정의
$next_str = substr($source_f , strrpos($source_f,".")) ;
$dst_name = $change_f.$next_str ;
$dst_file = $path.$dst_name ;
//------------------------------------
//이미지 변경
if($r) {
if ($e == "jpg" ) {
$image = ImageCreateFromJpeg($source_file) or $r=0;
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $change_w , $change_h , $width, $height) or $r = 0 ;
imagejpeg($image_p, $dst_file ) or $r = 0 ;
}
elseif ($e == "gif") {
$image = imagecreatefromgif($source_file) ;
imagecopyresampled($image_p , $image , 0, 0, 0, 0, $change_w , $change_h , $width, $height) or $r = 0 ;
imagegif($image_p, $dst_file ) or $r = 0 ;
}
elseif ($e == "png") {
$image = ImageCreateFromPng($source_file) or $r=0;
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $change_w , $change_h , $width, $height) or $r = 0 ;
imagepng($image_p, $dst_file ) or $r = 0 ;
}
elseif ($e == "bmp" || $e == "wbmp") {
$image = ImageCreateFromwbmp($source_file) or $r=0;
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $change_w , $change_h , $width, $height) or $r = 0 ;
imagewbmp($image_p, $dst_file ) or $r = 0 ;
}
else {
$r=0;
}
imagedestroy($image_p);
}
if($r) {
chmod($dst_file , 0606);
imagedestroy($image);
if($dst_name && file_exists($dst_file)) { return $dst_name; }
else{ $r = 0 ; }
}
return $r;
}
?>
답변 1
썸네일 만드는걸 지우시면 리스트같이 외부에 작게 표출할때도 원본파일을 사용해서 사용자가 불편할텐데요... 이렇게 되시면 썸네일을 표출하는 모든 소스를 다 원본파일불러오는걸로 수정하셔야해요.
그리고 썸네일로 변환하는걸 다 지우신 후에 엑박이 뜨는 이유는 썸네일을 보여주게 하는 소스인데 썸네일이 없어서 그래요.
썸네일 생성을 지우지 마시고 원본파일을 보여주려고 하는 페이지의 소스를 썸네일에서 원본소스명이 되는 것으로 바꿔주시면 되요.
답변을 작성하시기 전에 로그인 해주세요.