PHP 에 텍스트 워 터 마크 나 그림 워 터 마크 를 추가 하 는 워 터 마크 류 의 전체 소스 코드 와 사용 예제

PHP 는 이미지 에 워 터 마크 기능 을 추가 합 니 다.문자 워 터 마크 나 이미지 워 터 마크 를 추가 할 수 있 습 니 다.문자 워 터 마크 를 사용 할 때 글꼴 파일 을 제공 해 야 합 니 다.이미지 워 터 마크 를 사용 할 때 워 터 마크 그림 을 제공 해 야 합 니 다.워 터 마크 그림 은 워 터 마크 를 추가 할 그림 보다 크 면 안 됩 니 다.배경 이 투명 한 워 터 마크 그림 을 사용 하 십시오.
이 워 터 마크 류 는 워 터 마크 위치,워 터 마크 크기 와 워 터 마크 의 투명 도 를 사용자 정의 할 수 있 고 글꼴 워 터 마크 는 색상 을 사용자 정의 할 수 있 으 며 기능 이 상응 하 게 완선 되 었 습 니 다.
전체 소스 코드 는 다음 과 같 습 니 다.

<?php
/**
 *       ,      、     、        。
 *     :
 *   $obj = new WaterMask($imgFileName);  //     
 *   $obj->$waterType = 1;   //  :0     、1     
 *   $obj->$transparent = 45;   //     
 *   $obj->$waterStr = 'www.jb51.net';  //    
 *   $obj->$fontSize = 18;   //      
 *   $obj->$fontColor = array(255,255,255);  //      (RGB)
 *   $obj->$fontFile = 'AHGBold.ttf';  //    
 * ……
 *   $obj->output();    //                  
 */
class WaterMask{
  public $waterType     = 0;   //    :0     、1     
  public $pos        = 0;   //    
  public $transparent    = 45;   //     
  public $waterStr      = 'www.jb51.net';  //    
  public $fontSize      = 18;   //      
  public $fontColor     = array(255,255,255);  //      (RGB)
  public $fontFile      = 'AHGBold.ttf';  //    
  public $waterImg      = 'logo.png';  //    
  private $srcImg       = '';   //         
  private $im         = '';   //    
  private $water_im      = '';   //      
  private $srcImg_info    = '';   //    
  private $waterImg_info   = '';   //      
  private $str_w       = '';   //      
  private $str_h       = '';   //      
  private $x         = '';   //  X  
  private $y         = '';   //  y  
  function __construct($img) {    //    
    $this->srcImg = file_exists($img) ? $img : die('"'.$img.'"       !');
  }
  private function imginfo() { //              ,     。
    $this->srcImg_info = getimagesize($this->srcImg);
    switch ($this->srcImg_info[2]) {
      case 3:
        $this->im = imagecreatefrompng($this->srcImg);
        break 1;
      case 2:
        $this->im = imagecreatefromjpeg($this->srcImg);
        break 1;
      case 1:
        $this->im = imagecreatefromgif($this->srcImg);
        break 1;
      default:
        die('   ('.$this->srcImg.')    ,   PNG、JPEG、GIF。');
    }
  }
  private function waterimginfo() { //         ,     。
    $this->waterImg_info = getimagesize($this->waterImg);
    switch ($this->waterImg_info[2]) {
      case 3:
        $this->water_im = imagecreatefrompng($this->waterImg);
        break 1;
      case 2:
        $this->water_im = imagecreatefromjpeg($this->waterImg);
        break 1;
      case 1:
        $this->water_im = imagecreatefromgif($this->waterImg);
        break 1;
      default:
        die('    ('.$this->srcImg.')    ,   PNG、JPEG、GIF。');
    }
  }
  private function waterpos() { //      
    switch ($this->pos) {
      case 0:   //    
        $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);
        $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);
        break 1;
      case 1:   //  
        $this->x = 0;
        $this->y = 0;
        break 1;
      case 2:   //  
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = 0;
        break 1;
      case 3:   //  
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = 0;
        break 1;
      case 4:   //  
        $this->x = 0;
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 5:   //  
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 6:   //  
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 7:   //  
        $this->x = 0;
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
      case 8:   //  
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
      default:  //  
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
    }
  }
  private function waterimg() {
    if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){
      die('      !');
    }
    $this->waterpos();
    $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);
    imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);
    $pct = $this->transparent;
    imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);
    imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);
  }
  private function waterstr() {
    $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);
    $w = abs($rect[2]-$rect[6]);
    $h = abs($rect[3]-$rect[7]);
    $fontHeight = $this->fontSize;
    $this->water_im = imagecreatetruecolor($w, $h);
    imagealphablending($this->water_im,false);
    imagesavealpha($this->water_im,true);
    $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);
    imagefill($this->water_im,0,0,$white_alpha);
    $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
    imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);
    $this->waterImg_info = array(0=>$w,1=>$h);
    $this->waterimg();
  }
  function output() {
    $this->imginfo();
    if ($this->waterType == 0) {
      $this->waterstr();
    }else {
      $this->waterimginfo();
      $this->waterimg();
    }
    switch ($this->srcImg_info[2]) {
      case 3:
        imagepng($this->im,$this->srcImg);
        break 1;
      case 2:
        imagejpeg($this->im,$this->srcImg);
        break 1;
      case 1:
        imagegif($this->im,$this->srcImg);
        break 1;
      default:
        die('      !');
        break;
    }
    imagedestroy($this->im);
    imagedestroy($this->water_im);
  }
}
?>
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기