使用阿里云OSS给图片添加水印


一、需求。

  1.1、Laravel下给图片添加水印;

二、分析。

  2.1、给图片添加水印,一个是可以用PHP的GD库处理,Laravel下可以直接通过Composer安装别人写好的处理扩展实现。

composer require intervention/image

  2.2、第二种推荐使用阿里云对象存储OSS实现。下面简单记录下Laravel6.0下使用OSS实现给图片添加水印。

------------------------------------------沉默的分割线---------------------------------------------------------

三、Laravel6.0使用阿里云对象存储OSS具体步骤。

  第一步:通过Composer安装对象存储的PHP SDK:https://help.aliyun.com/document_detail/85580.html

composer require aliyuncs/oss-sdk-php

  第二步:安装完扩展后,修改Laravel的文件存储磁盘为OSS,在config/filesystems.php中添加oss配置参数,如下参数具体值可以从自己的注册阿里云oss上获取:https://help.aliyun.com/document_detail/31827.html

        'oss' => [
            'driver' => 'oss',//存储方式oss
            'access_id' => env('阿里云oss账户'),
            'access_key' => env('阿里云oss密钥'),
            'bucket' => env('你的桐名'),
            'endpoint' => env('你的端点名'),
            'url' => env('你的域名'),
            'ssl' => env('是否开启ssl'),
        ],

  第三步:如上安装后,使用Laravel上传图片,如果接口报 Driver [oss] is not supported,可安装如下扩展解决。

composer require  "jacobcyl/ali-oss-storage: dev-master"

  第四步:创建测试上传接口,开始测试图片上传,代码如下。

    public function updateOSS(Request $request)
    {
        $file = $request->file();
        //图片验证
        $imgKeyArr = array_keys($file);
        try {
            $savename = Storage::putFile('watermark', $request->file($imgKeyArr[0]));
        } catch (\Exception $e) {
            dd($e->getMessage());//上传出错
        }
        //拼接域名前缀
        $url = env('OSS_URL');
        $fileUrl = $url . '/' . $savename;
        dd($fileUrl);
    }

  第五步:通过Postman请求上传接口,结果如下。

   第六步:访问图片地址。

  第七步:给图片加文字水印,效果如下。

  :该图片效果的url

   重点:效果实现说明:

  3.1、如果直接添加文字水印,直接将文字进行base64编码后,添加相应参数,然后加到图片url后面既可。

  3.2、如果是给图片添加图片水印,先将该水印上传到OSS上,然后将返回的水印图片地址base64编码后,添加相应参数,然后加到图片url后面既可。

  3.3、如果是对图片进行缩放/放大处理,直接在图片url后添加相应参数既可。

  具体参数说明参考 阿里云的文档,写的很详细:https://help.aliyun.com/document_detail/44957.html