pc에서는
write_update.skin.php
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
function getImagesUrl($url) {
$img_path = array();
foreach($url as $value) {
$img = parse_url($value);
$img_path[] = $img['path'];
}
return $img_path;
}
// 에디터로 등록한 이미지가 있는지 검색
$query = "SELECT * FROM g5_images WHERE bo_table = '".$bo_table."' AND wr_id = ".$wr_id;
$is_images = sql_fetch($query);
// 에디터로 등록한 글에 이미지가 포함되어 있는지 체크
$contents = stripslashes($_POST['wr_content']);
preg_match_all('@src="([^"]+)"@', $contents, $match);
if($is_images['wr_id']) { // $is_images['wr_id'] 값이 있을 경우 수정이라고 간주함
$image_count = sql_fetch($query);
if($image_count['wr_id']) {
$res = sql_query($query);
while($rows = sql_fetch_array($res)) {
if(!in_array($rows['path'], getImagesUrl($match[1]))) {
unlink("../".$rows['path']);
// 썸네일 삭제 추가
$thumbs = explode("/", $rows['path']);
$thumbs_ext = explode(".", $thumbs[4]);
$thumbnail = glob("../".$thumbs[1]."/".$thumbs[2]."/".$thumbs[3]."/thumb-".$thumbs_ext[0]."*");
unlink($thumbnail[0]);
}
}
// 이전에 등록한 이미지가 있을 경우 전체를 삭제
$remove = "DELETE FROM g5_images WHERE bo_table = '".$bo_table."' AND wr_id = ".$wr_id;
sql_query($remove);
}
}
if(sizeof($match[1]) > 0) { // 에디터로 추가한 이미지가 있을 경우
foreach($match[1] as $value) {
$img = parse_url($value);
$insert = "INSERT INTO g5_images SET bo_table = '".$bo_table."', path = '".$img['path']."', wr_id = ".$wr_id.", reg_date = now()";
sql_query($insert);
}
}
if ($w == 'u') {
insert_point($member['mb_id'], -1, "{$board['bo_subject']} {$wr_id} 글수정", $bo_table, $wr_id, '수정');
}
?>
<?
//워터마크 체크할 파일 인클루드
include_once(G5_LIB_PATH.'/image_proc.function.php');
$sql_data = "select * from g5_board_file where bo_table = '$bo_table' and wr_id = '$wr_id' ";
$res_data = mysql_query($sql_data);
while ($row_data = mysql_fetch_array($res_data)) {
$exp = $row_data[bf_file];//원본파일
$exp_img = explode(".",$exp);
//확장자가 이미지 일때만
if ($exp_img[1] == "jpg" 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/file/'.$bo_table."/".$row_data[bf_file];
$path_mark_file = G5_PATH.'/img/yeo.gif';//워터마크에 사용할 파일
$path_save_top_right_file = G5_PATH.'/data/file/'.$bo_table."/".$row_data[bf_file]; //워터마크 처리한 것을 원본에 덮어씌움
//원본의 이미지 리소스를 받아온다.
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;
//padding 을 10px 씩 줘야 하므로 x좌표는 왼쪽으로 10 이동 y좌표는 아래로 10 이동
$src2_x -= 120;
$src2_y += 120;
//워터마크는 투명도 50으로 설정
$result_watermark = imagecopymerge($src2, $mark, $src2_x, $src2_y, 0, 0, $mark_w, $mark_h, 30);
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
}
//워터마크 체크할 파일 인클루드
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] == "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 = G5_PATH.'/img/yeo.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;
//padding 을 10px 씩 줘야 하므로 x좌표는 왼쪽으로 10 이동 y좌표는 아래로 10 이동
$src2_x -= 10;
$src2_y += 10;
//워터마크는 투명도 50으로 설정
$result_watermark = imagecopymerge($src2, $mark, $src2_x, $src2_y, 0, 0, $mark_w, $mark_h, 30);
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
}
?>
이렇게하니깐 파일로 올린 사진에 워터마크가 잘생겼는데요.....
모바일에서는 파일을 올리고 글쓰기버튼을 누르면 화면이 멈춰서 글이 안써져요...
모바일 스킨에서 워터마크를 달고 싶은데 어떡해해야하는지 알려주시면 감사하겠습니다....
답변 1개
여기 팁에 있는 워터마크로 한번 테스트 해보세요.
https://sir.kr/g5_tip/2896?sfl=wr_subject%7C%7Cwr_content&stx=%EC%9B%8C%ED%84%B0%EB%A7%88%ED%81%AC
답변을 작성하려면 로그인이 필요합니다.