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 协议》,转载必须注明作者和本文链接
推荐文章: