今天花了一点时间研究了php中imagecopymerge函数,这个函数是为图片添加水印的一个函数,我为此写了一个方法为需要的图片添加水 印,希望对你有所帮助,也希望你提出宝贵的意见!
<?php
/*
* Created on 2011-5-12
* author 孤独求学人
*/
function waterMark($srcimg,$waterimg,$savename,$savepath,$position=1,$alpha=20){
//判断原图片是否存在
if(!file_exists($srcimg)){
return "原始图片不存在";
}
//判断水印图片是否存在
if(!file_exists($waterimg)){
return "水印图片不存在";
}
//图像合并程度是0和100之间的数值,既水印的透明度
if($alpha > 100 || $alpha < 0){
return "$alpha 必须大于0小于100";
}
//获取原始图片的信息
$temp = pathinfo($srcimg);
$srcimg_basename = $temp['basename'];
$srcimg_path = $temp['dirname'];
$savename = isset($savename) ? $savename : $srcimg_basename;//存储图片的名字
$savepath = isset($savepath) ? $savepath : $srcimg_path;//图片存储路径
$savefile = $savepath."/".$savename;//保存文件
$srcinfo = @getimagesize($srcimg);//获取原始图片的信息
$waterinfo = @getimagesize($waterimg);//获取水印图片的信息
//判断水印位置
switch($position){
case "1"://顶部居左
$x=$y=0;
break;
case "2"://顶部居右
$x = $srcinfo[0] - $waterinfo[0];$y=0;
break;
case "3"://顶部居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y=0;
break;
case "4"://图片居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y = ($srcinfo[1]-$waterinfo[1])/2;
break;
case "5"://底部居左
$x = 0;$y = $srcinfo[1]-$waterinfo[1];
break;
case "6"://底部居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y = $srcinfo[1]-$waterinfo[1];
break;
case "7"://底部居右
$x = $srcinfo[0] - $waterinfo[0];$y = $srcinfo[1]-$waterinfo[1];
break;
default:
$x=$y=0;
}
$srcImageObj = image_create_image_ext($srcimg);
if(!$srcImageObj){
return "原始新建图像失败";
}
$waterImageObj = image_create_image_ext($waterimg);
if(!$waterImageObj){
return "水印图片新建失败";
}
/*
* 拷贝并合并图像的一部分int imagecopymerge
* 其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时本函数和 imagecopy() 完全一样。
* 参数 说明
* 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() 完全一样
*/
imagecopymerge($srcImageObj,$waterImageObj,$x,$y,0,0,$waterinfo[0],$waterinfo[1],$alpha);
//判断原始图片的类型
switch($srcinfo[2]){
case '1'://以 GIF 格式将图像输出到文件
imagegif($srcImageObj,$savefile);
break;
case '2'://以 JPG 格式将图像输出到文件
imagejpeg($srcImageObj,$savefile);
break;
case '3'://以 PNG 格式将图像输出到文件
imagepng($srcImageObj,$savefile);
break;
default:
return false;
}
//销毁图像
imagedestroy($srcImageObj);
imagedestroy($waterImageObj);
return $savefile;
}
/*
* resource imagecreatefromgif ( string filename)
* imagecreatefromgif() 返回一图像标识符,代表了从给定的文件名取得的图像。
*/
function image_create_image_ext($filename){
$info = @getimagesize($filename);
$im ="";
switch($info[2]){
case "1":
return $im = imagecreatefromgif($filename);
break;
case "2":
return $im = imagecreatefromjpeg($filename);
break;
case "3":
return $im = imagecreatefrompng($filename);
break;
}
}
?>