사이즈가 깨지지 않는 썸네일 생성방법 정보
사이즈가 깨지지 않는 썸네일 생성방법본문
여러가지에 맞춰서 정리를 하고 있는데, 일단 가장 단순한 방법 부터 시도해 보도록 하겠습니다.
썸네일을 만드는 이유에 대해서는 다들 아실거고,
썸네일 생성시 가장 큰 문제는 가로 세로 비율입니다.
보통 썸네일은 일정한 크기로 생성해야 하는데, 원본 이미지들의 가로 세로 비율을 제각각 이죠.
만약 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 이하)
$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;
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);
$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);
===>
$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;
}
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
$list[$i]['bo_table'] = $bo_table;
}
추천
0
0
댓글 3개
아마도 제가 찾고있던 답인듯 해요.
갤러리 게시판에서 쓰고싶은데..
어디에다가 위에 코드를 넣어야 하나요?;;
갤러리 게시판에서 쓰고싶은데..
어디에다가 위에 코드를 넣어야 하나요?;;
안되는데요;;;
^^