gd를 이용 하여 jpg위에 png 파일 합성 하기좀 부탁 드리께요. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

gd를 이용 하여 jpg위에 png 파일 합성 하기좀 부탁 드리께요. 정보

gd를 이용 하여 jpg위에 png 파일 합성 하기좀 부탁 드리께요.

본문

gd쪽은 그냥 썸네일 이용 하는 정도 이였습니다..
 
워터마크 기능을 이용하여서 하면 될듯한데. 몇일동안 해보다가 삽질하는것도 한계에
 
와서 도움을 청합니다.
 
jpg 위에 png 파일을 올려서 합성 하고자 합니다.
 
 
jpg와 png 파일의 크기는 같습니다.
 
힌트를 부탁 드립니다.
(__)
 
삽질도 기술인것 같습니다..
 
 
부탁 드리겠습니다. (__)
 
그누와 상관없는 기본 소스면 됩니다.
 
기본 소스를 응용하여서 사용 할려고 합니다. 어느정도 이해를 해야 뭘
진행을 할텐데. 진행이 않됩니다...
  • 복사

댓글 전체

이거 제가 write_update.skin.php에 붙여 두가지 워터마크 테스트를 해본 코드입니다.
$board['bo_image_width']에 맞춰서 새로운 파일을 생성하고 워터마크를 씌우는 형식으로 기억합니다만, 잘 되던데요,,

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

//실행되는 동안 종료 되지 않도록 사용메모리와 실행가능 시간을 늘려준다. 유창화님
@set_time_limit (0);
@ini_set ("memory_limit", "20M");

//워터마크 테트스 1 - 이미지 형식
//http://www.sir.co.kr/bbs/tb.php/g4_skin/28315 푸름빠덜님
function waterMark($fileInHD, $wmFile, $transparency = 100, $jpegQuality = 100, $margin = 5) {
    $wmImg  = imageCreateFromGIF($wmFile);
    $jpegImg = imageCreateFromJPEG($fileInHD);
    $wmX=imageSX($jpegImg) - imageSX($wmImg);
    $wmY=imageSY($jpegImg) - imageSY($wmImg);
    //$background_color = imagecolorallocate($jpegImg, 255,255,255);
    imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency);
    ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
}
//워터마크 1 펑션 끝

//특정 폴더에 규격설정 이미지 생성 테스트
$data_path = $g4['path'] . "/data/file/" . $bo_table;
$rs_path = $data_path . "/rs_file";

if (!is_dir($rs_path)) {
    @mkdir($rs_path, 0707);
    @chmod($rs_path, 0707);
}

$sql = " select * from " . $g4['board_file_table'] . " where  bo_table = '" . $bo_table . "' ";
//규격 재설정후 일괄적용하려면 아래 한줄을 주석처리후 아무 게시물이나 1회 수정해줍니다. 시간좀 걸리네요.^^;;
$sql .= " and wr_id = '" . $wr_id . "' order by bf_no asc";

$results = sql_query($sql);
for ($i=0; $row=sql_fetch_array($results); $i++) {

    $file = $row['bf_file'];

    $dest_file = $data_path ."/". $file;

    if (preg_match("/\.(jp[e]?g|gif|png)$/i", $file) && file_exists($dest_file)) {

        //원본 이미지에 워터마크 1-1 표시
        //--------------
        if ($_FILES['bf_file']['name'][$i]){
            waterMark($dest_file,$board_skin_path."/img/watermark.gif");//이미지 타잎
        }
        //--------------

        //--------------------------------------- $board['bo_image_width']에 따른 규격파일 생성
        //규격 재설정시 레코드당 수정1회 필요함

        $rs_file = $rs_path . "/" . $file;

        $size = getimagesize($dest_file);
        if ($size[2] == 1)
            $src = imagecreatefromgif($dest_file);
        else if ($size[2] == 2)
            $src = imagecreatefromjpeg($dest_file);
        else if ($size[2] == 3)
            $src = imagecreatefrompng($dest_file);
        else
        break;

        //워터마크 테스트 2 http://www.sir.co.kr/bbs/tb.php/g3_tiptech/126 마스터케빈
        //규격파일 생성시 문자형태 워터마크 표시
        $string_b = $_SERVER["HTTP_HOST"];  //abc.co.kr을 취함
        $string_c=$member['mb_id']; //아이디
        $string_a=$member['mb_nick']; //닉네임

        $x1=($size[0]-151); // 좌측 x좌표
        $y1=($size[1]-27); // 촤측 y좌표
        $x2=($size[0]-10); // 우측 x좌표
        $y2=($size[1]-10); // 우측 y좌표
        $gray=ImageColorAllocate($src,170,170,170); // 회색색깔을 구한다. 이작업시 #ffffff 와 같은 방식은 쓸수 없다.
        $white=ImageColorAllocate($src,255,255,255); // 하얀색을 구한다.
        $black=ImageColorAllocate($src,0,0,0); // 검정색을 구한다.
        $blue=ImageColorAllocate($src,83,111,183); // 푸른색을 구한다.
        ImageString($src,2,$x1+7,$y1+1,$string_a,$white); // 우측하단에 글자 넣기
        ImageString($src,2,$x1+8,$y1+2,$string_a,$black); // 우측하단 글자 음영
        ImageString($src,6,11,11,$string_b,$black); // 촤측 상단 글자 넣기
        ImageString($src,6,10,10,$string_b,$blue); // 좌측 상단 글자 음영

        ImageString($src,5,11,26,$string_c,$black);
        ImageString($src,5,10,25,$string_c,$gray);
        //------------
        //최대 사이즈 제한 방식
        if ($size[0] >= $size[1]) :
            $rate = $board['bo_image_width'] / $size[0];
            $width = $board['bo_image_width'];
            $height = (int)($size[1] * $rate);
        else :
            $rate = $board['bo_image_width'] / $size[1];
            $width = (int)($size[0] * $rate);
            $height = $board['bo_image_width'];
        endif;
        //규격 설정보다 작은 파일 처리
        if (($size[0] < $board['bo_image_width']) and ($size[1] < $board['bo_image_width'])) :
            $width = $size[0];
            $height = $size[1];
        endif;
        //규격에 맞지않다면 삭제
        if (($width != $board['bo_image_width']) or ($height != $board['bo_image_width'])) :
            @unlink($rs_file);
        endif;

        if (!file_exists($rs_file)) :
        $dst = imagecreatetruecolor($width, $height);
            imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
            //imagepng($dst, $rs_file, $board['bo_2']);
            imagejpeg($dst, $rs_file, $board['bo_2']);
            chmod($rs_file, 0707);
        endif;

    }
}
© SIRSOFT
현재 페이지 제일 처음으로