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/工作室/图标素材/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马克
提交评论