PHP add text watermark or picture watermark watermark class complete source code and use examples
- 2021-12-04 09:44:31
- OfStack
PHP to add a picture watermark function, can add text watermark or picture watermark, use text watermark need to provide font file, use picture watermark need to provide watermark picture, watermark picture can not be larger than the picture to add watermark, please use background transparent watermark picture.
The watermark class supports customization of watermark location, watermark size and watermark transparency, font watermark can customize color and so on, and its functions have been improved accordingly.
The complete source code is as follows (examples of use are given in the comments):
<?php
/**
* Picture watermarking class, support text watermarking, transparency setting, custom watermark position, etc.
* Use example:
* $obj = new WaterMask($imgFileName); // Instantiate object
* $obj->$waterType = 1; // Type: 0 For text watermarking, 1 Watermark a picture
* $obj->$transparent = 45; // Watermark transparency
* $obj->$waterStr = 'www.ofstack.com'; // Watermark text
* $obj->$fontSize = 18; // Text font size
* $obj->$fontColor = array(255,255,255); // Watermark text color ( RGB )
* $obj->$fontFile = 'AHGBold.ttf'; // Font file
* ...
* $obj->output(); // The output watermark image file overwrites the input image file
*/
class WaterMask{
public $waterType = 0; // Watermark type: 0 For text watermarking, 1 Watermark a picture
public $pos = 0; // Watermark location
public $transparent = 45; // Watermark transparency
public $waterStr = 'www.ofstack.com'; // Watermark text
public $fontSize = 18; // Text font size
public $fontColor = array(255,255,255); // Watermark text color ( RGB )
public $fontFile = 'AHGBold.ttf'; // Font file
public $waterImg = 'logo.png'; // Watermark image
private $srcImg = ''; // Pictures that need to be watermarked
private $im = ''; // Picture handle
private $water_im = ''; // Watermark image 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 Coordinates
private $y = ''; // Watermark y Coordinates
function __construct($img) { // Destructor
$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" Source file does not exist! ');
}
private function imginfo() { // Get the information of the picture that needs to be watermarked, and load the picture.
$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 information of the watermark picture and load the picture.
$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.' ) Format is incorrect, only supports PNG , JPEG , GIF . ');
}
}
private function waterpos() { // Watermark location algorithm
switch ($this->pos) {
case 0: // Random position
$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: // Upper left
$this->x = 0;
$this->y = 0;
break 1;
case 2: // Upper middle
$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y = 0;
break 1;
case 3: // Upper right
$this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
$this->y = 0;
break 1;
case 4: // Center-left
$this->x = 0;
$this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
break 1;
case 5: // Middle-middle
$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: // Middle right
$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: // Lower left
$this->x = 0;
$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
break 1;
case 8: // Lower middle
$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
break 1;
default: // Lower right
$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(' The watermark is bigger than the original image! ');
}
$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(' Failed to add watermark! ');
break;
}
imagedestroy($this->im);
imagedestroy($this->water_im);
}
}
?>
Summarize