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

여러가지에 맞춰서 정리를 하고 있는데, 일단 가장 단순한 방법 부터 시도해 보도록 하겠습니다.
썸네일을 만드는 이유에 대해서는 다들 아실거고,
 
썸네일 생성시 가장 큰 문제는 가로 세로 비율입니다.
보통 썸네일은 일정한 크기로 생성해야 하는데, 원본 이미지들의 가로 세로 비율을 제각각 이죠.
 
만약 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;
 }
 
 
 
 
 
 
 
 
  
|

댓글 3개

아마도 제가 찾고있던 답인듯 해요.
갤러리 게시판에서 쓰고싶은데..
어디에다가 위에 코드를 넣어야 하나요?;;
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누4 팁자료실

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

+
제목 글쓴이 날짜 조회
18년 전 조회 2,620
18년 전 조회 5,279
18년 전 조회 3,459
18년 전 조회 2,462
18년 전 조회 3,915
18년 전 조회 3,235
18년 전 조회 3,412
18년 전 조회 3,510
18년 전 조회 3,159
18년 전 조회 5,367
18년 전 조회 1만
18년 전 조회 3,623
18년 전 조회 6,271
18년 전 조회 6,461
18년 전 조회 3,618
18년 전 조회 7,941
18년 전 조회 3,461
18년 전 조회 2,855
18년 전 조회 4,233
18년 전 조회 3,808
🐛 버그신고