이미지 업로드시 썸네일 변환하지 않고 원본 이미지 사용 채택완료
초얌
9년 전
조회 6,497
아래 php파일은 게시판에서 이미지 업로드 시에 이미지를 썸네일로 변환하여 생성 후 외부에서 이미지가 썸네일로 보여지게끔 해주는 구문입니다.
그런데 썸네일 화질이 않좋아서 이 구문을 사용하지 않고 그냥 원본 파일이 보여지게끔하고 싶습니다.
전부다 지워버리니 아예 액박이 뜨거나 안나오더군요ㅜ
무엇을 어떻게 수정하면 좋을지 한번 봐주시길 부탁드립니다...!!
</p><p><?
//2011 / 11 / 02 : 장대혁
//-------------------------------------
$w = 236; //변경 너비
$h = 154; //변경 높이
$path = "$g4[path]/data/file/$bo_table/"; //경로명
//-------------------------------------</p><p>//--------------------------------------
//현재 등록되어 있는 이미지를 삭제한다
$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]);
}
}
//--------------------------------------</p><p>//내용을 찾는다
$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}'");
}
}
?></p><p>
<?
//----------------------------------------------
//이미지 사이즈 조정 함수
function img_resizer( $path , $source_f , $change_f , $w , $h )
{
$image_type_arr = array(1=>"gif" , 2=>"jpg" , 3=> "png");</p><p> //소스이미지가 존재하는지 확인
$source_file = $path.$source_f;
if( !$source_f || !file_exists($source_file) ){ return ""; }</p><p> //--------------------------------
$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;
}
?></p><p>
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
9년 전
썸네일 만드는걸 지우시면 리스트같이 외부에 작게 표출할때도 원본파일을 사용해서 사용자가 불편할텐데요... 이렇게 되시면 썸네일을 표출하는 모든 소스를 다 원본파일불러오는걸로 수정하셔야해요.
그리고 썸네일로 변환하는걸 다 지우신 후에 엑박이 뜨는 이유는 썸네일을 보여주게 하는 소스인데 썸네일이 없어서 그래요.
썸네일 생성을 지우지 마시고 원본파일을 보여주려고 하는 페이지의 소스를 썸네일에서 원본소스명이 되는 것으로 바꿔주시면 되요.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
초얌
9년 전
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
원본파일이 출력 되려면 어떻게 해야할까요?
//원본 이라고 주석처리된 부분의 $list[$i][file][0][file] 이 명령어가 원본파일을 가져 오지 못하는 것 같아요...
[code]
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once("./gnu/lib/thumb.lib.php");
//$cols = 1; // 이미지 가로갯수 // 이미지 세로 갯수는 메인에서 지정(총 이미지 수)
//$image_h = 1; // 이미지 상하 간격
$col_width = (int)(99 / $cols);
$data_path = "./gnu/data/file/$board_id";
$thumb_path = $data_path;
?>
<div class="moa_main_cont_right02">
<ul>
<?
for ($i=0; $i<count($list); $i++) {
$image = $list[$i][file][0][file]; //원본
$img=$data_path. "/".$image; //썸네일이 없을경우 원본출력
$thumb = $thumb_path. "/". $list[$i][wr_10];
if ( file_exists($thumb) )
$img = $thumb;
//$style = "font-family:돋움; font-size:9pt; color:#636363;";
//if ($list[$i][icon_new])
//$style = "style='font-family:돋움; font-size:9pt; color:#006F00;' ";
//$subject = $list[$i][subject]; //제목 글자수 자르기
//$bg = ""; //새글?
//if ($list[$i][icon_new])
// $bg="la_top_2.gif";
//else
// $bg="la_top_1.gif";
//echo $list[$i][icon_reply] . " ";
echo "<li><a href='{$list[$i]['wr_link1']}'><img src='$img' border='0' width='236px' height='154px'></a></li>";
//echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>";
//echo " <tr><td valign='top' align='center' width=80><a href='{$list[$i]['href']}'><img src='$img' width='75' height='60' border='0'></a></td>";
//echo " <td height='21' valign=top style='padding-left:5px;'><table width='100%' cellpadding='0' cellspacing='0' border='0'><tr><td><a href='{$list[$i]['href']}' style='color:#666666;'><b>{$subject}</b></a></td></tr><tr><td><a href='{$list[$i]['href']}' style='color:#666666;'>".cut_str(strip_tags($list[$i][wr_content]),50)."</a></td></tr></table></td></tr></table>";
}
?>
</ul>
</div>
<?
$cnt = ($i%$cols);
for ($k=$cnt; $k<$cols && $cnt; $k++) {
echo "<td width=$col_width%> </td>";
}
if (count($list) == 0) { echo "<td height=80 align=center>게시물이 없습니다.</td>"; }
[/code]