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

Related articles: