원본 이미지 파일 자체를 리사이즈 하는 방법은 없나요? > 그누4 질문답변

그누4 질문답변

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

원본 이미지 파일 자체를 리사이즈 하는 방법은 없나요? 정보

원본 이미지 파일 자체를 리사이즈 하는 방법은 없나요?

본문

게시물에 올리는 원본 이미지 자체를 리사이징 하는 방법을 찾고 있습니다.

우선 검색해서 나오는 두가지 방법이 있는데… 아래와 같은 에러가 있어서요.
원본 이미지의 파일 자체를 width 값 + 비율로 리사이즈 하는 방법을 알고 싶어요.
불당리사이즈의 경우엔 원본을 남기게 되는데… 제 경우엔 트래픽 보다는 서버 용량 때문이라… 다른 방법을 찾고 있습니다.


http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=45885

write.update.skin 을 수정 하는 방법;
한 게시물에 여러 파일을 올릴 경우, 두번째 파일 부터는 리사이즈가 안됨.




http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=117780

bbs/write_update.php 를 수정하는 방법;
여러개의 이미지를 올릴 경우 에러가 뜸.


Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 6816 bytes) in /home3/hosting_users/…………/www/bbs/write_update.php on line 259
(255라인 부터 적으면
            $size = getimagesize($dest_file);
            if ($size[2] == 1)
                $src = imagecreatefromgif($dest_file);
            else if ($size[2] == 2)
                $src = imagecreatefromjpeg($dest_file);
            else if ($size[2] == 3)
                $src = imagecreatefrompng($dest_file);
)

댓글 전체

출처 : http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=8179&sca=&sfl=wr_subject%7C%7Cwr_content&stx=aaaa+bbbb

//////////////////////////// 요기부터 내용추가요부터
//////////////////////////// 요기까지 추가내용 끝부분 붙여보세요~!!

bbs/write_update.php 파일내용 중에서

// 업로드된 파일 내용에서 가장 큰 번호를 얻어 거꾸로 확인해 가면서
// 파일 정보가 없다면 테이블의 내용을 삭제합니다.
$row = sql_fetch(" select max(bf_no) as max_bf_no from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' ");
for ($i=(int)$row[max_bf_no]; $i>=0; $i--)
{
    $row2 = sql_fetch(" select bf_file from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$i' ");

    // 정보가 있다면 빠집니다.
    if ($row2[bf_file]) break;

    // 그렇지 않다면 정보를 삭제합니다.
    sql_query(" delete from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$i' ");
}
////////////////////////////////////////// ////////////// 요기부터 내용추가요~!!
if ($bo_table != "aaaa" && $bo_table != "bbbb" ) { // 제외시킬 게시판 명
$img_limit_width = 660; // 제한할 이미지 폭
$img_quality = 100; // 이미지 품질
$data_path = $g4[path]."/data/file/$bo_table";
    $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]);
// imagepng($dst, $data_path.'/'.$row2[bf_file], $board[bo_2]);
//이부분이 png 압축방식이어서 이미지 커졌나 봅니다.
//아래처럼 하니 줄어드는 것을 확실히 느껴집니다....^^   
imagejpeg($dst, $data_path.'/'.$row2[bf_file], $img_quality);
chmod($data_path.'/'.$row2[bf_file], 0606);
//---------->madem님이 알려주신 부분입니다.^^
$bf_size = @filesize(addslashes($file));
$sql = " update $g4[board_file_table]
set bf_filesize = '$bf_size'
where  bo_table = '$bo_table' and wr_id = '$wr_id'  ";
sql_query($sql);
 //---------->madem님이 알려주신 부분입니다.^^
 }
 }
 }
 }
}

//////////////////////////////////////////////////////// 요기까지 추가내용 끝
//------------------------------------------------------------------------------

// 비밀글이라면 세션에 비밀글의 아이디를 저장한다. 자신의 글은 다시 패스워드를 묻지 않기 위함
ㅠ ㅁ ㅠ 아… 감사합니다.
그. 근데…
width 가 1000픽셀 정도인 1메가 미만의 이미지파일은 문제가 없는데,
2000픽셀이 넘어가는 1.4M 넘어가는 이미지파일로 테스트를 해보니…
아래와 같은 에러가 뜨네요.


Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 9088 bytes) in /home3/hosting_users/……/www/bbs/write_update.php on line 561

561 줄은 $src = imagecreatefromjpeg($file);  입니다. 아마도…  jpeg 일때 이미지 리사이즈에 메모리가 과하게 사용되는 듯한…;;; 호스팅업체 쪽에선 메모리를 증설해줄 수 없는 것 같더군요…
그래서 소스를 어떻게든 수정하려고 하는데 … 으아;; 잘 모르겠어요.
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT