在开发网站应用时,图片水印应该是比较常见的需求之一,可以为图片添加水印,保护图片版权,增加图片美观性等。在PHP中,实现图片水印可以使用GD库或ImageMagick等扩展库,这里我们以GD库为例来封装PHP水印函数。
GD库是一个开源的用于创建和操作图像的图形库,它可以通过PHP的扩展库来使用。GD库提供的函数可以用来处理各种图像格式,包括GIF、JPEG、PNG等,并且可以处理图片的裁剪、缩放、旋转等操作。下面我们来介绍一下PHP中使用GD库来实现图片水印的步骤:
1. 安装GD库
PHP官方提供了GD库的扩展库,可以通过以下命令来安装:
```shell
sudo apt-get install php-gd
```
2. 编写水印函数
我们可以编写一个PHP函数来实现图片水印的功能,函数原型如下:
```php
/**
* @param string $sourceImagePath 源图片路径
* @param string $watermarkImagePath 水印图片路径
* @param string $outputPath 输出图片路径
* @param int $position 水印位置,默认为右下角
* @param int $opacity 水印透明度,默认为100
* @return bool 生成结果,成功返回true,失败返回false
*/
function watermark(string $sourceImagePath, string $watermarkImagePath, string $outputPath, int $position = 9, int $opacity = 100): bool
{
$sourceImage = @imagecreatefromjpeg($sourceImagePath);
$watermarkImage = @imagecreatefrompng($watermarkImagePath);
if (!$sourceImage || !$watermarkImage) {
return false;
}
$watermarkWidth = imagesx($watermarkImage);
$watermarkHeight = imagesy($watermarkImage);
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
switch ($position) {
case 1: // 左上角
$x = 0;
$y = 0;
break;
case 2: // 上中央
$x = floor(($sourceWidth - $watermarkWidth) / 2);
$y = 0;
break;
case 3: // 右上角
$x = $sourceWidth - $watermarkWidth;
$y = 0;
break;
case 4: // 左中央
$x = 0;
$y = floor(($sourceHeight - $watermarkHeight) / 2);
break;
case 5: // 正中央
$x = floor(($sourceWidth - $watermarkWidth) / 2);
$y = floor(($sourceHeight - $watermarkHeight) / 2);
break;
case 6: // 右中央
$x = $sourceWidth - $watermarkWidth;
$y = floor(($sourceHeight - $watermarkHeight) / 2);
break;
case 7: // 左下角
$x = 0;
$y = $sourceHeight - $watermarkHeight;
break;
case 8: // 中下部
$x = floor(($sourceWidth - $watermarkWidth) / 2);
$y = $sourceHeight - $watermarkHeight;
break;
case 9: // 右下角
default:
$x = $sourceWidth - $watermarkWidth;
$y = $sourceHeight - $watermarkHeight;
break;
}
imagecopymerge($sourceImage, $watermarkImage, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, $opacity);
$result = @imagejpeg($sourceImage, $outputPath);
imagedestroy($sourceImage);
imagedestroy($watermarkImage);
return $result;
}
```
在这个函数中,我们使用了imagecreatefromjpeg、imagecreatefrompng、imagesx、imagesy、imagecopymerge、imagejpeg、imagedestroy等GD库提供的函数实现了水印效果。
3. 调用水印函数
在使用这个水印函数时,可以根据需要传递不同的参数,比如指定水印位置、透明度等,不传递的参数会使用默认值。例如:
```php
watermark('source.jpg', 'watermark.png', 'output.jpg', 9); // 右下角添加水印,并将结果保存为output.jpg文件
```
这样就完成了使用GD库进行图片水印处理的整个过程。这个函数可以灵活地适应各种不同的图片水印需求,而且也很容易理解和使用。另外要注意的是,操作图片时要保证目录可写,并确保GD库已经正确安装和启用。
最后需要强调一点的是,PHP函数参数的缺省值需要赋值为false,而不是留空。如果留空,则当这个参数被调用时,它的值将被认为是NULL,一些PHP函数可能并不支持NULL参数,导致函数执行错误。
以上就是PHP水印函数封装教程的内容,希望对您有所帮助。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复