워터마크 php함수 관련 질문입니다. > 그누4 질문답변

그누4 질문답변

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

워터마크 php함수 관련 질문입니다. 정보

워터마크 php함수 관련 질문입니다.

본문

먼저 그누보드가 아니고, 제로보드4인데요, 제로보드4에는 사람들이 거의 이쪽으로 옮겨
온거 같아 여기서 질문 드립니다. 제로보드 쪽에서는 답변이 없네요

아래 소스는 워터마크 불러오는 소스인데요.....

워터마크를 투명하게 변환해서 올려지도록 되어 있는데, 워터마크 원본파일이 투명하게

변환되지 않고 원본 그대로 올려지게끔 할려면 어느부분을 어떻게 수정하면 될까요?

고수분들 계시면 꼭좀 도와주세요







<?
function watermark($file, $save_filename, $water_file)
{
 $url="/usr/home/사이트주소/public_html/bbs/"; //자신의 제로보드 절대경로를 써줍니다
 $file=$url.$file;

 $img_info = getImageSize($file);
 if($img_info[2] == 1)  $src_img = ImageCreateFromGif($file); //gif파일일경우
 elseif($img_info[2] == 2)  $src_img = ImageCreateFromJPEG($file);//jpg파일일경우
 elseif($img_info[2] == 3)  $src_img = ImageCreateFromPNG($file);//png파일일경우
 elseif($img_info[2] == 6) {
  exec( "bmptoppm $file > $file.ppm");
  exec( "cjpeg -quality 100 $file.ppm > $file.jpg");
  $src_img = ImageCreateFromJPEG($file.".jpg");
 }
 else    return 0;

 $img_width = $img_info[0];
    $img_height = $img_info[1];

 $dst_img = $src_img;

 $water = ImageCreateFromPNG($water_file);
 $water_x = imageSX($water);
 $water_y = imageSY($water);
 
 $trans = Imagecolorat($water, 0, 0);
 $offset_X = $img_width - $water_x - 3;
 $offset_Y = $img_height - $water_y - 3;

 for ( $i = 0; $i < $water_x; $i++ )
  for ( $j = 0; $j < $water_y; $j++ )
  if ( $trans != Imagecolorat($water, $i, $j) ) {
    $rgb = imagecolorsforindex($dst_img, Imagecolorat($dst_img, $i + $offset_X, $j + $offset_Y));
 
    if ( $rgb["red"]  > 177)  $rgb["red"] = $rgb["red"] - 50;
    else                          $rgb["red"] = $rgb["red"] + 50;
    if ( $rgb["green"] > 177)  $rgb["green"] = $rgb["green"] - 50;
    else                          $rgb["green"] = $rgb["green"] + 50;
    if ( $rgb["blue"]  > 177)  $rgb["blue"] = $rgb["blue"] - 50;
    else                          $rgb["blue"] = $rgb["blue"] + 50;
    $wt_img = Imagecolorresolve($dst_img, $rgb["red"], $rgb["green"], $rgb["blue"]);
    imagesetpixel($dst_img, $i+$offset_X, $j+$offset_Y, $wt_img);
  }

    if($img_info[2] == 1) {
        ImageInterlace($dst_img);
        ImageJPEG($dst_img, $file.$save_filename);//gif라이팅안되므로수정
    }elseif($img_info[2] == 2){
        ImageInterlace($dst_img);
        ImageJPEG($dst_img, $file.$save_filename);
    }elseif($img_info[2] == 3){
        ImagePNG($dst_img, $file.$save_filename);
    }elseif($img_info[2] == 6){
        ImageInterlace($dst_img);
        ImageJPEG($dst_img, $file.$save_filename);
        unlink( "$file.ppm" );
        unlink( "$file.jpg" );
    }
    ImageDestroy($dst_img);
}
?>
  • 복사

댓글 전체

$wt_img = Imagecolorresolve($dst_img, $rgb["red"], $rgb["green"], $rgb["blue"]);
=>  $wt_img = $dst_img;

이부분이 아닐까라는 생각이..... ;;;; 테스트는 아직이고요


밑에 있는 소스도 있는데 함 참고 하세요..

// 이미지에 워터마크 넣기
// PHP > 4.0, GD > 2.0.1
// WatermarkImage("원본이미지","겹처지는이미지","투명도","화질",[겹치는이미지위치(0,1,2)]);

function WatermarkImage($CanvasImage, $WatermarkImage /* MUST BE PNG */, $Opacity=30, $Quality=70, $WatermarkLocate=1)
{
  // create true color canvas image:
  $canvas_src = imagecreatefromjpeg($CanvasImage);
  $canvas_w = ImageSX($canvas_src);
  $canvas_h = ImageSY($canvas_src);
  $canvas_img = imagecreatetruecolor($canvas_w, $canvas_h);
  imagecopy($canvas_img, $canvas_src, 0,0,0,0, $canvas_w, $canvas_h);
  imagedestroy($canvas_src);    // no longer needed

  // create true color overlay image:
  $overlay_src = imagecreatefrompng($WatermarkImage);
  $overlay_w = ImageSX($overlay_src);
  $overlay_h = ImageSY($overlay_src);
  $overlay_img = imagecreatetruecolor($overlay_w, $overlay_h);
  imagecopy($overlay_img, $overlay_src, 0,0,0,0, $overlay_w, $overlay_h);
  imagedestroy($overlay_src);    // no longer needed

  // setup transparent color (pick one):
  $black  = imagecolorallocate($overlay_img, 0x00, 0x00, 0x00);
  $white  = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
  $magenta = imagecolorallocate($overlay_img, 0xFF, 0x00, 0xFF);   
  // and use it here:
  imagecolortransparent($overlay_img, $white);

  // 워터마크 이미지의 위치(기본값은 가운데 1입니다.)
  switch ($WatermarkLocate) {
case 0:  // 좌측상단
  $ww = 0;
  $wh = 0;
  break;
  case 1: // 가운데
  $ww = ($canvas_w / 2) - ($overlay_w / 2);
  $wh = $canvas_h - ($overlay_h);
  break;
  case 2: // 우측하단
  $ww = $canvas_w - ($overlay_w);
  $wh = $canvas_h - ($overlay_h);
  break;
}

  // copy and merge the overlay image and the canvas image:
  imagecopymerge($canvas_img, $overlay_img, $ww,$wh,0,0, $overlay_w, $overlay_h, $Opacity);

  imagejpeg($canvas_img, $CanvasImage, $Quality);
/*
  // output:
  header("Content-type: image/jpeg");
  imagejpeg($canvas_img, '', $Quality);
*/
  imagedestroy($overlay_img);
  imagedestroy($canvas_img);
}
----------------------------------------------------
----------------------------------------------------
// WatermarkImage("원본이미지","겹처지는이미지","투명도","화질",[겹치는이미지위치(0,1,2)]);
            // 겹치는이미지위치값이 0이면 좌측상단, 1이면 가운데, 2이면 우측하단
            $overfile = "$g4[path]/overlay.png";
            WatermarkImage("$dest_file", $overfile, 40, 70, 1);
----------------------------------------------------
//워터마크기능
그리고 또 질문해서 죄송한데요............

여러가지 색으로 만든 워터마크를 찍을려고 하는데 이 소스를 사용하면 워터마크색이 단색으로

밖에 표현이 안되어서 그러는데, 포토샵으로 뒷배경을 투명하게 만든 파일을 사용해서 워터마크를

원본그대로 찍을려면 소스를 어느부분을 어떻게 수정하면 좋을까요?
© SIRSOFT
현재 페이지 제일 처음으로