21'C 흐림
서울 강남구
적용보드는 Basic-Board2.0 입니다.
image_proc.function.php 파일은 수정없이 lib에 업로드 하시고.. Basic-Board --> write_update.tail.skin.php 파일에 아래의 코드추가
<?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(@is'">'@<imgs+.*?(srcs*=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
}
?>
이렇게 추가 해주시고 보드스킨 write--> write.skin.php 에 다음 코드 추가
<!-- 게시물 작성/수정 시작 { --> 요기 <input type 코드 하단에....>
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post"
-----------------------
<input type="hidden" name="mark" value="<?=$mark?>"> <!-- 첨부파일 워터마크추가 -->
그리고
<div class="form-group">
<label class="col-sm-2 control-label hidden-xs">첨부파일</label>
<div class="col-sm-10">
<p class="form-control-static text-muted" style="padding:0px; padding-top:4px;">
<span class="cursor" onclick="add_file();"><i class="fa fa-plus-circle fa-lg"></i> 파일추가</span>
<span class="cursor" onclick="del_file();"><i class="fa fa-times-circle fa-lg"></i> 파일삭제</span>
<input type="checkbox" name="mark" value="1"/> 워터마킹하기 <!-- 추가 첨부파일 워터마크추가 -->
</p>
</div>
</div>
이렇게 추가 하시고 테스트 해보세요.. 보드 타입과 상관없이 모두 다 잘되는걸 확인 하였습니다.
첨부파일 받으셔서 적용하시면 됩니다.