thinkphp上传图片、删除图片、添加水印到七牛

最近项目中用到了上传图片到七牛的功能,我们的框架用的是thinkphp5.1,研究了半天,下边记录一下

上传图片

1、安装七牛sdk,我是通过composer安装的,也可以直接去官网下载sdk,运行到项目的根目录下,然后运行composer require qiniu/php-sdk,等一会就自己安装好了

2、在extend文件夹下建个文件夹名字叫qiniu,里边新建个文件建Qiniu.php

3、开始在Qiniu.php文件中集成上传图片的方法,直接上代码

<?php

namespace qiniu;

use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

class Qiniu
{
    const QINIU_URL = '你的七牛图片地址';
    const ACCESS_KEY = '你的ACCESS_KEY ';
    const SECRET_KEY = '你的SECRET_KEY ';
    const BUCKET = '你的BUCKET';

    /**
     * 获取token
     * @return string
     */
    public static function createToken()
    {
        // 构建鉴权对象
        $auth = new Auth(self::ACCESS_KEY, self::SECRET_KEY);

        // 生成上传token
        $token = $auth->uploadToken(self::BUCKET, $key = null, 3600, ['mimeLimit' => 'image/*'], true);

        // 返回token
        return $token;
    }
    /*
     * 上传图片
     * */
    public static function uploads($file)
    {
        //$file = request()->file('file');
        // 要上传图片的本地路径
        $filePath = $file->getRealPath();
        $ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);  //后缀
        // 上传到七牛后保存的文件名
        $key =substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
        // 需要填写你的 Access Key 和 Secret Key
        $accessKey = self::ACCESS_KEY;
        $secretKey = self::SECRET_KEY;
        // 构建鉴权对象
        $auth = new Auth($accessKey, $secretKey);
        // 要上传的空间
        $bucket = self::BUCKET;
        $token = $auth->uploadToken($bucket);
        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new UploadManager();
        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
        if ($err !== null) {
            return ["err"=>1,"msg"=>$err,"data"=>""];
        } else {
            //返回图片的完整URL
            return ["err"=>0,"msg"=>"上传完成","data"=>($ret['key'])];
        }
    }


}

删除图片

有上传功能肯定也得有删除功能,我也做了一下图片删除的功能,但是一直有bug,明明删除了,却还可以访问,例如删除的图片路径是 https://qiniu.test.cn/dsakdjalskdjas.jpeg ,如果删除后直接访问的话还是可以访问到的,如果通过携带参数的方式访问的就就提示找不到 https://qiniu.test.cn/dsakdjalskdjas.jpeg?id=123,去七牛的库里看了一下,确实删除了,不知道是不是因为七牛的缓存导致的,有感兴趣的同学可以在评论里和我讨论一下,下面贴一下我的代码

    /*
     * 删除图片
     * */
    public static function deletePicture()
    {
        $accessKey = self::ACCESS_KEY;
        $secretKey = self::SECRET_KEY;
        $bucket = self::BUCKET;

        $key = request()->param('img');
        $auth = new Auth($accessKey, $secretKey);
        $config = new \Qiniu\Config();
        $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
        $err = $bucketManager->delete($bucket, $key);
        if ($err=='') {
            return true;
        }else{
            return false;
        }
    }

添加水印

后来需求中用到了图片加水印的功能,我们的需求是在原图的下方(图片外边)添加上姓名和手机号(姓名和手机号分成上下两行),在图片外边添加水印,什么鬼,苦于没有思路,去百度了下,有大神说可以换个角度,把图片和文字都看成是水印,也就是找一张大点的白色背景图,在把图片和想加的文字都当成水印添加到白色背景图上,感觉真是神人啊,有了思路,又查了下七牛的文档,他们提供有图片水印加文字水印的混合水印接口,刚好,下边是我写的代码

    /*
     * 添加水印
     * $param['path'] 图片水印路径
     * $param['text'] 第一行文字水印
     * $param['phone'] 第二行文字水印
     * $prefix 为true时生成图片,为假时只生成水印
     * */
    public static function addWaterMark($param=[],$prefix="")
    {
//        $param = [
//            'path'=>'https://qiniu.test.cn/9401c201906191833343644.png',
//            'text' => '资金周转就找我',
//            'phone'=>'15617774562'
//        ];
        if($prefix){
            //提前上传到七牛的白色背景图
            $path = 'https://qiniu.test.cn/b1d7a201906191849244939.jpg?';
        }else{
            $path = '';
        }
        $path .= 'watermark/3';
        $path .= '/image/'.urlsafe_b64encode($param['path']);
        $path .= '/dissolve/100/gravity/North/dx/0/dy/-2/ws/1';
        $path .= '/text/'.urlsafe_b64encode($param['text']);
        $path .= '/font/'.urlsafe_b64encode('黑体');
        $path .= '/fontsize/240';
        $path .= '/fill/'.urlsafe_b64encode('#333333');
        $path .= '/gravity/South/dx/0/dy/24';
        $path .= '/text/'.urlsafe_b64encode($param['phone']);
        $path .= '/font/'.urlsafe_b64encode('黑体');
        $path .= '/fontsize/240';
        $path .= '/fill/'.urlsafe_b64encode('#333333');
        $path .= '/gravity/South/dx/0/dy/5';

        return $path;
    }

上边就是我最近用到的功能了,以后用到其他功能的话在添加吧,有没有看明白的可以在评论里问我

版权声明:本文为weixin_41981080原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41981080/article/details/93344568