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

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

QA

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

답변 1

본문

아래의 소스를 이용해서 작업중인데요.. 투명한 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;

}

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #png ×
전체 14
© SIRSOFT
현재 페이지 제일 처음으로