PHP图片添加水印(先对水印图片进行缩放)

标签:      

PHP对图片添加水印,并对水印图片先进行缩放

演示效果图如下

img

主要函数:

/*
* 图片添加水印
* @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);

发表评论 登录

目前评论:1

  • avatar ii 回复 2019-07-29 15:07:58

    mark马克