返回

图片加水印中的PHP自定义函数

后端

在对图片进行编辑处理时,通常会用到图片加水印功能。PHP中提供了丰富的图片处理函数,我们可以利用这些函数来实现图片加水印。本文将介绍几个PHP自定义函数,帮助您轻松给图片添加水印。

在开始之前,我们需要先确保PHP已经启用了GD库。GD库是一个用于图像处理的库,提供了丰富的函数来处理图像。如果尚未启用GD库,请在php.ini文件中找到extension=gd.so一行,并将其前面的注释符号去掉。

// 加载GD库
extension=gd.so

接下来,我们就可以开始编写PHP自定义函数来给图片加水印了。

第一个函数是add_image_watermark()函数,该函数可以给图片添加图片水印。

function add_image_watermark($src_image_path, $watermark_image_path, $output_image_path) {
  // 加载源图片
  $src_image = imagecreatefromjpeg($src_image_path);

  // 加载水印图片
  $watermark_image = imagecreatefrompng($watermark_image_path);

  // 获取水印图片的宽高
  $watermark_width = imagesx($watermark_image);
  $watermark_height = imagesy($watermark_image);

  // 计算水印图片的位置
  $watermark_x = ($src_image_width - $watermark_width) / 2;
  $watermark_y = ($src_image_height - $watermark_height) / 2;

  // 将水印图片复制到源图片上
  imagecopy($src_image, $watermark_image, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height);

  // 保存图片
  imagejpeg($src_image, $output_image_path);

  // 销毁图片资源
  imagedestroy($src_image);
  imagedestroy($watermark_image);
}

第二个函数是add_text_watermark()函数,该函数可以给图片添加文字水印。

function add_text_watermark($src_image_path, $text, $output_image_path) {
  // 加载源图片
  $src_image = imagecreatefromjpeg($src_image_path);

  // 获取图片的宽高
  $src_image_width = imagesx($src_image);
  $src_image_height = imagesy($src_image);

  // 创建一个白色背景的图片
  $text_image = imagecreatetruecolor($src_image_width, $src_image_height);
  imagefilledrectangle($text_image, 0, 0, $src_image_width, $src_image_height, imagecolorallocate($text_image, 255, 255, 255));

  // 在图片上写文字
  $font = 'arial.ttf';
  $font_size = 12;
  $text_color = imagecolorallocate($text_image, 0, 0, 0);
  imagettftext($text_image, $font_size, 0, 10, 20, $text_color, $font, $text);

  // 将文字图片复制到源图片上
  imagecopymerge($src_image, $text_image, 0, 0, 0, 0, $src_image_width, $src_image_height, 50);

  // 保存图片
  imagejpeg($src_image, $output_image_path);

  // 销毁图片资源
  imagedestroy($src_image);
  imagedestroy($text_image);
}

第三个函数是add_shape_watermark()函数,该函数可以给图片添加形状水印。

function add_shape_watermark($src_image_path, $shape, $output_image_path) {
  // 加载源图片
  $src_image = imagecreatefromjpeg($src_image_path);

  // 获取图片的宽高
  $src_image_width = imagesx($src_image);
  $src_image_height = imagesy($src_image);

  // 根据形状创建水印图片
  $watermark_image = imagecreatetruecolor($src_image_width, $src_image_height);
  switch ($shape) {
    case 'rectangle':
      imagefilledrectangle($watermark_image, 0, 0, $src_image_width, $src_image_height, imagecolorallocate($watermark_image, 0, 0, 0));
      break;
    case 'circle':
      imagefilledellipse($watermark_image, $src_image_width / 2, $src_image_height / 2, $src_image_width, $src_image_height, imagecolorallocate($watermark_image, 0, 0, 0));
      break;
    case 'triangle':
      $points = array(0, $src_image_height, $src_image_width / 2, 0, $src_image_width, $src_image_height);
      imagefilledpolygon($watermark_image, $points, 3, imagecolorallocate($watermark_image, 0, 0, 0));
      break;
  }

  // 将水印图片复制到源图片上
  imagecopymerge($src_image, $watermark_image, 0, 0, 0, 0, $src_image_width, $src_image_height, 50);

  // 保存图片
  imagejpeg($src_image, $output_image_path);

  // 销毁图片资源
  imagedestroy($src_image);
  imagedestroy($watermark_image);
}

以上三个函数可以满足您各种图片加水印的需求。您可以在实际项目中根据需要选择使用。

当然,您也可以根据自己的需要编写其他自定义函数来给图片添加水印。