첨부파일 이미지 강제 리사이징 소스인데 어렵네요 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

첨부파일 이미지 강제 리사이징 소스인데 어렵네요 정보

첨부파일 이미지 강제 리사이징 소스인데 어렵네요

본문

아래 소스는 write_update.skin.php 에 덧붙여 사용하는 사용자 소스입니다.
일단 말을 듣습니다.
단 이미지가 하나일때만 말을 잘 듣습니다.

두개를 해보니, 만약 두 개가 하나는 가로가 길고 하나는 세로가 긴 사진을 두개를 첨부해서 올리면 아래처럼 같은 47번 게시물인데.. 파일 사이즈/가로/세로 크기가 모두 동일한 값으로 들어가버려 나중에 view.skin에서 세로 사진이 찌그러져 보이는 오류가 있습니다.
어떻게 해야 이미지가 두 개 이상일 때 아래 db에 적절한 값이 들어가게 할까요?'


+-------+-------------+----------+-----------+
| wr_id | bf_filesize | bf_width | bf_height |
+-------+-------------+----------+-----------+
|    47 |      131448 |      555 |      416 |
|    47 |      131448 |      555 |      416 |
+-------+-------------+----------+-----------+

<?


$img_limit_width = 555; // 제한할 이미지 폭
$img_quality = 100; // 이미지 품질

$data_path = $g4[path]."/data/file/$bo_table";
$thumb_path = $data_path.'/thumb';
    $sql2=" select * from $g4[board_file_table] where  bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no asc";
    $results2 = sql_query($sql2);
    for ($d=0; $row2=sql_fetch_array($results2); $d++)  {
if ($_FILES[bf_file][name][$d])
{
$file = $data_path .'/'. $row2[bf_file];
if (preg_match("/\.(jp[e]?g|gif|png)$/i", $file))
{
$size = getimagesize($file);
if ($size[2] == 1)
$src = imagecreatefromgif($file);
else if ($size[2] == 2)
$src = imagecreatefromjpeg($file);
else if ($size[2] == 3)
$src = imagecreatefrompng($file);
else
break;
$rate = $img_limit_width / $size[0];
$height = (int)($size[1] * $rate);

if ($size[0] > $img_limit_width){
@unlink($data_path.'/'.$row2[bf_file]);
$dst = imagecreatetruecolor($img_limit_width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $img_limit_width, $height, $size[0], $size[1]);
imagejpeg($dst, $data_path.'/'.$row2[bf_file], $img_quality);
chmod($data_path.'/'.$row2[bf_file], 0606);

$bf_size = @filesize(addslashes($file));
$sql = " update $g4[board_file_table]
set bf_filesize = '$bf_size', bf_width='$img_limit_width', bf_height='$height'
where  bo_table = '$bo_table' and wr_id = '$wr_id'  ";
sql_query($sql);

 }
 }
 }
 }

?>
  • 복사

댓글 전체

이미지의 사이즈를 구분하실줄 아시는것 같은데 그렇다면 가로사진인지, 세로사진인지 구분해서 리사이징하시면 됩니다.

특히 세로 사진일 경우 세로길이를 임의로 짤라야 합니다.

자세한건 phpschool 가면 많이 나와 있어요 이미지나 리사이징으로 검색하세요
네, 구분은 합니다.
제가 실력이 어중간해서 구분은 하고 소스 이해는 대충하는데..
위의 소스는 열심히 눈알이 빠지도록 봐도.. for 문으로 파일이 2개일 때 각각 불러와서
개별적으로 리사이징 해주고 또 그 값을 db에 넣는것으로 이상이 없어 보이거든요.
근데 결과적으로 db에 들어가는 사이즈는 틀리니.... 질문을 올렸습니다.

추가로 문제점을 더 명확히 하자면, 결과물 즉 이미지는 가로가 길던 세로가 길던 실제 리사이징이 잘 됩니다만 db에 들어가는 가로x세로 값이 항상 동일하다는게 문제입니다.....  나중에 view에서 db의 가로x세로 값을 알아내서 그 값으로 이미지를 보여주거든요 그래서 일그러져요...ㅜㅜ
불편하셨겠어요 제가 그 소스를 사용 안한지 오래되어서 위의 소스를 보면서 수정해 보았는데 테스트는 하지 못했습니다. 아래의 소스를 적용해보세요...

##########################################################################

$img_limit_width = 555; // 제한할 이미지 폭
$img_quality = 100; // 이미지 품질

$data_path = $g4[path]."/data/file/$bo_table";
$thumb_path = $data_path.'/thumb';
    $sql2=" select * from $g4[board_file_table] where  bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no asc";
    $results2 = sql_query($sql2);
    for ($d=0; $row2=sql_fetch_array($results2); $d++)  {
if ($_FILES[bf_file][name][$d])
{
$file[$d] = $data_path .'/'. $row2[bf_file];
if (preg_match("/\.(jp[e]?g|gif|png)$/i", $file[$d]))
{
$size = getimagesize($file[$d]);
if ($size[2] == 1)
$src = imagecreatefromgif($file[$d]);
else if ($size[2] == 2)
$src = imagecreatefromjpeg($file[$d]);
else if ($size[2] == 3)
$src = imagecreatefrompng($file[$d]);
else
break;
$rate = $img_limit_width / $size[0];
$height = (int)($size[1] * $rate);

if ($size[0] > $img_limit_width){
@unlink($data_path.'/'.$row2[bf_file]);
$dst = imagecreatetruecolor($img_limit_width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $img_limit_width, $height, $size[0], $size[1]);
imagejpeg($dst, $data_path.'/'.$row2[bf_file], $img_quality);
chmod($data_path.'/'.$row2[bf_file], 0606);

$bf_size = @filesize(addslashes($file[$d]));
$sql = " update $g4[board_file_table]
set bf_filesize = '$bf_size', bf_width='$img_limit_width', bf_height='$height'
where  bo_table = '$bo_table' and wr_id = '$wr_id'  ";
sql_query($sql);

}
}
}
}
열정님 감사합니다... 근데 현상이 동일합니다...

|    49 |      131448 |      555 |      416 |
|    49 |      131448 |      555 |      416 |
|    50 |      131448 |      555 |      416 |
|    50 |      131448 |      555 |      416 |
+-------+-------------+----------+-----------+

파일사이즈/가로/세로 모두 같은 값으로 무조건 입력이 됩니다...
실제 이미지는 리사이징이 적절하게 됐구요...
$bf_size = @filesize(addslashes($file[$d]));
$sql = " update $g4[board_file_table]
set bf_filesize = '$bf_size', bf_width='$img_limit_width', bf_height='$height'
where  bo_table = '$bo_table' and wr_id = '$wr_id'  ";
sql_query($sql);
여기부분에 bf_width='$img_limit_width', bf_height='$height' 이렇게 되어져 있으니 뭐 같은 비율의 이미지를 넣었다고 한다면 넓이가 555 높이가 416으로 나와야 정상이겠죠 왜냐하면 님께서 넓이 사이즈대로 리사이징을 하시고 같은 비율로 압축을 하니말입니다.
예를 들어서 이미지들이 한 디카로 촬영을 하고 사이즈 비율이 같다면....
꼭 데이터가 정상 작동하는지를 알아 보기 위해서는 700*500 이미지 700*300 이미지 각각 비율이 다르니 테스트를 해보세요. 아마도 넓이 555는 변동 없겠죠 높이만 다르게 나타나야 합니다.
© SIRSOFT
현재 페이지 제일 처음으로