[수정-파일첨부] 게시물 등록 이미지의 리사이징 관련 > 그누4 질문답변

그누4 질문답변

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

[수정-파일첨부] 게시물 등록 이미지의 리사이징 관련 정보

[수정-파일첨부] 게시물 등록 이미지의 리사이징 관련

첨부파일

gallery_test2.zip (1.9M) 15회 다운로드 2010-07-13 17:23:03

본문

현재 새로 최신버젼에 맞는 스킨작업을 하면서
앞서 썸네일과 관련해서 글을 하나 올렸는데 또 글을 올리게 되네요 죄송~ -_- ;;

우선 이전에 만들어 두었던 스킨(2007년)에서 적용했던 팁입니다
http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=42135


----------------------------------------------------------
write_update.skin.php
----------------------------------------------------------

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

// --- [★★★ 기능] 이미지 리사이징 start ----------------------------------- //
// --- 등록되는 이미지의 가로폭을 강제로 800픽셀로 줄여주는 팁 추가

$thu_quality  = '95';  // 썸네일 해상도
$img_resizing = '800';  // 축소될 이미지 가로픽셀 사이즈 지정

$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_resizing / $size[0];
$height = (int)($size[1] * $rate);

if ($size[0] > $img_resizing){

@unlink($data_path.'/'.$row2[bf_file]);
$dst = imagecreatetruecolor($img_resizing, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $img_resizing, $height, $size[0], $size[1]);
imagejpeg($dst, $data_path.'/'.$row2[bf_file], $thu_quality);
chmod($data_path.'/'.$row2[bf_file], 0707);

$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);
 
}
}
 }
}

// ---------- 이미지 리사이징 end ----------------------------------- //

?>

....... 여기까지


등록되는 이미지의 픽셀이 큰 경우, 지정된 일정한 포맷(예: 800px)으로 줄여서 게시물을 등록하는 내용입니다.
이와 관련해서 몇몇 분들이 응용해서 올려둔 추가 팁들을 참고했습니다만
완전히 해결점을 찾지 못해서 다시 글을 한번 올려봅니다.

★ ★ ★ ★  요점 ★ ★ ★ ★
 
1. 등록게시물에 첨부되는 이미지의 가로픽셀이 일정 픽셀이상(예:800px)넘어갈경우는 무조건
  지정된 pixel로 리사이징해서 등록되게 하려고 합니다
    - 이때, 등록되는 이미지 파일의 수에 상관없이 모두 리사이징 되었으면 합니다

2.  이미지 용량이 지정된 용량 (예: 1Mb)을 넘어가는 경우, 처음부터 등록이 안되도록
    경고메세지와 함께 튕겨주게 하려고 합니다
    (게시판 환경설정에서 업로드 용량제한해봤으나, write_update.skin.php에 위 코드적용시 에러나서 안됨)

3.. 이미지의 가로픽셀이 3000픽셀 정도가 되는경우, 파일용량에 관계없이 리사이징 변환을 거치는 과정에서
    에러가 발생해서 등록이 안되거나 혹은 아~~~~~~~~~~~주 오랜 시간이 걸리는 문제가 발생발생합니다
    .... 코드변경or 튜닝을 통해 리사이징 처리속도를 좀 올릴 방법이 없을런지요.
    ( 현재 테스트로는 1600픽셀정도는 괜찮지만,  3648*2736픽셀의 이미지는 변환자체가 안되고 에러발생 )

이는 2개의 개별 호스팅사에 등록된 계정을 통해 테스트 해본결과,
업체에 따라서  아예 로딩이 오래걸려서 에러가 발생하는 경우도 있네요.

이전에 스킨을 올릴때도 이와 관련해서 정확한 답을 찾지 못해 보류한 문제인데
다시 최신버젼에 맞는 스킨을 작업하려고 하니 .... 혼자서 당체 해결을 할수가 없어 글 드립니다.


★ 기존의 코드와 접목하려는 것이기 때문에 그누보드의 원소스를 변경하지 않는 범위내에서
    이미지 등록시 위 질의한 '리사이징 관련한 팁'들이 필요합니다

★ 위문제가 해결되어야 제대로 된 스킨이 하나 나올듯 한데...도움글을 다시한번 더 부탁드립니다.

댓글 전체

1은 관리자 로긴 되면 파일 용량 상관없이 올라갑니다...다른계정 로긴해서 해보세요~
2번은 위 방법 말고는....모르겠네요....ㅈㅅ;
3번은 위에 소스로 되는거같은데요;;;;

무플방지차...;;
테스트해봤는데 위코드가 들어간 상태에서는 레벨에 상관없으며,
1Mb가 넘는 파일이라도 별도의 경고메세지 없이 에러가 발생~하는듯 합니다
글고 위에 업데이트 스킨이었네요...;
그래도 파일 크기 제한 건거는 먹힐텐데...흠;;;;

if ($_FILES[bf_file][name][$d])를
if($row2[bf_file])바꿔보세요..
글고 어떤 오류가 나시는지...;
현재 작업중인 갤러리 스킨파일 파일 첨부합니다.
그리도 테스트용 이미지 2개도 함께 첨부합니다

테스트용 이미지는 똑같이 3000픽셀이상의 이미지이며,
차이는 하나는 1Mb이상 하나는 1Mb이하입니다

테스트 게시판 환경은
파일업로드 용량을 1MB로 한경우와 3MB로 한경우 등으로 바꿔서 테스트하고
첨부된 테스트용 이미지를 각각 업로드하는 방식으로 테스트

위 질의한 리사이징 관련해서는 write_update.skin.php에 한해서 코드가 적용되어 있습니다
위 첨부파일로 해봤는데 오류는 안뜨는데요..ㅡㅡ?
시간이 좀 길긴기네요..

용량 큰파일 팅구는거는 글 먼저 넣은 다음에 파일을 올리기 때문에 파일크다고 팅구기 전에 글이 먼저 등록 되어버립니다....이것은 write_update.skin.php에서 del()함수로 파일크기 오버되면 지워 버리는게 젤 나을꺼 같습니다.

첨부파일 전부 리사이즈는 되어있네요..

삭제부분은..
bbs/delete.php,bbs/delete_all.php에서  delete.head.skin.php, delete_all.head.skin.php 인클루드하네요...이름 바꿔주시면 될듯하고요....

수정은...write_update.skin.php 하단에
@unlink("$g4[path]/data/file/$bo_table/thumb/$write[wr_id]");
이거 if ($w == 'u')로 감싸주고..

3000픽셀 넘는 사진은 없어서 못해봤구여..

글고...
imagecopyresampled() 이거 말고 ...
ImageCopyResized($dst,$src,0,0,0,0,$img_resizing,$height,$size[0],$size[1]);
 일케 리사이즈 하는 방법도 있던데.....속도는 머 ....비슷비슷한거 같네요....퀄리티는 약간 떨어진다네요..

어렵네요....;;;;;;;힘내삼~~
전이만..ㅎㅎ;
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

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