Home  >  Article  >  Backend Development  >  PHP image watermark code_PHP tutorial

PHP image watermark code_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:16:30878browse

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);
}
}
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/325912.htmlTechArticle支持文字水印、图片水印 支持水印的位置随机或固定(九宫格) 水印透明度设置(图片水印和文字水印都支持) 文字水印的字体、颜色、...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn