php给图片添加文字水印方法汇总
1:面向过程的编写方法
//指定图片路径 $src='001.png'; //获取图片信息 $info=getimagesize($src); //获取图片扩展名 $type=image_type_to_extension($info[2],false); //动态的把图片导入内存中 $fun="imagecreatefrom{$type}"; $image=$fun('001.png'); //指定字体颜色 $col=imagecolorallocatealpha($image,255,255,255,50); //指定字体内容 $content='helloworld'; //给图片添加文字 imagestring($image,5,20,30,$content,$col); //指定输入类型 header('Content-type:'.$info['mime']); //动态的输出图片到浏览器中 $func="image{$type}"; $func($image); //销毁图片 imagedestroy($image);
2:面向对象的实现方法
classImage_class{ private$image; private$info; /** *@param$src:图片路径 *加载图片到内存中 */ function__construct($src){ $info=getimagesize($src); $type=image_type_to_extension($info[2],false); $this->info=$info; $this->info['type']=$type; $fun="imagecreatefrom".$type; $this->image=$fun($src); } /** *@param$fontsize:字体大小 *@param$x:字体在图片中的x位置 *@param$y:字体在图片中的y位置 *@param$color:字体的颜色是一个包含rgba的数组 *@param$text:想要添加的内容 *操作内存中的图片,给图片添加文字水印 */ publicfunctionfontMark($fontsize,$x,$y,$color,$text){ $col=imagecolorallocatealpha($this->image,$color[0],$color[1],$color[2],$color[3]); imagestring($this->image,$fontsize,$x,$y,$text,$col); } /* *输出图片到浏览器中 */ publicfunctionshow(){ header('content-type:'.$this->info['mime']); $fun='image'.$this->info['type']; $fun($this->image); } /** *销毁图片 */ function__destruct(){ imagedestroy($this->image); } } //对类的调用 $obj=newImage_class('001.png'); $obj->fontMark(20,20,30,array(255,255,255,60),'hello'); $obj->show();
3.支持以图片和文字两种方式给图片添加水印。图片支持GIF,PNG,JPG三种格式,水印图片支持PNG和GIF
functionsetWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType) { $srcInfo=@getimagesize($imgSrc); $srcImg_w=$srcInfo[0]; $srcImg_h=$srcInfo[1]; switch($srcInfo[2]) { case1: $srcim=imagecreatefromgif($imgSrc); break; case2: $srcim=imagecreatefromjpeg($imgSrc); break; case3: $srcim=imagecreatefrompng($imgSrc); break; default: die("不支持的图片文件类型"); exit; } if(!strcmp($markType,"img")) { if(!file_exists($markImg)||empty($markImg)) { return; } $markImgInfo=@getimagesize($markImg); $markImg_w=$markImgInfo[0]; $markImg_h=$markImgInfo[1]; if($srcImg_w<$markImg_w||$srcImg_h<$markImg_h) { return; } switch($markImgInfo[2]) { case1: $markim=imagecreatefromgif($markImg); break; case2: $markim=imagecreatefromjpeg($markImg); break; case3: $markim=imagecreatefrompng($markImg); break; default: die("不支持的水印图片文件类型"); exit; } $logow=$markImg_w; $logoh=$markImg_h; } if(!strcmp($markType,"text")) { $fontSize=16; if(!empty($markText)) { if(!file_exists($fontType)) { return; } } else{ return; } $box=@imagettfbbox($fontSize,0,$fontType,$markText); $logow=max($box[2],$box[4])-min($box[0],$box[6]); $logoh=max($box[1],$box[3])-min($box[5],$box[7]); } if($markPos==0) { $markPos=rand(1,9); } switch($markPos) { case1: $x=+5; $y=+5; break; case2: $x=($srcImg_w-$logow)/2; $y=+5; break; case3: $x=$srcImg_w-$logow-5; $y=+15; break; case4: $x=+5; $y=($srcImg_h-$logoh)/2; break; case5: $x=($srcImg_w-$logow)/2; $y=($srcImg_h-$logoh)/2; break; case6: $x=$srcImg_w-$logow-5; $y=($srcImg_h-$logoh)/2; break; case7: $x=+5; $y=$srcImg_h-$logoh-5; break; case8: $x=($srcImg_w-$logow)/2; $y=$srcImg_h-$logoh-5; break; case9: $x=$srcImg_w-$logow-5; $y=$srcImg_h-$logoh-5; break; default: die("此位置不支持"); exit; } $dst_img=@imagecreatetruecolor($srcImg_w,$srcImg_h); imagecopy($dst_img,$srcim,0,0,0,0,$srcImg_w,$srcImg_h); if(!strcmp($markType,"img")) { imagecopy($dst_img,$markim,$x,$y,0,0,$logow,$logoh); imagedestroy($markim); } if(!strcmp($markType,"text")) { $rgb=explode(',',$TextColor); $color=imagecolorallocate($dst_img,$rgb[0],$rgb[1],$rgb[2]); imagettftext($dst_img,$fontSize,0,$x,$y,$color,$fontType,$markText); } switch($srcInfo[2]) { case1: imagegif($dst_img,$imgSrc); break; case2: imagejpeg($dst_img,$imgSrc); break; case3: imagepng($dst_img,$imgSrc); break; default: die("不支持的水印图片文件类型"); exit; } imagedestroy($dst_img); imagedestroy($srcim); }
参数说明:
$imgSrc:目标图片,可带相对目录地址,
$markImg:水印图片,可带相对目录地址,支持PNG和GIF两种格式,如水印图片在执行文件mark目录下,可写成:mark/mark.gif
$markText:给图片添加的水印文字
$TextColor:水印文字的字体颜色
$markPos:图片水印添加的位置,取值范围:0~9
0:随机位置,在1~8之间随机选取一个位置
1:顶部居左2:顶部居中3:顶部居右4:左边居中
5:图片中心6:右边居中7:底部居左8:底部居中9:底部居右
$fontType:具体的字体库,可带相对目录地址
$markType:图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印
4.给图片加文字水印的方法
<?php /*给图片加文字水印的方法*/ $dst_path='http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg'; $dst=imagecreatefromstring(file_get_contents($dst_path)); /*imagecreatefromstring()--从字符串中的图像流新建一个图像,返回一个图像标示符,其表达了从给定字符串得来的图像 图像格式将自动监测,只要php支持jpeg,png,gif,wbmp,gd2.*/ $font='./t1.ttf'; $black=imagecolorallocate($dst,0,0,0); imagefttext($dst,20,0,10,30,$black,$font,'Helloworld!'); /*imagefttext($img,$size,$angle,$x,$y,$color,$fontfile,$text) $img由图像创建函数返回的图像资源 size要使用的水印的字体大小 angle(角度)文字的倾斜角度,如果是0度代表文字从左往右,如果是90度代表从上往下 x,y水印文字的第一个文字的起始位置 color是水印文字的颜色 fontfile,你希望使用truetype字体的路径*/ list($dst_w,$dst_h,$dst_type)=getimagesize($dst_path); /*list(mixed$varname[,mixed$......])--把数组中的值赋给一些变量 像array()一样,这不是真正的函数,而是语言结构,List()用一步操作给一组变量进行赋值*/ /*getimagesize()能获取到什么信息? getimagesize函数会返回图像的所有信息,包括大小,类型等等*/ switch($dst_type){ case1://GIF header("content-type:image/gif"); imagegif($dst); break; case2://JPG header("content-type:image/jpeg"); imagejpeg($dst); break; case3://PNG header("content-type:image/png"); imagepng($dst); break; default: break; /*imagepng--以PNG格式将图像输出到浏览器或文件 imagepng()将GD图像流(image)以png格式输出到标注输出(通常为浏览器),或者如果用filename给出了文件名则将其输出到文件*/ } imagedestroy($dst); ?>