워터마크 관련 질문
본문
현재 아미나 빌더 사용중인데
https://amina.co.kr/bbs/board.php?bo_table=tip&wr_id=2469
누가 만든 워터마크 적용해서 워터마크 올리는거 성공했는데
문제가 발생했네요
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
//워터마크 넣기 <-- 첨부파일전용
//png는 안됨, jpg 원본 사용해야함
//$transparency 워터마크 투명도
//$jpegQuality 화질
if ($mark == 1){ //
function waterMark($fileInHD, $wmFile, $transparency = 90, $jpegQuality = 90) {
$wmImg = imageCreateFromGIF($wmFile);
$jpegImg = imageCreateFromJPEG($fileInHD);
$wmX=imageSX($jpegImg) - imageSX($wmImg);
$wmY=imageSY($jpegImg) - imageSY($wmImg);
imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency);
ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
}
$data_path = G5_PATH."/data/file/$bo_table"; //서버경로임
$thumb_path = $data_path.'/thumb';
$sql=" select * from $g5[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no asc";
$results = sql_query($sql);
for ($i=0; $row=sql_fetch_array($results); $i++) {
$file = $data_path .'/'. $row[bf_file];
if ($_FILES[bf_file][name][$i]){
waterMark($file,$board_skin_path."/img/****.gif"); // 여기에 워터마크로 사용할 이미지 경로 입력
}
if ($i==0 && $_FILES[bf_file][name][0]){
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);
$rate = $board[bo_1] / $size[0];
$height = (int)($size[1] * $rate);
@unlink($thumb_path.'/'.$wr_id);
$dst = imagecreatetruecolor($board[bo_1], $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $board[bo_1], $height, $size[0], $size[1]);
imagepng($dst, $thumb_path.'/'.$wr_id, $board[bo_2]);
chmod($thumb_path.'/'.$wr_id, 0606);
}
}
}
}
//워터마크 체크할 파일 인클루드 <---- 에디터전용 워터마크
include_once(G5_LIB_PATH.'/image_proc.function.php');
$content_por = sql_fetch("select * from g5_write_".$bo_table." where wr_id = '$wr_id' ");
$contents = $content_por[wr_content];
preg_match_all('@<img\s+.*?(src\s*=\s*("[^"\\\\]*(?:[^"\\\\]*)*"|\'[^\'\\\\]*(?:[^\'\\\\]*)*\'|[^\s]+)).*?>@is', $contents, $match);
$wtm_count = count($match[1]);
for ($k=0; $k <= $wtm_count; $k++ ) {
$marks[$k] = str_replace('"',"",$match[1][$k]);
$marks_image[$k] = str_replace(' /',"",$marks[$k]);
$imgSize[$k] = @GetImageSize($marks_image[$k]);
$imgWidth[] = $imgSize[$k][0];
$imgHeight[] = $imgSize[$k][1];
$image[] = str_replace("src=","",$marks_image[$k]);
$image_name[] = explode("/",$image[$k]);
}
for($j=0; $j<=$wtm_count; $j++) {
$exp = $image_name[$j][6];//원본파일
$exp_img = explode(".",$exp);
//확장자가 이미지 일때만
if ($exp_img[1] == "jpg" or $exp_img[1] == "png" or $exp_img[1] == "gif" or $exp_img[1] == "jpeg" or $exp_img[1] == "JPG" or $exp_img[1] == "PNG" or $exp_img[1] == "GIF" or $exp_img[1] == "JPEG") {
$path_file = G5_PATH.'/data/editor/'.$image_name[$j][5]."/".$image_name[$j][6];//원본파일
$path_mark_file = $board_skin_path."/img/making.gif";//워터마크에 사용할 파일
$path_save_top_right_file = G5_PATH.'/data/editor/'.$image_name[$j][5]."/".$image_name[$j][6]; //워터마크 처리한 것을 원본에 덮어씌움
//원본의 이미지 리소스를 받아온다.
list($src, $src_w, $src_h) = get_image_resource_from_file ($path_file);
if (empty($src)) die($GLOBALS['errormsg'] . "<br />\n");
//워터마크에 사용될 이미지 리소스를 받아온다.
list($mark, $mark_w, $mark_h) = get_image_resource_from_file ($path_mark_file);
if (empty($mark)) die($GLOBALS['errormsg'] . "<br />\n");
//원본을 5 분의 1로 축소한 너비와 높이를 구한다.
$src_w_small = $src_w; //리사이징 제거함
$src_h_small = get_size_by_rule($src_w, $src_h, $src_w_small);
//원본의 상단 오른쪽을 기준으로 선명도 100으로 워터마크 처리
if ($src_w > 200) { //width가 200 이하인 이미지는 워터마크 처리안함
$src2 = get_image_resize($src, $src_w, $src_h, $src_w_small, $src_h_small);
if (empty($src2)) die($GLOBALS['errormsg'] . "<br />\n");
//$src2_x = $src_w_small - $mark_w;
//$src2_y = 0;
$src2_x = $src_w_small - $mark_w;
$src2_y = $src_h_small - $mark_h;
//padding 을 10px 씩 줘야 하므로 x좌표는 왼쪽으로 10 이동 y좌표는 아래로 10 이동
$src2_x -= 20;
$src2_y -= 20;
//$src2_x = ceil(($src_w_small - $mark_w) / 2);
//$src2_y = ceil(($src_h_small - $mark_h) / 2);
//워터마크는 투명도 50으로 설정
$result_watermark = imagecopymerge($src2, $mark, $src2_x, $src2_y, 0, 0, $mark_w, $mark_h, 50);
if ($result_watermark === false) die("워터마크 처리에 실패하였습니다.<br />\n");
$result_save = save_image_from_resource ($src2, $path_save_top_right_file, 100, 2);//저장
if ($result_save === false) die($GLOBALS['errormsg'] . "<br />\n");
@imagedestroy($src2);
}
} // if
}
?>
문제는 적용한 워터마크 이미지를 변경할수 없네요...
경로를 여기다 만들었는데
/img/watermark.gif
이미지를 수정해서 같은 이름의 파일로 덮어씌워도
기존에 있던 이미지로 워터마크가 올라가네요.
소스 자체가 워터마크 이미지를 어디 제3공간에 저장해서 적용시키는거 같은데
이걸 어떻게 해결해야 하나요?
참고로 소스에다가
/img/watermark2.gif
로 경로 변경해서 이미지 올려놓으면 아예 이때부터는 워터마크가 안 올라가네요.
다시 watermark.gif 로 소스 변경하면
그대로 처음 올린 이미지로 잘 올라가고요....
이게 어디서 문제일까요?
그리고 경로를 저 형광칠한 2군데에다 넣는게 맞는지요?
위에한군데만 경로 넣어도 적용되던데요.
-------------------------------------------------추가
참고로
/img/watermark.gif
이 경로의 파일을 지워도
워터마크가 나타나네요.....
쿠키처럼 어디다 저장해놓은건지요
답변 1
파일 모두 보드스킨의 img 폴더 안에 들어 있으니 해당 파일과 같은 이름으로 만들어 업로드하시고
브라우저 캐시 와 그누보드 캐시등을 지워주시면 새로 업로드한 이미지는 정상적으로 보일겁니다.
관리자 > 기본환경 아래 이미지와 같은 일괄삭제를 모두 삭제해 보세요.