사이즈가 깨지지 않는 썸네일 생성방법 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

사이즈가 깨지지 않는 썸네일 생성방법 정보

사이즈가 깨지지 않는 썸네일 생성방법

본문

여러가지에 맞춰서 정리를 하고 있는데, 일단 가장 단순한 방법 부터 시도해 보도록 하겠습니다.
썸네일을 만드는 이유에 대해서는 다들 아실거고,
 
썸네일 생성시 가장 큰 문제는 가로 세로 비율입니다.
보통 썸네일은 일정한 크기로 생성해야 하는데, 원본 이미지들의 가로 세로 비율을 제각각 이죠.
 
만약 100 * 100 의 썸네일을 생성한다면 비율이 1:1인 원본 이미지들 아주 이쁘게 생성 되지만,
가로세로가 1:3 이나 3:1 인 경우에는 아주 이상한 썸네일이 만들어지게 됩니다.
 
해결방법은 3가지 입니다.
1. 크롭을 하는 방법입니다. 1:1 에서 어긋나버리는 1:2 영역을 무시하고 썸네일을 생성하는겁니다.
(그누보드 일부 스킨들이 이 방식대로 만들더군요.)
  이 경우에 꼭 필요한 영역이 썸네일에서는 잘려져 버릴수 있습니다. 인물사진에서 팔만 나오고 목이 없는 썸네일이 만들어질수 있습니다.
 
2. 가로 세로 썸네일 이미지가  지정한 크기(100*100)을 넘지 않도록 하는 방식입니다.
  생성된 썸네일 크기를 50 * 100 이나 100*50 으로 만드는 것이죠. 이경우 가로세로 비율(rate) 을 이용합니다.
  이경우 이미지 바깥쪽 table 에 width, height 값을 고정하여 전체적으로 이미지가 안정되어 있게 처리해줍니다.
  align=center, valign=middle, 스타일로 테이블에 보더가 보이도록 하면 깔끔하죠..^^
 
3. 1,2 를 조합하여 사용하는 방식입니다. rate 가 특별히 크지 않으면(원본 이미지 비율과 비슷하다면) 그냥 썸네일을 생성하는것입니다. 1 : 1.1 이나 1.1 : 1 은 그냥 1:1로 썸네일을 만드는 것이죠.
 
 
1번은 기존 그누보드에서 처리되는것 같으니까 2번에 대해서만 코드를 올려드리겠습니다.
응용은 각자의 몫인거 아시죠? 스킨은 나중에 별도로 올리겠습니다. 아래 코드는 제가 쓰는 최근게시물 썸네일 생성 부분입니다.
 
$thumb_width = "75"; //목록에서 보여질 썸네일 폭 (픽셀)
$thumb_height = "57"; //목록에서 보여질 썸네일 폭 (픽셀)
$image_quality = "100"; //목록에서 보여질 이미지의 압축률 (100 이하)
 
 $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 = $thumb_width / $size[0];
            $height = (int)($size[1] * $rate);
   
    if($height > $thumb_height) { //지정된 썸네일 높이보다 크게 되면, 비율을 재조정한다.
        $rate = $thumb_height / $size[1];
        $width = (int)($size[0] * $rate);
        $dst = imagecreatetruecolor($width, $thumb_height);
        imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $thumb_height, $size[0], $size[1]);
        imagepng($dst, $thumb_path.'/'.$list[$i][bo_table]."_".$list[$i][wr_id], $image_quality);
   } else {
       $dst = imagecreatetruecolor($thumb_width, $height);
       imagecopyresampled($dst, $src, 0, 0, 0, 0, $thumb_width, $height, $size[0], $size[1]);
       imagepng($dst, $thumb_path.'/'.$list[$i][bo_table]."_".$list[$i][wr_id], $image_quality);
   }
   
   chmod($thumb_path.'/'.$list[$i][bo_table]."_".$list[$i][wr_id], 0606);
 
  
 
  ------------------------------
bo_table 값을 쓰는데 이건 latest.lib.php 코드를 조금 수정합니다.
/lib/latest.lib.php 파일을 열어서 latest() 함수중 다음코드를 합니다.
 for ($i=0; $row = sql_fetch_array($result); $i++) 
        $list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
  ===>
 for ($i=0; $row = sql_fetch_array($result); $i++) {
        $list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
        $list[$i]['bo_table'] = $bo_table;
 }
 
 
 
 
 
 
 
 
  
추천
0

댓글 3개

전체 3 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

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