투명 png 워터마크? 가능한가요?
본문
아래의 소스를 이용해서 작업중인데요.. 투명한 png는 안되네요 ㅜㅜ 꼭 Gif처럼 나오는것 같습니다.
방법이 있을까요??
include_once(G5_LIB_PATH.'/image_proc.function.php');
$path_file = 'data/test_contract.jpg';//원본파일
$path_mark_file ='data/1.png';//워터마크에 사용할 파일
$path_save_top_right_file = 'data/test_contract_end1.jpg';//워터마크 처리한 것을 저장할 파일
//원본의 이미지 리소스를 받아온다.
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 -= 110;
$src2_y += 110;
//워터마크는 투명도 50으로 설정
$result_watermark = imagecopymerge($src2, $mark, $src2_x, $src2_y, 0, 0, $mark_w, $mark_h, 70);
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);
}
!-->
답변 1
음... 제가 쓰는 거 올려 봅니다.
function pkWaterMarkUp($srcfile, $filename, $dir, $watermark = "../../img/watermark.png") {
if($filename == '')
return '';
$size = @getimagesize($srcfile);
if($size[2] < 1 || $size[2] > 3)
return '';
if(!is_dir($dir)) {
@mkdir($dir, G5_DIR_PERMISSION);
@chmod($dir, G5_DIR_PERMISSION);
}
// 워터마크
/*
imagecopymerge ( 원본이미지 , 워터마크이미지 , 원본이미지 워터마트 시작좌표x , 원본이미지 워터마트 시작좌표y , 워터마크이미지 좌표x , 워터마크이미지 좌표y , 워터마크이미지 사용width , int 워터마크이미지 사용height , 투명도0~100 );
*/
$wsize = @getimagesize($watermark);
$s_x = (int)(($size[0] - $wsize[0]) / 2);
$s_y = (int)(($size[1] - $wsize[1]) / 2);
list($src, $src_w, $src_h) = get_image_resource_from_file ($srcfile);
list($mark, $mark_w, $mark_h) = get_image_resource_from_file ($watermark);
$mark_img = imagecopy($src, $mark, $s_x, $s_y, 0, 0, $wsize[0], $wsize[1]);
if ($mark_img === false) die("워터마크 처리에 실패하였습니다.<br />\n");
$pattern = "/[#\&\+\-%@=\/\\:;,'\"\^`~\|\!\?\*\$#<>\(\)\[\]\{\}]/";
$filename = preg_replace("/\s+/", "", $filename);
$filename = preg_replace( $pattern, "", $filename);
$filename = preg_replace_callback(
"/[가-힣]+/",
create_function('$matches', 'return base64_encode($matches[0]);'),
$filename);
$filename = preg_replace( $pattern, "", $filename);
$result_save = save_image_from_resource ($src, $dir.'/'.$filename);//저장
if ($result_save === false) die($GLOBALS['errormsg'] . "<br />\n");
@imagedestroy($mark);
@imagedestroy($src);
// upload_file() 은 move_uploaded_file() 특성임
// upload_file($srcfile, $filename, $dir);
/*function upload_file($srcfile, $destfile, $dir)
{
if ($destfile == "") return false;
// 업로드 한후 , 퍼미션을 변경함
@move_uploaded_file($srcfile, $dir.'/'.$destfile);
@chmod($dir.'/'.$destfile, G5_FILE_PERMISSION);
return true;
}*/
$file = str_replace(G5_DATA_PATH.'/item/', '', $dir.'/'.$filename);
return $file;
}