PHP封装的给图片添加水印的函数

/** 封装可以制作不同位置的水印图的函数
	 * string $src_image,原图路径
	 * string $water_image,水印图路径
	 * string $path,水印图保存位置
	 * string &$error,错误代码
	 * int $position = 1,水印图加的位置,1代表左上角,9代表右下角
	 * int $pct = 20, 透明度
	**/
	function make_water_mark($src_image, $water_image, $path, &$error, $position, $pct) {
		// 验证原图资源和水印图都存在
		if (!is_file($src_image)) {
			$error = '原图不存在';
			return false;
		}
		if (!is_file($water_image)) {
			$error = '水印图不存在';
			return false;
		}

		// 判断路径保存是否存在
		if (!is_dir($path)) {
			$error = '保存位置不正确';
			return false;
		}

		// 确认图片格式,选择适当函数
		$src_info = getimagesize($src_image);
		$water_info = getimagesize($water_image);
		// echo $src_info['mime'];
		$allow = array(
			'image/jpeg' => 'jpeg',
			'image/gif' => 'gif',
			'image/jpg' => 'jpg',
			'image/png' => 'png',
			'image/pjpeg' => 'jpeg'
		);

		// 匹配数据
		if (!array_key_exists($src_info['mime'], $allow)) {
			$error = "当前文件资源不允许制作水印图";
			return false;
		}
		if (!array_key_exists($water_info['mime'], $allow)) {
			$error = "当前水印图资源不允许制作使用";
			return false;
		}


		// 组合函数
		$src_open = 'imagecreatefrom'.$allow[$src_info['mime']];
		$water_open = 'imagecreatefrom'.$allow[$water_info['mime']];
		$src_save = 'image'.$allow[$src_info['mime']];

		// 打开图片资源
		$src = $src_open($src_image);
		$water = $water_open($water_image);

		// 合并图片资源,产生水印
		// 首先计算水印图在原图中出现的位置
		$start_x = $start_y = 0;
		switch ($position) {
			case 1:
				break;
			case 2:
				$start_x = floor(($src_info[0] - $water_info[0])/2);
				break;
			case 3:
				$start_x = $src_info[0] - $water_info[0];
				break;
			case 4:
				$start_y = floor(($src_info[1] - $water_info[1])/2);
				break;
			case 5:
				$start_x = floor(($src_info[0] - $water_info[0])/2);
				$start_y = floor(($src_info[1] - $water_info[1])/2);
				break;
			case 6:
				$start_x = $src_info[0] - $water_info[0];
				$start_y = floor(($src_info[1] - $water_info[1])/2);
				break;
			case 7:
				$start_y = $src_info[1] - $water_info[1];
				break;
			case 8:
				$start_x = floor(($src_info[0] - $water_info[0])/2);
				$start_y = floor(($src_info[1] - $water_info[1])/2);
				break;
			case 9:
				$start_x = $src_info[0] - $water_info[0];
				$start_y = $src_info[1] - $water_info[1];
				break;
		}
		// 合并图片资源,产生水印
		if (imagecopymerge($src, $water, $start_x, $start_y, 0, 0, $water_info[0], $water_info[1], $pct)) {
			// 成功,保存图片
			// header('Content-type:'.$src_info['mime']);
			$imagename = 'watermark_'.$src_image;
			$src_save($src, $path.'/watermark_'.$src_image);

			// 销毁资源
			imagedestroy($src);
			imagedestroy($water);
			return $imagename;
		} else {
			// 失败
			echo "水印图制作失败";
			return false;
		}

	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值