Supports text watermarks and picture watermarks
Supports random or fixed position of watermark (nine-square grid)
Watermark transparency setting (both picture and text watermarks are supported)
Font, color, and size settings of text watermark
Picture The background of the watermark is transparent
Copy the code The code is as follows:
/**
* Add watermark class, support transparency setting of text and picture watermarks, and transparent background of watermark pictures.
* Date: 2011-09-27
* Author: www.jb51.net
* Usage:
* $obj = new WaterMask($imgFileName); //Instantiate object
* $obj->$waterType = 1; //Type: 0 is text watermark, 1 is picture watermark
* $obj->$transparent = 45; //Watermark transparency
* $obj-> ;$waterStr = 'www.jb51.net'; //Watermark text
* $obj->$fontSize = 16; //Text font size
* $obj->$fontColor = array(255 ,0255); //Watermark text color (RGB)
* $obj->$fontFile = = 'AHGBold.ttf'; //Font file
* $obj->output(); // The output watermark image file is overwritten into the input image file
*/
class WaterMask{
public $waterType = 1; //Watermark type: 0 is text watermark, 1 is image watermark
public $pos = 0; //Watermark position
public $transparent = 45; //Watermark transparency
public $waterStr = 'www.jb51.net'; //Watermark text
public $fontSize = 16; //Text font size
public $fontColor = array(255,0,255); //Watermark text color (RGB)
public $fontFile = 'AHGBold.ttf'; //Font File
public $waterImg = 'logo.png'; //Watermark image
private $srcImg = ''; //Picture that needs to be watermarked
private $im = '' ; //Picture handle
private $water_im = ''; //Watermark picture handle
private $srcImg_info = ''; //Picture information
private $waterImg_info = ''; //Watermark picture information
private $str_w = ''; //Watermark text width
private $str_h = ''; //Watermark text height
private $x = ''; //Watermark X coordinate
private $y = ''; //Watermark y coordinate
function __construct($img) { //Destructor
$this->srcImg = file_exists($img) ? $img : die('" '.$img.'" The source file does not exist!');
}
private function imginfo() { //Get the information of the image that needs to be watermarked and load the image.
$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('original picture('.$this ->srcImg.') format is incorrect, only supports PNG, JPEG, GIF ');
}
}
private function waterimginfo() { //Get the watermark image information and load the image. .
$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('watermark image('.$this ->srcImg.') The format is incorrect and only supports PNG, JPEG, and 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);
}
}
?>
http://www.bkjia.com/PHPjc/325912.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/325912.htmlTechArticle支持文字水印、图片水印 支持水印的位置随机或固定(九宫格) 水印透明度设置(图片水印和文字水印都支持) 文字水印的字体、颜色、...