在 ThinkPHP 框架中实现图片水印功能可以通过自定义函数或类来完成。以下是一个示例,展示如何在 ThinkPHP 中为图片添加水印。
1. 创建水印功能类
你可以创建一个专门处理图片水印的类,例如 Watermark.php。这个类将负责加载图片、添加水印并保存处理后的图片。
<?php
namespace app\common\utils;
class Watermark
{
// 添加水印
public static function addWatermark($sourcePath, $watermarkPath, $savePath, $position = 'bottom-right', $opacity = 50)
{
// 获取源图片信息
list($sourceWidth, $sourceHeight, $sourceType) = getimagesize($sourcePath);
$sourceImage = self::createImage($sourcePath, $sourceType);
// 获取水印图片信息
list($watermarkWidth, $watermarkHeight, $watermarkType) = getimagesize($watermarkPath);
$watermarkImage = self::createImage($watermarkPath, $watermarkType);
// 根据位置计算水印的放置坐标
switch ($position) {
case 'top-left':
$x = 0;
$y = 0;
break;
case 'top-right':
$x = $sourceWidth - $watermarkWidth;
$y = 0;
break;
case 'bottom-left':
$x = 0;
$y = $sourceHeight - $watermarkHeight;
break;
case 'bottom-right':
default:
$x = $sourceWidth - $watermarkWidth;
$y = $sourceHeight - $watermarkHeight;
break;
}
// 将水印图片合并到源图片上
imagecopymerge($sourceImage, $watermarkImage, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, $opacity);
// 保存图片
self::saveImage($sourceImage, $savePath, $sourceType);
// 销毁图像资源
imagedestroy($sourceImage);
imagedestroy($watermarkImage);
return $savePath;
}
// 创建图像资源
private static function createImage($path, $type)
{
switch ($type) {
case IMAGETYPE_JPEG:
return imagecreatefromjpeg($path);
case IMAGETYPE_PNG:
return imagecreatefrompng($path);
case IMAGETYPE_GIF:
return imagecreatefromgif($path);
default:
throw new \Exception("Unsupported image type");
}
}
// 保存图像
private static function saveImage($image, $path, $type)
{
switch ($type) {
case IMAGETYPE_JPEG:
imagejpeg($image, $path);
break;
case IMAGETYPE_PNG:
imagepng($image, $path);
break;
case IMAGETYPE_GIF:
imagegif($image, $path);
break;
default:
throw new \Exception("Unsupported image type");
}
}
}2. 在控制器中调用水印功能
在你的控制器中,你可以使用上面的 Watermark 类为图片添加水印。例如:
namespace app\index\controller;
use app\common\utils\Watermark;
class ImageController
{
public function addWatermark()
{
$sourceImage = './uploads/source_image.jpg';
$watermarkImage = './uploads/watermark.png';
$saveImage = './uploads/image_with_watermark.jpg';
Watermark::addWatermark($sourceImage, $watermarkImage, $saveImage, 'bottom-right', 30);
return 'Watermark added successfully!';
}
}3. 使用
只需访问对应的控制器方法 addWatermark,即可以为指定的图片添加水印。
结语
这种方式提供了灵活的水印功能,支持不同的位置和透明度的设置。根据实际需求,你可以扩展此功能,例如支持更多的位置选项、水印缩放、旋转等。通过这种方法,可以轻松地在 ThinkPHP 项目中实现图片水印功能。
最后
以上就是名字长了才好记最近收集整理的关于thinkphp水印功能实现的全部内容,更多相关thinkphp水印功能实现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复