图片水印添加

近期因项目需求在tp5.0框架下给图片添加水印并上传至阿里服务器,在此工作中消耗了不少时间。现对其中的流程和要点做个归纳。

1、因tp5.0原有框架未带图片处理库,因此需先要安装引入image图片操作库,

    引入文件


use think\Image;

 

2、获取到上传图片,有必要时保存到项目服务器,以便后续操作。

3实例化对象 ,使用 $image->water( $log_url,\think\Image::WATER_CENTER,10)->save($dst_img)添加水印,并检查服务器中水印图片是否生成。

public function thumbwater()
    {
        $method = Request::instance()->method();
        if ($method == "OPTIONS") {
            return;
        }
        $file = $_FILES['file'];
        $ext_arr = array(
            'image' => array('mp4', 'mp3', 'jpeg', 'png', 'bmp'),
        );
        $max_size = 10 * 1024 * 1024;
        //PHP上传失败
        if (!empty($file['error'])) {
            switch ($file['error']) {
                case '1':
                    $error = '图片过大';
                    break;
                case '2':
                    $error = '图片过大';
                    break;
                case '3':
                    $error = '图片过大';
                    break;
                case '4':
                    $error = '图片过大';
                    break;
                case '6':
                    $error = '图片过大';
                    break;
                case '7':
                    $error = '图片过大';
                    break;
                case '8':
                    $error = '图片过大';
                    break;
                case '999':
                default:
                    $error = '图片过大';
            }
            return json(['code' => 1, 'msg' => $error]);
        }

        //原文件名
        $file_name = $file['name'];
        //服务器上临时文件名
        $tmp_name = $file['tmp_name'];
        //文件大小
        $file_size = $file['size'];
        //文件类型
        $file_type = explode("/", $file['type']);
        
        //检查文件大小
        if ($file_size > $max_size) {
            return json(['code' => 0, 'msg' => '图片过大']);
        }

        $type = $file_type[0]; //上传的是图片还是视频
        $file_ext = $file_type[1]; //后缀
        $filename = uniqid("lhj", false);
        
        $uploadpath = ROOT_PATH . 'public/uploads/jc/';
        if (!file_exists($uploadpath)) {
            mkdir($uploadpath,0777);
        }
        $file_up = $uploadpath . $filename . "." . $file_ext;
        $info = move_uploaded_file($file['tmp_name'], $file_up);

        //添加水印
        //实例化对象 
        $image = \think\Image::open($file_up);
        // 给原图左上角添加水印并保存water_image.png
        $fileName =  'public/uploads/' .time() .'aaaa'. '.' . $file_ext;
        $dst_img = ROOT_PATH . $fileName; //存放路径
        $log_url =  ROOT_PATH .'./image/bwaterlogo.png';
        $image->water( $log_url,\think\Image::WATER_CENTER,10)->save($dst_img);
      

        //获取配置项,并赋值给对象$config
        $config=config('aliyun_oss');
        // try{
            //实例化OSS
            $ossClient=new \OSS\OssClient($config['KeyId'],$config['KeySecret'],$config['Endpoint']);
            //执行阿里云上传
            $result = $ossClient->uploadFile($config['Bucket'],$fileName, $dst_img); 
            // var_dump($result);exit;
            $imgurl=str_replace("-internal","",$result['info']['url']); 
            $this->unlinkFile($file_up);
            $this->unlinkFile($dst_img);
            return json(["code" => 1, "msg" => '上传成功', 'data' => $imgurl]);
        // }catch(OssException $o){
            
        //     return json(["code" => 0, "msg" => '上传失败']);
        // }
        
    }

 4、水印添加成功后上传阿里服务器需注意传的参数。

5、删除多余的图片

//删除文件
 public function unlinkFile($aimUrl)
    {
        if (file_exists($aimUrl)) {
            unlink($aimUrl);
            return true;
        } else {
            return false;
        }
    }

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值