Laravel- 图片上传添加自动裁剪功能

一般在有前端用户或者后台自己上传图片的功能时,存在上传图片尺寸不一的情况。所以需要在用户上传图片时直接二次处理限制图片的宽度。
1.加入依赖 本人使用的是laravel5.5 composer方面是选择的2.4组件版本
composer require intervention/image
2.在是否添加注册这块一直都有争论,我这边采取的还是选择如果没有自动注册,那么就添加手动注册。
Intervention\Image\ImageServiceProvider::class,
'Image' => Intervention\Image\Facades\Image::class,
3.创建配置文件 一般情况下都是使用gd模式
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
4.项目中的实际应用

      /**
     * 上传图片
     */
    public function image_upload(Request $req)
    {
        try {
        if ($req->isMethod('POST')) {
            $file = $req->file('file');
            //图片宽度参数 可以写死也可传值接收  关闭false
            $max_width = false;
            if ($file->isValid()) {
                $realPath = $file->getRealPath();//临时文件路径

            $entension = $file->getClientOriginalExtension();//上传文件后缀名
            $time = date('Ym');
            $newName = md5(uniqid(microtime(true), true)) . date('YmdHis') . '.' . $entension;
            $path = $file->move(base_path() . '/public/upload/image/' . $time, $newName);
            $filepath = '/upload/image/' . $time . '/' . $newName;

            // 图片物理路径  特别重要 如果路径则无法识别写入图片
            $img = public_path().'/'.$filepath;

            //  图片剪裁逻辑  如果限制了图片宽度且不为gif格式,就进行裁剪
            if ($max_width && $entension != 'gif') {
                // 此类中封装的函数,用于裁剪图片
                $this->reduceSize($img, $max_width);
            }

            return response()->json(['status' => 0, 'msg' => '上传成功', 'filepath' => $filepath]);
        }
    }
    } catch (Exception $e) {
        return $this->doFailure($e);
    };
}

 //图片按宽度剪裁
public function reduceSize($img, $max_width)
{
    // 先实例化,传参是文件的磁盘物理路径

    $image = Image::make($img);

    // 进行大小调整的操作
    $image->resize($max_width, null, function ($constraint) {

        // 设定宽度是 $max_width,高度等比例双方缩放
        $constraint->aspectRatio();

        // 防止裁图时图片尺寸变大
        $constraint->upsize();
    });

    // 对图片修改后进行保存
    $image->save();
}

以上就是实现上传图片裁剪的方法。

本作品采用《CC 协议》,转载必须注明作者和本文链接
lanffff
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!