게시글 이미지에 워터마크 로고로 넣기
/www/config.php 에 다음 코드 추가
define('G5_IMG_PATH', G5_PATH.'/'.G5_IMG_DIR);
/www/lib/thumbnail.lib.php 에서 다음 위치에 코드 추가
// 게시글보기 썸네일 생성
function get_view_thumbnail($contents, $thumb_width=0)
{
~(생략)
// 썸네일 생성
if(!$is_animated)
$thumb_file = thumbnail($filename, $filepath, $filepath, $thumb_width, $thumb_height, false);
else
$thumb_file = $filename;
if(!$thumb_file)
continue;
if ($width) {<br />
$thumb_tag = '<img alt="'.$alt.'" src="'.G5_URL.str_replace($filename, $thumb_file, $data_path).'" />';<br />
} else {<br />
$thumb_tag = '<img alt="'.$alt.'" src="'.G5_URL.str_replace($filename, $thumb_file, $data_path).'" />';<br />
}
(위 코드가 sir.kr에서 정상적으로 나오지 않는 경우 아래 그림 코드 참조)

(이곳에 다음 코드를 추가)
/*썸네일에 로고를 워터마크로*/
$ALIGN_CENTER = false;
$IMAGE_PATH = G5_PATH.str_replace($filename, $thumb_file, $data_path);
$WATERMARK_PATH = G5_IMG_PATH.'/title_logo.png'; //G5_IMG_PATH : define('G5_IMG_PATH', G5_PATH.'/'.G5_IMG_DIR);
$IMAGE_TYPE = strtolower(substr($IMAGE_PATH, strlen($IMAGE_PATH)-4, 4));
$WATERMARK_TYPE = strtolower(substr($WATERMARK_PATH, strlen($WATERMARK_PATH)-4, 4));
if($IMAGE_TYPE == '.bmp') $image = imagecreatefromwbmp($IMAGE_PATH);
if($IMAGE_TYPE == '.gif') $image = imagecreatefromgif($IMAGE_PATH);
if($IMAGE_TYPE == '.jpg') $image = imagecreatefromjpeg($IMAGE_PATH);
if($IMAGE_TYPE == '.png') $image = imagecreatefrompng($IMAGE_PATH);
if($image) {
if($WATERMARK_TYPE == '.bmp') $watermark = imagecreatefromwbmp($WATERMARK_PATH);
if($WATERMARK_TYPE == '.gif') $watermark = imagecreatefromgif($WATERMARK_PATH);
if($WATERMARK_TYPE == '.jpg') $watermark = imagecreatefromjpeg($WATERMARK_PATH);
if($WATERMARK_TYPE == '.png') $watermark = imagecreatefrompng($WATERMARK_PATH);
if($watermark) {
list($IMAGE_W, $IMAGE_H) = getimagesize($IMAGE_PATH);
list($WATERMARK_W, $WATERMARK_H) = getimagesize($WATERMARK_PATH);
if($ALIGN_CENTER) { // Center
$POS_X = (($IMAGE_W - $WATERMARK_W)/2);
$POS_Y = (($IMAGE_H - $WATERMARK_H)/2);
}
else {
$POS_X = ($IMAGE_W - $WATERMARK_W);
$POS_Y = ($IMAGE_H - $WATERMARK_H);
}
imagealphablending($image, true);
imagecopy($image, $watermark, $POS_X, $POS_Y, 0, 0, $WATERMARK_W, $WATERMARK_H);
//header("Content-type: image/jpeg");
imagejpeg($image,$IMAGE_PATH,100);
imagedestroy($image);
imagedestroy($watermark);
}
}
/*썸네일에 로고를 워터마크로 끝*/
※원본파일이 워터마크가 찍힌 새 이미지로 대체됩니다.
※다음 코드에 의하여 썸네일 코드가 작동하지 않으면 워터마크도 찍히지 않습니다.
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
continue;
※get_view_thumbnail 함수를 불러올 때마다 작동합니다.(일종의 미완성 코드입니다.) 따라서 워터마크에 투명도가 없다면 매번 동일하게 보이지만 투명도가 적용되어있다면 워터마크가 진해집니다.
위 문제 해결을 원하시는 분이 있어서 내용을 덧붙입니다.
기존 썸네일 생성 코드를 다음 파일로 옮기시고 간단한 조건 코드를 추가해보시기 바랍니다.
/bbs/write_update.php 파일 약 544line 부근
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['bf_file']['error'][$i]);
//이 중간에 아래의 조건을 포함하여 썸네일 생성 코드를 삽입해봅니다.
if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename){//이미지 파일인 경우
//이곳에 썸네일 생성코드
}
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, G5_FILE_PERMISSION);
위 수정 내용은 테스트 해본 적 없습니다. 급하게 위치만 잡아드립니다. 정상작동하는지 확인이 되신분은 댓글로 달아주시면 감사하겠습니다.
댓글 16개
워터마크 이미지 위치는 그누보드5 / img / title_logo.png 입니다.
300사이즈 이상에서 출력하도록 설정 할 수는 없는지요?
아무리 연구해 보아도 모르겠습니다.
참고로 가로 600 이상에서는 워터마크가 잘 출력이 됩니다.
도움 부탁합니다.
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
continue;
위 조건때문인 것 같습니다.
해당 게시판의 썸네일 크기를 300이하로 설정하시거나 코드를 수정하시기 바랍니다.
게시글 접근할때마다 워터마크가 계속 중첩되는거 같습니다.
혹시 무슨 이유인지 알 수 있을까요?
원본을 남기지 않고 워터마크 찍힌 이미지로 덮어쓰는 이유 : 원본이 url상으로 추측 가능하기 때문에 워터마크로 원본을 보호하기 위함
해당 이미지에 워터마크가 찍혔다는 기록을 남겨서 더이상 워터마크가 중첩되지 않도록 하면 되지 않나? : 이미지파일명에 워터마크 여부를 남겨야 하거나 table을 생성하여 관리해야 함. > 귀찮아서 하지 않음
현재 코드상태로는 투명도가 있는 워터마크는 적절치 않습니다.
감사합니다
게시판 목록
그누보드5 팁자료실
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 2695 | 1개월 전 | 171 | ||
| 2694 | 1개월 전 | 134 | ||
| 2693 | 1개월 전 | 143 | ||
| 2692 | 1개월 전 | 157 | ||
| 2691 | 1개월 전 | 311 | ||
| 2690 | 1개월 전 | 217 | ||
| 2689 |
|
1개월 전 | 424 | |
| 2688 | 1개월 전 | 275 | ||
| 2687 |
선택과집중
|
1개월 전 | 313 | |
| 2686 | 1개월 전 | 275 | ||
| 2685 | 1개월 전 | 330 | ||
| 2684 | 2개월 전 | 462 | ||
| 2683 | 2개월 전 | 261 | ||
| 2682 | 2개월 전 | 287 | ||
| 2681 |
선택과집중
|
2개월 전 | 263 | |
| 2680 | 2개월 전 | 313 | ||
| 2679 |
|
2개월 전 | 417 | |
| 2678 |
|
2개월 전 | 487 | |
| 2677 | 2개월 전 | 312 | ||
| 2676 | 2개월 전 | 287 | ||
| 2675 |
선택과집중
|
2개월 전 | 464 | |
| 2674 |
|
2개월 전 | 309 | |
| 2673 | 2개월 전 | 322 | ||
| 2672 | 2개월 전 | 272 | ||
| 2671 | 2개월 전 | 244 | ||
| 2670 | 2개월 전 | 356 | ||
| 2669 | 2개월 전 | 274 | ||
| 2668 |
선택과집중
|
2개월 전 | 470 | |
| 2667 |
선택과집중
|
2개월 전 | 455 | |
| 2666 |
선택과집중
|
3개월 전 | 388 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기