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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。