给图片加水印的具体做法.docx

上传人:b****4 文档编号:4885301 上传时间:2022-12-11 格式:DOCX 页数:11 大小:19.41KB
下载 相关 举报
给图片加水印的具体做法.docx_第1页
第1页 / 共11页
给图片加水印的具体做法.docx_第2页
第2页 / 共11页
给图片加水印的具体做法.docx_第3页
第3页 / 共11页
给图片加水印的具体做法.docx_第4页
第4页 / 共11页
给图片加水印的具体做法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

给图片加水印的具体做法.docx

《给图片加水印的具体做法.docx》由会员分享,可在线阅读,更多相关《给图片加水印的具体做法.docx(11页珍藏版)》请在冰豆网上搜索。

给图片加水印的具体做法.docx

给图片加水印的具体做法

给图片加水印的具体做法(文字型水印和图片型水印)

Test.php文件具体内容:

php

/*

*功能:

PHP图片水印(水印支持图片或文字)

*参数:

*$backImage背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;

*$waterPos水印位置,有10种状态,0为随机位置;

*1为顶端居左,2为顶端居中,3为顶端居右;

*4为中部居左,5为中部居中,6为中部居右;

*7为底端居左,8为底端居中,9为底端居右;

*$waterImage图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;

*$waterText文字水印,即把文字作为为水印,支持ASCII码,不支持中文;

*$textFont文字大小,值为1、2、3、4或5,默认为5;

*$textColor文字颜色,值为十六进制颜色值,默认为#FF0000(红色);

*

*注意:

SupportGD2.0,SupportFreeType、GIFRead、GIFCreate、JPG、PNG

*$waterImage和$waterText最好不要同时使用,选其中之一即可,优先使用$waterImage。

*当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。

*加水印后的图片的文件名和$backImage一样。

*原作者:

longware于2004-11-3

*修改:

杨正元2012-2-2516:

13:

23

*

*/

functionimageWaterMake($backImage,$waterPos=0,$waterImage="",$waterText="",$textFont=5,$textColor="#234567")

