테스트 사이트 - 개발 중인 베타 버전입니다

투명 png 워터마크? 가능한가요? 채택완료

토타토타 8년 전 조회 3,870

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

방법이 있을까요??


</p><p>include_once(G5_LIB_PATH.'/image_proc.function.php');</p><p>$path_file = 'data/test_contract.jpg';//원본파일
$path_mark_file ='data/1.png';//워터마크에 사용할 파일
$path_save_top_right_file = 'data/test_contract_end1.jpg';//워터마크 처리한 것을 저장할 파일</p><p>//원본의 이미지 리소스를 받아온다.</p><p>
list($src, $src_w, $src_h) = get_image_resource_from_file ($path_file);
if (empty($src)) die($GLOBALS['errormsg'] . "
\n");</p><p>//워터마크에 사용될 이미지 리소스를 받아온다.
list($mark, $mark_w, $mark_h) = get_image_resource_from_file ($path_mark_file);
if (empty($mark)) die($GLOBALS['errormsg'] . "
\n");</p><p>//원본을 5 분의 1로 축소한 너비와 높이를 구한다.
$src_w_small = $src_w; //리사이징 제거함
$src_h_small = get_size_by_rule($src_w, $src_h, $src_w_small);</p><p>//원본의 상단 오른쪽을 기준으로 선명도 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'] . "
\n");</p><p>
$src2_x = $src_w_small - $mark_w;
$src2_y = 0;</p><p>//padding 을 10px 씩 줘야 하므로 x좌표는 왼쪽으로 10 이동 y좌표는 아래로 10 이동
$src2_x -= 110;
$src2_y += 110;</p><p>//워터마크는 투명도 50으로 설정
$result_watermark = imagecopymerge($src2, $mark, $src2_x, $src2_y, 0, 0, $mark_w, $mark_h, 70);
if ($result_watermark === false) die("워터마크 처리에 실패하였습니다.
\n");</p><p>$result_save = save_image_from_resource ($src2, $path_save_top_right_file, 100, 2);//저장
if ($result_save === false) die($GLOBALS['errormsg'] . "
\n");</p><p>@imagedestroy($src2);
}</p><p>

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

답변 1개

채택된 답변
+20 포인트
8년 전

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


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;

}

로그인 후 평가할 수 있습니다

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

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

로그인