ThinkPHP图片处理(压缩、水印)

图片压缩

我们经常会碰到一个问题,当用户发表动态上传图片或上传头像时,会选择手机里拍摄的照片。但是现在手机像素高,拍摄的照片动辄几M,我们如果把一个几M的图片存到服务器,后续的每次读取都会造成极差的用户体验,因此需要进行图片压缩处理。

  • 前提条件,已安装ThinkPHP5的图像处理类库
    如果没有安装,可用过Composer安装ThinkPHP5的图像处理类库:
    运行:composer require topthink/think-image
  • 此处为接口上传图片,如果后台上传,类比操作即可
public function upload_img(){
        $file = request()->file('image');
        // dump($file);die;
        // 将前端传过来的图片移动到项目目录下
        $info = $file->move('./upload/mobile');
        // dump($info);
        if($info){
            $file_edit = $info->getInfo();
            // dump($file_edit);
            // *我们这里通过图片的大小判断图片是否需要被压缩,当然数值可以更改为你需要的
            if($file_edit['size'] > 100000){// 大于100K的图片进行处理
                // 获取上传的图片,进行图片压缩
                $image = \think\Image::open($info);
                // 保存图片的路径处理
                $date = date('Ymd');
                $name = $info->getSavename();
                $url_edit = './upload/mobile/'.$name;
                // dump($url);die;
                // 保存
                // 默认会按比例保存,但是最大宽度、高度不超过thumb(400, 400)设定值
                $img_edit = $image->thumb(400, 400)->save($url_edit);
                $url = $name;
            }else{
                $url = $info->getSavename();
            }
            return $this->json_success('上传成功', $url);
        }else{
            // 上传失败获取错误信息
            return $this->json_error('上传失败');
        }     
    }

图片加水印

  • 前提条件同上,已安装ThinkPHP5的图像处理类库
  • 此处是后台上传图片加水印,如果接口上传,类比操作即可
public function add(){
    if ($this->request->isPost()) {
            $data     = $this->request->post();
             // 获取上传成功的图片路径
             $roth = './upload/'.$data['photo'];
             // 打开图片
             $image = \think\Image::open($roth);
             // 加图片水印,其中water.png是已经做好的水印图片放在根目录下
             $image->water('./water.png',\think\Image::WATER_NORTHWEST)
                ->save($roth);

             dump($data);die;
             .....
    }
}

更多ThinkPHP5.1关于图片处理操作可参考 点击跳转

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。