我是靠谱客的博主 名字长了才好记,最近开发中收集的这篇文章主要介绍thinkphp水印功能实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在 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水印功能实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部