PHP添加文字水印或图片水印的水印类完整源代码与使用示例
PHP实现的给图片添加水印功能,可添加文字水印或图片水印,使用文字水印时需要提供字体文件,使用图片水印时需要提供水印图片,水印图片不能比要添加水印的图片大,请使用背景透明的水印图片。
该水印类支持自定义水印位置、自定义水印大小和水印的透明度,字体水印可自定义颜色等,功能已相应完善。
完整源代码如下(注解中已给出使用示例):
$waterType=1;//类型:0为文字水印、1为图片水印
*$obj->$transparent=45;//水印透明度
*$obj->$waterStr='www.nhooo.com';//水印文字
*$obj->$fontSize=18;//文字字体大小
*$obj->$fontColor=array(255,255,255);//水印文字颜色(RGB)
*$obj->$fontFile='AHGBold.ttf';//字体文件
*……
*$obj->output();//输出水印图片文件覆盖到输入的图片文件
*/
classWaterMask{
public$waterType=0;//水印类型:0为文字水印、1为图片水印
public$pos=0;//水印位置
public$transparent=45;//水印透明度
public$waterStr='www.nhooo.com';//水印文字
public$fontSize=18;//文字字体大小
public$fontColor=array(255,255,255);//水印文字颜色(RGB)
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='';//水印X坐标
private$y='';//水印y坐标
function__construct($img){//析构函数
$this->srcImg=file_exists($img)?$img:die('"'.$img.'"源文件不存在!');
}
privatefunctionimginfo(){//获取需要添加水印的图片的信息,并载入图片。
$this->srcImg_info=getimagesize($this->srcImg);
switch($this->srcImg_info[2]){
case3:
$this->im=imagecreatefrompng($this->srcImg);
break1;
case2:
$this->im=imagecreatefromjpeg($this->srcImg);
break1;
case1:
$this->im=imagecreatefromgif($this->srcImg);
break1;
default:
die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
privatefunctionwaterimginfo(){//获取水印图片的信息,并载入图片。
$this->waterImg_info=getimagesize($this->waterImg);
switch($this->waterImg_info[2]){
case3:
$this->water_im=imagecreatefrompng($this->waterImg);
break1;
case2:
$this->water_im=imagecreatefromjpeg($this->waterImg);
break1;
case1:
$this->water_im=imagecreatefromgif($this->waterImg);
break1;
default:
die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
privatefunctionwaterpos(){//水印位置算法
switch($this->pos){
case0://随机位置
$this->x=rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);
$this->y=rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);
break1;
case1://上左
$this->x=0;
$this->y=0;
break1;
case2://上中
$this->x=($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y=0;
break1;
case3://上右
$this->x=$this->srcImg_info[0]-$this->waterImg_info[0];
$this->y=0;
break1;
case4://中左
$this->x=0;
$this->y=($this->srcImg_info[1]-$this->waterImg_info[1])/2;
break1;
case5://中中
$this->x=($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y=($this->srcImg_info[1]-$this->waterImg_info[1])/2;
break1;
case6://中右
$this->x=$this->srcImg_info[0]-$this->waterImg_info[0];
$this->y=($this->srcImg_info[1]-$this->waterImg_info[1])/2;
break1;
case7://下左
$this->x=0;
$this->y=$this->srcImg_info[1]-$this->waterImg_info[1];
break1;
case8://下中
$this->x=($this->srcImg_info[0]-$this->waterImg_info[0])/2;
$this->y=$this->srcImg_info[1]-$this->waterImg_info[1];
break1;
default://下右
$this->x=$this->srcImg_info[0]-$this->waterImg_info[0];
$this->y=$this->srcImg_info[1]-$this->waterImg_info[1];
break1;
}
}
privatefunctionwaterimg(){
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);
}
privatefunctionwaterstr(){
$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();
}
functionoutput(){
$this->imginfo();
if($this->waterType==0){
$this->waterstr();
}else{
$this->waterimginfo();
$this->waterimg();
}
switch($this->srcImg_info[2]){
case3:
imagepng($this->im,$this->srcImg);
break1;
case2:
imagejpeg($this->im,$this->srcImg);
break1;
case1:
imagegif($this->im,$this->srcImg);
break1;
default:
die('添加水印失败!');
break;
}
imagedestroy($this->im);
imagedestroy($this->water_im);
}
}
?>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。