PHP对图片添加水印,并对水印图片先进行缩放
演示效果图如下
主要函数:
/*
* 图片添加水印
* @param string $picSrc 图片地址
* @param string $waterMarkSrc 水印地址
* @param int $waterMark_x 水印缩放后图片的最大宽度
* @param int $waterMark_y 水印缩放后图片的最大高度
* @param string $alpha 水印透明度
* @param string $begin_x 水印在图片开始的 x 坐标
* @param string $begin_y 水印在图片开始的 y 坐标
* @param string $savePath 生成图片的保存地址(保存地址为空时直接输出图片,为路径时返回保存路径)
*/
public function imgAddWaterMark($picSrc,$waterMarkSrc,$waterMark_x,$waterMark_y,$alpha = 100,$begin_x = 0,$begin_y = 0,$savePath=''){
$waterMarkInfo = getimageSize($waterMarkSrc); //获取水印图片的基本信息
$w = $waterMarkInfo[0];//获取宽度
$h = $waterMarkInfo[1];//获取高度
//获取图片的类型并为此创建对应图片资源
switch($waterMarkInfo[2]){
case 1: //gif
$waterMark_im = imagecreatefromgif($waterMarkSrc);
break;
case 2: //jpg
$waterMark_im = imagecreatefromjpeg($waterMarkSrc);
break;
case 3: //png
$waterMark_im = imagecreatefrompng($waterMarkSrc);
break;
default:
die("图片类型错误!");
}
//计算缩放比例
if(($waterMark_x/$w)>($waterMark_y/$h)){
$b = $waterMark_y/$h;
}else{
$b = $waterMark_x/$w;
}
//计算出缩放后的尺寸
$nw = floor($w*$b);
$nh = floor($h*$b);
//创建一个新的图像源(目标图像)
$new_waterMark_im = imagecreatetruecolor($nw,$nh);
//执行等比缩放
imagecopyresampled($new_waterMark_im,$waterMark_im,0,0,0,0,$nw,$nh,$w,$h);
// 缩放后的水印图片 $new_waterMark_im
//得到原始图片信息
$picSrc_info = getimagesize($picSrc);
switch($picSrc_info[2]){
case 1: //gif
$picSrc_im = imagecreatefromgif($picSrc);
break;
case 2: //jpg
$picSrc_im = imagecreatefromjpeg($picSrc);
break;
case 3: //png
$picSrc_im = imagecreatefrompng($picSrc);
break;
default:
die("图片类型错误!");
}
//合并水印图片
imagecopymerge($picSrc_im,$new_waterMark_im,$begin_x,$begin_y,0,0,$waterMark_x,$waterMark_y,$alpha);
//输出合并后水印图片
if($savePath==''){//直接输出图片
header("Content-type: image/jpeg");
imagejpeg($picSrc_im);
imagedestroy($picSrc_im);
imagedestroy($new_waterMark_im);
}else{//保存图片
$picInfo = pathinfo($picSrc);//解析源图像的名字和路径信息
//print_r($picInfo);exit;
// 检查路径是否存在,如不存在则创建
if (!is_dir($savePath)){
//第三个参数是“true”表示能创建多级目录,iconv防止中文目录乱码
$res=mkdir(iconv("UTF-8", "GBK", $savePath),0777,true);
}
$save_pic_name = $savePath."/".microtime(true).'.'.$picInfo["extension"];
imagejpeg($picSrc_im,$save_pic_name);
imagedestroy($picSrc_im);
imagedestroy($new_waterMark_im);
return $save_pic_name;
}
}
测试:
$picSrc = "https://pane.oss-cn-beijing.aliyuncs.com/zatu/fj/timg.jpg";
$waterMarkSrc = "https://pane.oss-cn-beijing.aliyuncs.com/%E5%B7%A5%E4%BD%9C%E5%AE%A4/%E5%9B%BE%E6%A0%87%E7%B4%A0%E6%9D%90/xcxeyunzhu.jpg";
$waterMark_x = 100;
$waterMark_y = 100;
$alpha = 100;
$begin_x = 0;
$begin_y = 0;
$savePath = "";
$result = $this->imgAddWaterMark($picSrc,$waterMarkSrc,$waterMark_x,$waterMark_y,$alpha,$begin_x ,$begin_y ,$savePath);
echo ($result);
mark马克
提交评论