返回
图片加水印中的PHP自定义函数
后端
2023-09-09 13:03:43
在对图片进行编辑处理时,通常会用到图片加水印功能。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);
}
以上三个函数可以满足您各种图片加水印的需求。您可以在实际项目中根据需要选择使用。
当然,您也可以根据自己的需要编写其他自定义函数来给图片添加水印。