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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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