PHP中GD库用imagecopymerge()函数给图片添加文字水印或图片水印

GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。 如果没有开GD库是不可以使用水印功能的,这里教一下怎么开GD(一般都是默认开启的,要是你发现水印没出来,可以看一下你的GD库开了没)。

一、开启GD库

1.首先要找到你的php.ini文件,如果是用wamp的话直接: QQ图片20150610170810 2.打开php.ini文件,ctrl+F找到extension=php_gd2.dll,把extension=php_gd2.dll 前面的【;】去掉,这样就可以了: QQ图片20150616093640 3.用phpinfo()函数或者var_dump(gd_info())函数zuogephp探针测试一下成功没~(这一步纯属无聊写一下,一般上一步成功了,就已经开启了GD库了)。

二.生成水印(这里只适合本地生成,并且水印大小要根据目标图像大小自己设计)

1、语法介绍 涉及的基本语法1: 
bool imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct ) imagecopymerge() 函数用于拷贝并合并图像的一部分,成功返回 TRUE,否则返回 FALSE 。 参数说明: dst_im:目标图像。 src_im:被拷贝的源图像。 dst_x:目标图像开始 x 坐标。 dst_y:目标图像开始 y 坐标,x,y同为 0 则从左上角开始。 src_x:拷贝图像开始 x 坐标。 src_y:拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝。 src_w:(从 src_x 开始)拷贝的宽度。 src_h :(从 src_y 开始)拷贝的高度。 pct:图像合并程度,取值 0-100,当 pct=0 时,实际上什么也没做,反之就是完全合并。当为 pct = 100 时对于调色板图像本函数和 imagecopy() 完全一样,知道了用法,要实现我们的功能就简单了,用下面的代码就可以轻松实现。
涉及的基本语法2:
int imagecolorallocatealpha ( resource image , intred , int green , int blue , int alpha ) imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。如果分配失败则返回 FALSE 。
设计的基本语法3:
array imagettftext ( resource image , float size , float angle , int x , inty , intcolor , string fontfile , string text ) 参数说明: image:由图象创建函数(例如新建一个真彩色图像imagecreatetruecolor())返回的图象资源。 size:字体的尺寸。根据 GD 的版本,为像素尺寸(GD1)或点(磅)尺寸(GD2)。 angle:角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。 x:由 x,y 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和imagestring() 不同,其 x,y 定义了第一个字符的左上角。例如 “top left” 为 0, 0。 用 TrueType 字体向图像写入文本 y:Y 坐标。它设定了字体基线的位置,不是字符的最底端。 color:颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见imagecolorallocate()。 fontfile:是想要使用的 TrueType 字体的路径。用 TrueType 字体向图像写入文本。 text:UTF-8 编码的文本字符串。
2、生成图片水印
//处理水印图片
$srcFile="images/logo_index.png";//水印图像路径
$dstFile="images/pad.jpg";//原始图像(就是要加水印的图片的路径)
$srcFileInfo=getimagesize($srcFile);//这里获得水印图像的信息,包括$src_w(宽),$src_h(高),$srcMime(mime类型)
//getimagesize返回图像的信息,返回一个具有四个单元的数组,索引0包含图像宽度的像素值,索引1包含图像
//高度的像素值,索引2是图像类型的标记,索引3是文本字符串,内容为可直接用于 IMG 标记。
$src_w=$srcFileInfo[0];
$src_h=$srcFileInfo[1];
$srcMime=$srcFileInfo['mime'];
$createSrcFun=str_replace('/','createfrom',$srcMime);
这里就要提到$srcMime返回值,比如图像是gif,那就返回image/gif,即$srcMime=’image/gif’,这样就可以利用了。提一下imagecreatefromgif函数,要生成jpg类型的,就用imagecreatefromjpeg,生成gif,就imagecreatefromgif,后面类型是可变的。假如上面输出mime是gif,用str_replace$srcMime中的’/’换成’createfrom’,则$createSrcFun=’imagecreatefromgif’,这样就可以实现你用什么类型的图像就生成什么类型的图片,就是说你用imagecreatefromgif(),后面的gif是根据你的$srcFile的mime类型而定,这样实现的功能就很强大了,不用你每次都用imagecreatefromgif(),或者其它的,是不是很万能?
//处理原始图片
$dstFileInfo=getimagesize($dstFile);//这里就和上面的差不多,只不过这里处理的是原始图像
$dstMime=$dstFileInfo['mime'];
$createDstFun=str_replace('/','createfrom',$dstMime);
$dst_im=$createDstFun($dstFile);
$src_im=$createSrcFun($srcFile);
//合并图片
$pct=70;
imagecopymerge($dst_im, $src_im, 0, 0, 0, 0, $src_w, $src_h, $pct);//$pct是指透明度,此函数开头已给出参数介绍
header("content-type:".$dstMime); //发一下报文,给出图片类型,指明下面要输出的是图片类型
$outDstFun=str_replace('/',null,$dstMime);//这里用到的是imagejpeg()函数,和上面一样,这里也是'万能'的。
$outDstFun($dst_im);//默认不保存原始图片直接输出合并后的
imagedestroy($src_im);//释放内存,节省资源,注意并不是把合并的图片删了。
imagedestroy($dst_im);
2.生成文字水印
$filename="images/des_big.jpg";//图片路径
$fileInfo=getimagesize($filename);
$mime=$fileInfo['mime'];
$createFun=str_replace("/", "createfrom", $mime);
$outFun=str_replace("/", null, $mime);
$image=$createFun($filename);
$color=imagecolorallocatealpha($image, 255,0,0,50);
$fontfile="SIMYOU.TTF";//这是ttf字体名字
$fontfile="fonts/{$fontfile}";
$text="nafanlong.com";//要生成的文字水印的文字
imagettftext($image, 14, 0, 0, 14, $color, $fontfile, $text);
header("content-type:".$mime);
$outFun($image,$filename);
imagedestroy($image);
下面给出封装好的函数,拿来就可以用:waterTextPic 注:后面会陆续更新的新的文章,希望朋友们支持一下!
标签:   |  
时间: 2015年06月10日下午18:47  |  
作者:
LEAVE A REPLY
loading
正在赶回来……