그누보드 게시판 이미지 업로드시 워터마크 삽입하기
페이지 정보
작성자 최고관리자 작성일 21-10-06 17:32 조회 3,479 댓글 0본문
출처 : https://tonhnegod.tistory.com/249
1. watermark.php
먼저 이 파일을 그누보드 /bbs/ 경로에 업로드합니다.
꼭 /bbs/에 넣을 필요 없습니다. 저는 그냥 편의상 /bbs/에 넣었습니다.
add_water_text()는 워터마크를 텍스트로 삽입, add_watermark_image()는 워터마크를 이미지로 삽입합니다.
$image_path(원본 이미지), $font(폰트TTF파일), $watermark_path(워터마크 이미지)는 반드시 절대 경로로 지정하셔야 합니다.
<?php
function add_watermark_text($image_path, $text, $font) {
// $image_path, $font는 반드시 절대경로로 지정해야함 (url이 아닌 path)
$array_img_chk = array("jpg", "jpeg", "png", "gif", "bmp");
// 이미지 확장자
$img_ext = explode(".", strrev($image_path));
$img_ext = strrev($img_ext[0]);
$img_ext = strtolower($img_ext);
// 이미지 파일인 경우에만 진행
if(in_array($img_ext, $array_img_chk)) {
if($img_ext == 'jpg' || $img_ext == 'jpeg')
$create_img = imagecreatefromjpeg($image_path);
if($img_ext == 'png')
$create_img = imagecreatefrompng($image_path);
if($img_ext == 'gif')
$create_img = imagecreatefromgif($image_path);
if($img_ext == 'bmp')
$create_img = imagecreatefromwbmp($image_path);
if($create_img) {
imagealphablending($create_img, true);
// 워터마크 폰트 색상 (RGB 값)
$color = imagecolorallocate($create_img, 0, 0, 0);
imagettftext($create_img, 20, 0, 2, 20, $color, $font, $text);
/* imagettftext 설명 */
// 원본 이미지 리소스 : $create_img
// 폰트 크기 : 20
// 폰트 각도 : 0
// 폰트 위치 x : 2
// 폰트 위치 y : 20
// 텍스트 색상 : $watermark_color (rgb값)
// 텍스트 폰트 : $font
// 텍스트 내용 : $text
//header("Content-type: image/jpeg");
imagejpeg($create_img, $image_path);
imagedestroy($create_img);
}
}
}
function add_watermark_image($image_path, $watermark_path) {
// $image_path, $watermark_path 는 반드시 절대경로로 지정해야함 (url이 아닌 path)
$array_img_chk = array("jpg", "jpeg", "png", "gif", "bmp");
// 이미지 확장자
$img_ext = explode(".", strrev($image_path));
$img_ext = strrev($img_ext[0]);
$img_ext = strtolower($img_ext);
// 이미지 파일인 경우에만 진행
if(in_array($img_ext, $array_img_chk)) {
if($img_ext == 'jpg' || $img_ext == 'jpeg')
$create_img = imagecreatefromjpeg($image_path);
if($img_ext == 'png')
$create_img = imagecreatefrompng($image_path);
if($img_ext == 'gif')
$create_img = imagecreatefromgif($image_path);
if($img_ext == 'bmp')
$create_img = imagecreatefromwbmp($image_path);
if($create_img) {
// 워터마크 이미지 확장자
$watermark_img_ext = explode(".", strrev($watermark_path));
$watermark_img_ext = strrev($watermark_img_ext[0]);
$watermark_img_ext = strtolower($watermark_img_ext);
if($watermark_img_ext == 'jpg' || $watermark_img_ext == 'jpeg')
$create_watermark_img = imagecreatefromjpeg($watermark_path);
if($watermark_img_ext == 'png')
$create_watermark_img = imagecreatefrompng($watermark_path);
if($watermark_img_ext == 'gif')
$create_watermark_img = imagecreatefromgif($watermark_path);
if($watermark_img_ext == 'bmp')
$create_watermark_img = imagecreatefromwbmp($watermark_path);
if($create_watermark_img) {
list($img_w, $img_h) = getimagesize($image_path);
list($watermark_img_w, $watermark_img_h) = getimagesize($watermark_path);
imagealphablending($create_img, true);
// 워터마크 위치 지정
//$pos_x = 50;
//$pos_y = 50;
// (예시) 워터마크를 정중앙으로
$pos_x = ceil(($img_w - $watermark_img_w) / 2);
$pos_y = ceil(($img_h - $watermark_img_h) / 2);
// 워터마크 삽입
imagecopy($create_img, $create_watermark_img, $pos_x, $pos_y, 0, 0, $watermark_img_w, $watermark_img_h);
/* imagecopy 설명 */
// 원본 이미지 리소스 : $create_img
// 워터마크 이미지 리소스 : $create_watermark_img
// 워터마크 이미지 x 좌표 : $pos_x
// 워터마크 이미지 y 좌표 : $pos_y
// 원본 이미지의 x 좌표 : 0
// 원본 이미지의 y 좌표 : 0
// 워터마크 이미지 가로크기 : $watermark_img_w
// 워터마크 이미지 세로크기 : $watermark_img_h
//header("Content-type: image/jpeg");
imagejpeg($create_img, $image_path);
imagedestroy($create_img);
imagedestroy($create_watermark_img);
}
}
}
}
?>
2. write_update.tail.skin.php
이 파일은 게시판 스킨 폴더 안에 넣습니다.
그누보드 기본 게시판을 예로 들면 /skin/board/basic/gallery/ 여기가 되겠죠.
물론 이 또한 꼭 이 파일, 이 경로를 사용해야 하는 것은 아닙니다.
경우에 따라 소스를 /bbs/write_update.php에 넣어도 되고, if문을 걸어서 특정 경우에만 작동하도록 해도 되고...
필요에 따라서 수정하셔서 사용하세요.
주석 처리된 부분에서 원하는 부분을 풀어주시면 됩니다.
<?php
include_once(G5_BBS_PATH.'/watermark.php');
// 업로드한 이미지(첨부파일)에 워터마크 삽입
$sql_bo_file = sql_query(" select * from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$wr_id}' ");
for ($i=0; $rows_bo_file=sql_fetch_array($sql_bo_file); $i++) {
$uploaded_bo_file = G5_DATA_PATH.'/file/'.$bo_table.'/'.$rows_bo_file['bf_file'];
if( file_exists($uploaded_bo_file) ){
// 워터마크 삽입 함수 (텍스트, 이미지 둘 중 필요한 것을 넣으면 됩니다)
# add_watermark_text($uploaded_bo_file, "- 워터마크 삽입 테스트. . 조용한 웹 개발자 -", G5_PATH.'/font/폰트파일.TTF');
# add_watermark_image($uploaded_bo_file, G5_PATH.'/'.G5_IMG_DIR.'/watermark.png');
}
}
// 업로드한 이미지(에디터)에 워터마크 삽입
$editor_img_check = get_editor_image(conv_content(conv_unescape_nl(stripslashes($wr_content)), 1), true);
if ($editor_img_check[1]) {
for($i=0; $i<count($editor_img_check[1]); $i++) {
$editor_img = $editor_img_check[1][$i];
preg_match("/src=['\"]?([^>'\"]+[^>'\"]+)/i", $editor_img, $editor_img_m);
$editor_img_src = $editor_img_m[1];
// 이미지 path 구함
$editor_img_p = parse_url($editor_img_src);
if(strpos($editor_img_p['path'], '/'.G5_DATA_DIR.'/') != 0)
$editor_data_path = preg_replace('/^\/.*\/'.G5_DATA_DIR.'/', '/'.G5_DATA_DIR, $editor_img_p['path']);
else
$editor_data_path = $editor_img_p['path'];
$editor_data_srcfile = G5_PATH.$editor_data_path;
if(is_file($editor_data_srcfile)) {
$editor_data_size = @getimagesize($editor_data_srcfile);
if(empty($editor_data_size))
continue;
// 워터마크 삽입 함수 (텍스트, 이미지 둘 중 필요한 것을 넣으면 됩니다)
# add_watermark_text($editor_data_srcfile, "- 워터마크 삽입 테스트. . 조용한 웹 개발자 -", G5_PATH.'/font/watermark.png');
# add_watermark_image($editor_data_srcfile, G5_PATH.'/'.G5_IMG_DIR.'/watermark.png');
}
}
}
?>
댓글목록 0
등록된 댓글이 없습니다.