/*
$tmp="tmp/a.jpg";
$obj = new WaterMask($tmp);
$obj->waterImg = 'sy_logo.png';
$obj->transparent = 50;
$obj->output();
*/
class WaterMask{
public $pos = 0; //水印位置
public $transparent = 45; //水印透明度
public $waterImg = ''; //水印图片
private $srcImg = ''; //需要添加水印的图片
private $im = ''; //图片句柄
private $water_im = ''; //水印图片句柄
private $srcImg_info = ''; //图片信息
private $waterImg_info = ''; //水印图片信息
function __construct($img) { //析构函数
$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');
}
private function imginfo() { //获取需要添加水印的图片的信息,并载入图片。
$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('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterimginfo() { //获取水印图片的信息,并载入图片。
$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('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterimg() {
if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){
die('水印比原图大!');
}
$cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);
$total=($this->srcImg_info[0]/$this->waterImg_info[0])*($this->srcImg_info[1]/$this->waterImg_info[1]);//重复次数
$x=10;$y=10;
for($i=0;$i<=$total;$i++){
if($y>$this->srcImg_info[1]){
$y=10;
$x+=$this->waterImg_info[0]+150;
}
imagecopy($cut,$this->im,0,0,$x,$y,$this->waterImg_info[0],$this->waterImg_info[1]);
imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);
imagecopymerge($this->im,$cut,$x,$y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$this->transparent);
$y+=150;
}
}
function output() {
$this->imginfo();
$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);
}
}
?>