PHP图片水印类源代码(支持背景透明)

2011-09-28 20:17:56来源:IT手记作者:

这段PHP图片水印类支持文字水印透明度和图片水印的背景透明。这个类功能很强大,并积极指点。功能强大:支持文字水印、图片水印;支持水印的位置随机或固定(九宫格);水印透明度设置(图片水印和文字水印都支持)

这段PHP图片水印类支持文字水印透明度和图片水印的背景透明。这个类功能很强大,并积极指点。功能强大:支持文字水印、图片水印;支持水印的位置随机或固定(九宫格);水印透明度设置(图片水印和文字水印都支持);文字水印的字体、颜色、大小设置;图片水印的背景透明……

PHP 图片水印类代码

PHP Code复制内容到剪贴板
  1. <?php   
  2. /**  
  3.  * 加水印类,支持文字图片水印的透明度设置、水印图片背景透明。  
  4.  * 日期:2011-09-27  
  5.  * 作者:www.itwhy.org  
  6.  * 使用:  
  7.  *      $obj = new WaterMask($imgFileName);         //实例化对象  
  8.  *      $obj->$waterType = 1;                       //类型:0为文字水印、1为图片水印  
  9.  *      $obj->$transparent = 45;                    //水印透明度  
  10.  *      $obj->$waterStr = 'www.itwhy.org';          //水印文字  
  11.  *      $obj->$fontSize = 16;                       //文字字体大小  
  12.  *      $obj->$fontColor = array(255,0255);         //水印文字颜色(RGB)  
  13.  *      $obj->$fontFile = = 'AHGBold.ttf';          //字体文件  
  14.  *      $obj->output();                             //输出水印图片文件覆盖到输入的图片文件  
  15.  */  
  16. class WaterMask{   
  17.     public  $waterType          = 1;                //水印类型:0为文字水印、1为图片水印   
  18.     public  $pos                = 0;                //水印位置   
  19.     public  $transparent        = 45;               //水印透明度   
  20.   
  21.     public  $waterStr           = 'www.itwhy.org';  //水印文字   
  22.     public  $fontSize           = 16;               //文字字体大小   
  23.     public  $fontColor          = array(255,0,255); //水印文字颜色(RGB)   
  24.     public  $fontFile           = 'AHGBold.ttf';    //字体文件   
  25.   
  26.     public  $waterImg           = 'logo.png';       //水印图片   
  27.   
  28.     private $srcImg             = '';               //需要添加水印的图片   
  29.     private $im                 = '';               //图片句柄   
  30.     private $water_im           = '';               //水印图片句柄   
  31.     private $srcImg_info        = '';               //图片信息   
  32.     private $waterImg_info      = '';               //水印图片信息   
  33.     private $str_w              = '';               //水印文字宽度   
  34.     private $str_h              = '';               //水印文字高度   
  35.     private $x                  = '';               //水印X坐标   
  36.     private $y                  = '';               //水印y坐标   
  37.   
  38.     function __construct($img) {        //析构函数   
  39.         $this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');   
  40.     }   
  41.     private function imginfo() {                //获取需要添加水印的图片的信息,并载入图片。   
  42.         $this->srcImg_info = getimagesize($this->srcImg);   
  43.         switch ($this->srcImg_info[2]) {   
  44.             case 3:   
  45.                 $this->im = imagecreatefrompng($this->srcImg);   
  46.                 break 1;   
  47.             case 2:   
  48.                 $this->im = imagecreatefromjpeg($this->srcImg);   
  49.                 break 1;   
  50.             case 1:   
  51.                 $this->im = imagecreatefromgif($this->srcImg);   
  52.                 break 1;   
  53.             default:   
  54.                 die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');   
  55.         }   
  56.     }   
  57.     private function waterimginfo() {           //获取水印图片的信息,并载入图片。   
  58.         $this->waterImg_info = getimagesize($this->waterImg);   
  59.         switch ($this->waterImg_info[2]) {   
  60.             case 3:   
  61.                 $this->water_im = imagecreatefrompng($this->waterImg);   
  62.                 break 1;   
  63.             case 2:   
  64.                 $this->water_im = imagecreatefromjpeg($this->waterImg);   
  65.                 break 1;   
  66.             case 1:   
  67.                 $this->water_im = imagecreatefromgif($this->waterImg);   
  68.                 break 1;   
  69.             default:   
  70.                 die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');   
  71.         }   
  72.     }   
  73.     private function waterpos() {               //水印位置算法   
  74.         switch ($this->pos) {   
  75.             case 0:     //随机位置   
  76.                 $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);   
  77.                 $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);   
  78.                 break 1;   
  79.             case 1:     //上左   
  80.                 $this->x = 0;   
  81.                 $this->y = 0;   
  82.                 break 1;   
  83.             case 2:     //上中   
  84.                 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;   
  85.                 $this->y = 0;   
  86.                 break 1;   
  87.             case 3:     //上右   
  88.                 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];   
  89.                 $this->y = 0;   
  90.                 break 1;   
  91.             case 4:     //中左   
  92.                 $this->x = 0;   
  93.                 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;   
  94.                 break 1;   
  95.             case 5:     //中中   
  96.                 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;   
  97.                 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;   
  98.                 break 1;   
  99.             case 6:     //中右   
  100.                 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];   
  101.                 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;   
  102.                 break 1;   
  103.             case 7:     //下左   
  104.                 $this->x = 0;   
  105.                 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];   
  106.                 break 1;   
  107.             case 8:     //下中   
  108.                 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;   
  109.                 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];   
  110.                 break 1;   
  111.             default:    //下右   
  112.                 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];   
  113.                 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];   
  114.                 break 1;   
  115.         }   
  116.     }   
  117.     private function waterimg() {   
  118.         if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){   
  119.             die('水印比原图大!');   
  120.         }   
  121.         $this->waterpos();   
  122.         $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);   
  123.         imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);   
  124.         $pct = $this->transparent;   
  125.         imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);   
  126.         imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);   
  127.     }   
  128.     private function waterstr() {   
  129.         $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);   
  130.         $w = abs($rect[2]-$rect[6]);   
  131.         $h = abs($rect[3]-$rect[7]);   
  132.         $fontHeight = $this->fontSize;   
  133.         $this->water_im = imagecreatetruecolor($w$h);   
  134.         imagealphablending($this->water_im,false);   
  135.         imagesavealpha($this->water_im,true);   
  136.         $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);   
  137.         imagefill($this->water_im,0,0,$white_alpha);   
  138.         $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);   
  139.         imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);   
  140.         $this->waterImg_info = array(0=>$w,1=>$h);   
  141.         $this->waterimg();   
  142.     }   
  143.     function output() {   
  144.         $this->imginfo();   
  145.         if ($this->waterType == 0) {   
  146.             $this->waterstr();   
  147.         }else {   
  148.             $this->waterimginfo();   
  149.             $this->waterimg();   
  150.         }   
  151.         switch ($this->srcImg_info[2]) {   
  152.             case 3:   
  153.                 imagepng($this->im,$this->srcImg);   
  154.                 break 1;   
  155.             case 2:   
  156.                 imagejpeg($this->im,$this->srcImg);   
  157.                 break 1;   
  158.             case 1:   
  159.                 imagegif($this->im,$this->srcImg);   
  160.                 break 1;   
  161.             default:   
  162.                 die('添加水印失败!');   
  163.                 break;   
  164.         }   
  165.         imagedestroy($this->im);   
  166.         imagedestroy($this->water_im);   
  167.     }   
  168. }   
  169. ?>  

原文:http://www.itwhy.org/2011/09-27/1260.html

关键词:PHP源代码水印

赞助商链接: