PHP image watermarking class code
- 2020-05-19 04:25:56
- OfStack
Support text watermark, image watermark
Random or fixed location of watermarking (9 palace)
Watermark transparency setting (image watermark and text watermark are supported)
Text watermark font, color, size Settings
The background of the image watermark is transparent
Random or fixed location of watermarking (9 palace)
Watermark transparency setting (image watermark and text watermark are supported)
Text watermark font, color, size Settings
The background of the image watermark is transparent
<?php
/**
* Add watermark class, support text image watermark transparency Settings, watermark image background transparent.
* Date: 2011-09-27
* The author: www.ofstack.com
* Use:
* $obj = new WaterMask($imgFileName); // Instantiate object
* $obj->$waterType = 1; // Type: 0 For text watermarking, 1 Image watermarking
* $obj->$transparent = 45; // Watermark transparency
* $obj->$waterStr = 'www.ofstack.com'; // Watermark text
* $obj->$fontSize = 16; // Text font size
* $obj->$fontColor = array(255,0255); // Watermark text color ( RGB )
* $obj->$fontFile = = 'AHGBold.ttf'; // The font file
* $obj->output(); // The output watermark image file overrides the input image file
*/
class WaterMask{
public $waterType = 1; // Watermark type: 0 For text watermarking, 1 Image watermarking
public $pos = 0; // The watermark position
public $transparent = 45; // Watermark transparency
public $waterStr = 'www.ofstack.com'; // Watermark text
public $fontSize = 16; // Text font size
public $fontColor = array(255,0,255); // Watermark text color ( RGB )
public $fontFile = 'AHGBold.ttf'; // The font file
public $waterImg = 'logo.png'; // The watermark image
private $srcImg = ''; // Images that need to be watermarked
private $im = ''; // Pictures of handle
private $water_im = ''; // Watermark image handle
private $srcImg_info = ''; // Image information
private $waterImg_info = ''; // Watermark image information
private $str_w = ''; // Watermark text width
private $str_h = ''; // Watermark height
private $x = ''; // The watermark X coordinates
private $y = ''; // The watermark y coordinates
function __construct($img) { // The destructor
$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" Source file does not exist! ');
}
private function imginfo() { // Gets information about the image that needs to be watermarked and loads 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(' The original pictures ( '.$this->srcImg.' ) format is wrong, only support 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.' ) format is wrong, only support PNG , JPEG , GIF . ');
}
}
private function waterpos() { // Watermark location algorithm
switch ($this->pos) {
case 0: // Random location
$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: // On the left
$this->x = 0;
$this->y = 0;
break 1;
case 2: // middle
$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y = 0;
break 1;
case 3: // On the right
$this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
$this->y = 0;
break 1;
case 4: // centre-left
$this->x = 0;
$this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
break 1;
case 5: // In the
$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: // The centre-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: // Key levels
$this->x = 0;
$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
break 1;
case 8: // Under the
$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
break 1;
default: // 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! ');
}
$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(' Watermarking failed! ');
break;
}
imagedestroy($this->im);
imagedestroy($this->water_im);
}
}
?>