程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP加水印代碼 支持文字和圖片水印

PHP加水印代碼 支持文字和圖片水印

編輯:關於PHP編程

       PHP加圖片水印、文字水印類代碼,PHP加水印類,支持文字圖片水印的透明度設置、水印圖片背景透明。自己寫的一個類,因為自己開發的一套CMS中要用到,網上的總感覺用著不順手,希望大家也喜歡這個類,後附有類使用方法。

      001

      002class WaterMask{

      003 public $waterType = 1; //水印類型:0為文字水印、1為圖片水印

      004 public $pos = 0; //水印位置

      005 public $transparent = 45; //水印透明度

      006 public $waterStr = 'www.codefans.net'; //水印文字

      007 public $fontSize = 16; //文字字體大小

      008 public $fontColor = array(255,0,255); //水印文字顏色(RGB)

      009 public $fontFile = 'AHGBold.ttf';//字體文件

      010 public $waterImg = 'logo.png';//水印圖片

      011 private $srcImg = '';//需要添加水印的圖片

      012 private $im = '';//圖片句柄

      013 private $water_im = '';//水印圖片句柄

      014 private $srcImg_info = '';//圖片信息

      015 private $waterImg_info = '';//水印圖片信息

      016 private $str_w = '';//水印文字寬度

      017 private $str_h = '';//水印文字高度

      018 private $x = '';//水印X坐標

      019 private $y = '';//水印y坐標

      020 function __construct($img) {

      021 $this->srcImg = file_exists($img) $img : die('"'.$img.'" 對不起,水印文件不存在!');

      022 }

      023 private function imginfo() {//獲取水印圖片信息,並加載。

      024 $this->srcImg_info = getimagesize($this->srcImg);

      025 switch ($this->srcImg_info[2]) {

      026 case 3:

      027 $this->im = imagecreatefrompng($this->srcImg);

      028 break 1;

      029 case 2:

      030 $this->im = imagecreatefromjpeg($this->srcImg);

      031 break 1;

      032 case 1:

      033 $this->im = imagecreatefromgif($this->srcImg);

      034 break 1;

      035 default:

      036 die('水印圖片('.$this->srcImg.')水印圖片格式不對,請選擇PNG、JPEG、GIF格式的圖片。');

      037 }

      038 }

      039 private function waterimginfo() {//獲取水印圖片並載入。

      040 $this->waterImg_info = getimagesize($this->waterImg);

      041 switch ($this->waterImg_info[2]) {

      042 case 3:

      043 $this->water_im = imagecreatefrompng($this->waterImg);

      044 break 1;

      045 case 2:

      046 $this->water_im = imagecreatefromjpeg($this->waterImg);

      047 break 1;

      048 case 1:

      049 $this->water_im = imagecreatefromgif($this->waterImg);

      050 break 1;

      051 default:

      052 die('水印圖片('.$this->srcImg.')格式不對,只支持PNG、JPEG、GIF。');

      053 }

      054 }

      055 private function waterpos() {//水印位置算法

      056 switch ($this->pos) {

      057 case 0: //隨機位置

      058 $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);

      059 $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);

      060 break 1;

      061 case 1: //上左

      062 $this->x = 0;

      063 $this->y = 0;

      064 break 1;

      065 case 2: //上中

      066 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

      067 $this->y = 0;

      068 break 1;

      069 case 3: //上右

      070 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

      071 $this->y = 0;

      072 break 1;

      073 case 4: //中左

      074 $this->x = 0;

      075 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

      076 break 1;

      077 case 5: //中中

      078 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

      079 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

      080 break 1;

      081 case 6: //中右

      082 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

      083 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

      084 break 1;

      085 case 7: //下左

      086 $this->x = 0;

      087 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

      088 break 1;

      089 case 8: //下中

      090 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

      091 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

      092 break 1;

      093 default: //下右

      094 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

      095 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

      096 break 1;

      097 }

      098 }

      099 private function waterimg() {

      100 if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){

      101 die('水印比原圖大!');

      102 }

      103 $this->waterpos();

      104 $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);

      105 imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);

      106 $pct = $this->transparent;

      107 imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);

      108 imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);

      109 }

      110 private function waterstr() {

      111 $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);

      112 $w = abs($rect[2]-$rect[6]);

      113 $h = abs($rect[3]-$rect[7]);

      114 $fontHeight = $this->fontSize;

      115 $this->water_im = imagecreatetruecolor($w, $h);

      116 imagealphablending($this->water_im,false);

      117 imagesavealpha($this->water_im,true);

      118 $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);

      119 imagefill($this->water_im,0,0,$white_alpha);

      120 $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);

      121 imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);

      122 $this->waterImg_info = array(0=>$w,1=>$h);

      123 $this->waterimg();

      124 }

      125 function output() {

      126 $this->imginfo();

      127 if ($this->waterType == 0) {

      128 $this->waterstr();

      129 }else {

      130 $this->waterimginfo();

      131 $this->waterimg();

      132 }

      133 switch ($this->srcImg_info[2]) {

      134 case 3:

      135 imagepng($this->im,$this->srcImg);

      136 break 1;

      137 case 2:

      138 imagejpeg($this->im,$this->srcImg);

      139 break 1;

      140 case 1:

      141 imagegif($this->im,$this->srcImg);

      142 break 1;

      143 default:

      144 die('原因未知:水印添加失敗!');

      145 break;

      146 }

      147 imagedestroy($this->im);

      148 imagedestroy($this->water_im);

      149 }

      150}

      151?>

      PHP生成水印類用法:

      view sourceprint?01

      02$obj = new WaterMask($imgFileName);

      03$obj->$waterType = 1;//水印類型:0為文字水印、1為圖片水印

      04$obj->$transparent = 45;//水印透明度

      05$obj->$waterStr = 'www.codefans.net';//水印文字

      06$obj->$fontSize = 16;//字體大小

      07$obj->$fontColor = array(255,0,255);//水印文字顏色(RGB值)

      08$obj->$fontFile = = 'AHGBold.ttf'; //字體名稱

      09$obj->output(); //輸出水印圖片

      10?>

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved