<?php
class
WaterMask{
public
$waterType
= 1;
public
$pos
= 0;
public
$transparent
= 45;
public
$waterStr
=
'www.itwhy.org'
;
public
$fontSize
= 16;
public
$fontColor
=
array
(255,0,255);
public
$fontFile
=
'AHGBold.ttf'
;
public
$waterImg
=
'logo.png'
;
private
$srcImg
=
''
;
private
$im
=
''
;
private
$water_im
=
''
;
private
$srcImg_info
=
''
;
private
$waterImg_info
=
''
;
private
$str_w
=
''
;
private
$str_h
=
''
;
private
$x
=
''
;
private
$y
=
''
;
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
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);
}
}
?>