채택완료

투명 png 워터마크? 가능한가요?

2017-07-17 (월) 14:03:42 4,107

아래의 소스를 이용해서 작업중인데요.. 투명한 png는 안되네요 ㅜㅜ 꼭 Gif처럼 나오는것 같습니다.

방법이 있을까요??

Copy
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개

채택된 답변
+20 포인트

음... 제가 쓰는 거 올려 봅니다.

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;

}

답변을 작성하려면 로그인이 필요합니다.