{

$isWaterImage=FALSE;

$formatMsg="暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。

";

//读取水印文件

if(!

empty($waterImage)&&file_exists($waterImage)){

$isWaterImage=TRUE;

$water_info=getimagesize($waterImage);

/*

*getimagesize($waterImage)

*解释:

*这里$arr为一个数组类型

*$arr[0]为图像的宽度

*$arr[1]为图像的高度

*$arr[2]为图像的格式,包括jpg、gif和png等

*$arr[3]为图像的宽度和高度,内容为width="xxx"height="yyy"

*/

$water_w=$water_info[0];//取得水印图片的宽

$water_h=$water_info[1];//取得水印图片的高

switch($water_info[2]){//取到水印图片的格式

case1:

$water_image=imagecreatefromgif($waterImage);

break;

case2:

$water_image=imagecreatefromjpeg($waterImage);

break;

case3:

$water_image=imagecreatefrompng($waterImage);

break;

default:

die($formatMsg);

}

}

//读取背景图片

if(file_exists($backImage)&&!

empty($backImage)){

$back_info=getimagesize($backImage);

$back_w=$back_info[0];//取得背景图片的宽

$back_h=$back_info[1];//取得背景图片的高

switch($back_info[2]){//取到水印图片的格式

case1:

$back_image=imagecreatefromgif($backImage);

break;

case2:

$back_image=imagecreatefromjpeg($backImage);

break;

case3:

$back_image=imagecreatefrompng($backImage);

break;

default:

die($formatMsg);

}

}else{

die('需要加水印的图片不存在!

');

}

//水印位置

if($isWaterImage){//图片水印

//图片型水印

$w=$water_w;

$h=$water_h;

$label="图片的";

}else{

//文字型的水印

$temp=imagettfbbox(ceil($textFont*2.5),0,"C:

\WINDOWS\Fonts\SIMLI.TTF",$waterText);

/*

*ceil()函数向上舍入为最接近的整数。

*

*

*

*

*imagettfbbox函数的坐标系统的认识

*写TTF文字到图中。

*语法:

arrayImageTTFBBox(intsize,intangle,stringfontfile,stringtext);

*返回值:

数组

*函数种类:

图形处理

*内容说明

*本函数将TTF(TrueTypeFonts)字型文字写入图片。

*参数size为字形的尺寸;angle为字型的角度,顺时针计算,0度为水平,也就是三点钟的方向(由左到右),90度则为由下到上的文字;

*x,y二参数为文字的坐标值(原点为左下角);参数col为字的颜色;fontfile为字型文件名称,亦可是远端的文件;

*text当然就是字符串内容了。

返回值为数组,包括了八个元素,头二个分别为左下的x、y坐标,第三、四个为右下角的x、y坐标,第五、六及七、八二组分别为右上及左上的x、y坐标。

*注意的是欲使用本函数,系统要装妥GD及Freetype二个函数库。

*

*返回的内容如:

*0=>;2

*1=>;-1

*2=>;258

*3=>;-1

*4=>;258

*5=>;-20

*6=>;2

*7=>;-20

*//下面的是没用的:

*images_width=266

*images_height=29

*font_width=256

*font_height=19

*font_location_x=5

*font_location_y=-15

*/

$w=$temp[2]-$temp[0];

$h=$temp[1]-$temp[7];

//也可以:

//$w=$temp[2]-$temp[6];

//$h=$temp[3]-$temp[7];

unset($temp);

$label="文字的";

}

//检查水印图片的尺寸是否合适(背景图片必须在长宽上都要大于水印图片)

if(($back_h<$h)||$back_w<$w){

echo"需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!

";

return;

}

//判断选择的水印位置在哪里

switch($waterPos){

case0:

//随机

$posX=rand(0,($back_w-$w));

$posY=rand(0,($back_h-$h));

break;

case1:

//1为顶端居左

$posX=0;

$posY=0;

break;

case2:

//2为顶端居中

$posX=($back_w-$w)/2;

$posX=0;

break;

case3:

//3为顶端居右

$posX=$ground_w-$w;

$posY=0;

break;

case4:

//4为中部居左

$posX=0;

$posY=($back_h-$h)/2;

break;

case5:

//5为中部居中

$posX=($back_w-$w)/2;

$posY=($back_h-$h)/2;

break;

case6:

//6为中部居右

$posX=$back_w-$w;

$posY=($back_h-$h)/2;

break;

case7:

//7为底端居左

$posX=0;

$posY=$back_h-$h;

break;

case8:

//8为底端居中

$posX=($back_w-$w)/2;

$posY=$back_h-$h;

break;

case9:

//9为底端居右

$posX=$back_w-$w;

$posY=$back_h-$h;

break;

default:

//随机

$posX=rand(0,($back_w-$w));

$posY=rand(0,($back_h-$h));

break;

}

//设定图像的混色模式

imagealphablending($back_image,TRUE);

/*

*intimagealphablending(resourceimage,boolblendmode)

*imagealphablending()允许在真彩色图像上使用两种不同的绘画模式。

*在混色(blending)模式,alpha通道色彩成分提供给所有的绘画函数,

*例如imagesetpixel()决定底层的颜色应在何种程度上被允许照射透过。

作为结果,

*GD自动将该点现有的颜色和绘画的颜色混合,并将结果储存在图像中。

*结果的像素是不透明的。

*在非混色模式,绘画颜色连同其alpha通道信息一起被拷贝,替换掉目标像素。

*混色模式在画调色板图像时不可用。

如果blendmode为TRUE,则启用混色模式,否则关闭。

*注:

本函数是PHP4.0.6添加的,需要GD2.0.1。

*/

if($isWaterImage)//图片型水印

{

imagecopy($back_image,$water_image,$posX,$posY,0,0,$water_w,$water_h);//拷贝水印到目标文件

/*

*imagecopy()

*imagecopy()函数用于拷贝图像或图像的一部分,成功返回TRUE,否则返回FALSE。

*语法:

*boolimagecopy(resourcedst_im,resourcesrc_im,intdst_x,intdst_y,intsrc_x,intsrc_y,intsrc_w,intsrc_h)

*参数说明:

参数说明

*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开始)拷贝的高度

*

*/

}

else{

if(!

empty($textColor)&&(strlen($textColor)==7)){

$R=hexdec(substr($textColor,1,2));

$G=hexdec(substr($textColor,3,2));

$B=hexdec(substr($textColor,5));

/*

*hexdec()函数把十六进制转换为十进制。

*/

}else{

die("水印文字颜色格式不正确!

");

}

imagestring($back_image,$textFont,$posX,$posY,$waterText,imagecolorallocate($back_image,$R,$G,$B));

/*

*imagestring--水平地画一行字符串。

*intimagestring(resourceimage,intfont,intx,inty,strings,intcol)

*imagestring()用col颜色将字符串s画到image所代表的图像的x,y座标处(图像的左上角为0,0)。

如果font是1,2,3,4或5,则使用内置字体。

*/

}

//生成水印后的图片

@unlink($backImage);

/*

*unlink()函数删除文件。

*若成功,则返回true,失败则返回false。

*/

switch($back_info[2]){

case1:

imagegif($back_image,$backImage);

/*

*ImageGIF

*建立GIF图型。

*语法:

intimagegif(intim,string[filename]);

*返回值:

整数

*函数种类:

图形处理

*内容说明

*本函数用来建立一张GIF格式图形。

参数im为使用ImageCreate()所建立的图片代码。

参数filename可省略,

*若无本参数filename,则会将图片指接送到浏览器端,记得在送出图片之前要先送出使用Content-type:

image/gif的标头字符串(header)到浏览器端,以顺利传输图片。

*若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用ImageColorTransparent()配置透明背景。

*本函数产生的GIF图,由于有版权的问题,因此在商业上的使用还要多加考量。

*/

break;

case2:

imagejpeg($back_image,$backImage);

break;

case3:

imagepng($back_image,$backImage);

break;

default:

die($errorMsg);

}

//释放内存

if(isset($water_info))

unset($water_info);

if(isset($water_image))

imagedestroy($water_image);

unset($back_info);

imagedestroy($back_image);

}

 

//-----------------------------------------------------------------------------

if(!

empty($_FILES)){

$filename=$_FILES['imagefile']['name'];

if(copy($_FILES['imagefile']['tmp_name'],$filename)){

$waterImage="logo.jpg";//水印图片路径

imageWaterMake($filename,5,$waterImage);

echo"";

}else{

echo"no";

}

}

?

>

文件:


展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1