PHP图片添加水印功能示例小结
本文实例总结了PHP图片添加水印功能。分享给大家供大家参考,具体如下:
例1、很简单图下添加水印函数
<?php
/**
*追加水印
*
*@paramstring$source_img原始图片url
*@paramstring$water_map水印图片url
*/
functionaddWaterMap($source_img,$water_map)
{
$img=imagecreatefromjpeg($source_img);//读取原图
$img_x=imagesx($img);//原图宽
$img_y=imagesy($img);//原图高
imagealphablending($img,true);//设置为混合填色模式
//$img_water_map=imagecreatefromjpeg($water_map);//读取水印图片
$img_water_map=imagecreatefrompng($water_map);
$water_x=imagesx($img_water_map);//水印宽
$water_y=imagesy($img_water_map);//水印高
$wimg_x=$img_x-$water_x-10;//水印x坐标
$wimg_y=$img_y-$water_y-10;//水印y坐标
imagecopy($img,$img_water_map,$wimg_x,$wimg_y,0,0,$water_x,$water_y);//分别为原图,水印,水印x坐标,水印y坐标,水印图片横轴开始点,水印图片纵轴开始点,水印横轴结束,水印纵轴结束
imagejpeg($img,$source_img,95);//输出到目标文件
imagedestroy($img);//销毁内存数据流
imagedestroy($img_water_map);//销毁内存数据流
returntrue;
}
?>
实例2、一个比较完整图片增加水印类
<?php
/**
*图片加水印(适用于png/jpg/gif格式)
*
*@authorflynetcn
*
*@param$srcImg原图片
*@param$waterImg水印图片
*@param$savepath保存路径
*@param$savename保存名字
*@param$positon水印位置
*1:顶部居左,2:顶部居右,3:居中,4:底部局左,5:底部居右
*@param$alpha透明度--0:完全透明,100:完全不透明
*
*@return成功--加水印后的新图片地址
*失败---1:原文件不存在,-2:水印图片不存在,-3:原文件图像对象建立失败
*-4:水印文件图像对象建立失败-5:加水印后的新图片保存失败
*/
functionimg_water_mark($srcImg,$waterImg,$savepath=null,$savename=null,$positon=5,$alpha=30)
{
$temp=pathinfo($srcImg);
$name=$temp['basename'];
$path=$temp['dirname'];
$exte=$temp['extension'];
$savename=$savename?$savename:$name;
$savepath=$savepath?$savepath:$path;
$savefile=$savepath.'/'.$savename;
$srcinfo=@getimagesize($srcImg);
if(!$srcinfo){
return-1;//原文件不存在
}
$waterinfo=@getimagesize($waterImg);
if(!$waterinfo){
return-2;//水印图片不存在
}
$srcImgObj=image_create_from_ext($srcImg);
if(!$srcImgObj){
return-3;//原文件图像对象建立失败
}
$waterImgObj=image_create_from_ext($waterImg);
if(!$waterImgObj){
return-4;//水印文件图像对象建立失败
}
switch($positon){
//1顶部居左
case1:$x=$y=0;break;
//2顶部居右
case2:$x=$srcinfo[0]-$waterinfo[0];$y=0;break;
//3居中
case3:$x=($srcinfo[0]-$waterinfo[0])/2;$y=($srcinfo[1]-$waterinfo[1])/2;break;
//4底部居左
case4:$x=0;$y=$srcinfo[1]-$waterinfo[1];break;
//5底部居右
case5:$x=$srcinfo[0]-$waterinfo[0];$y=$srcinfo[1]-$waterinfo[1];break;
default:$x=$y=0;
}
imagecopymerge($srcImgObj,$waterImgObj,$x,$y,0,0,$waterinfo[0],$waterinfo[1],$alpha);
switch($srcinfo[2]){
case1:imagegif($srcImgObj,$savefile);break;
case2:imagejpeg($srcImgObj,$savefile);break;
case3:imagepng($srcImgObj,$savefile);break;
default:return-5;//保存失败
}
imagedestroy($srcImgObj);
imagedestroy($waterImgObj);
return$savefile;
}
functionimage_create_from_ext($imgfile)
{
$info=getimagesize($imgfile);
$im=null;
switch($info[2]){
case1:$im=imagecreatefromgif($imgfile);break;
case2:$im=imagecreatefromjpeg($imgfile);break;
case3:$im=imagecreatefrompng($imgfile);break;
}
return$im;
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。