调整图像大小并存储到 Laravel 7 中的存储中

Resize image and store into Storage in Laravel 7

到目前为止,我正在使用以下代码上传图片:

if($request->hasFile('image')) {
  $path = $request->image->getClientOriginalName();
  $name = time() . '-' . $path;
  $news->image = $request->file('image')->storeAs('public/news', $name);
}

它检查文件图像,恢复其原始名称,创建附加到图像文件名的时间格式并上传到所需文件夹中的存储空间。

如何在上传到文件目录之前调整该图像的大小?

我已经阅读了 Laravel 7 中包含的干预措施,但有人可以帮助我使用干预措施并结合我上传图片的逻辑来实现这一目标吗?

我试过这样:

use Intervention\Image\ImageManagerStatic as Image; // use Intervention
    
if($request->hasFile('image')) {
  $path = $request->image->getClientOriginalName();
  $resize = Image::make($path)->fit(300);
  $name = time() . '-' . $resize;
  $news->image = $request->file('image')->storeAs('public/news', $name);
}

但我收到 Image source not readable 错误。

显然,Intervention 无法读取您的图像,请检查您提供的路径。

dd($path);

就我而言,我是这样处理的:

$img = Image::make('storage/'.$banner)->resize(800, 250);

然后要在上传之前调整图片大小,您可以这样做:

//$image is the temporary path of your image (/tmp/something)
$image = $request->image;

//Create a Image object with the tmp path
$resized_img = Image::make($image);

//Do what you want and save your modified image on the same temporary path as the original image.
$resized_img->fit(300)->save($image);

//Upload your image on your bucket and get the final path of your image
$path = $image->storeAs('public/news', $name)

经过长时间的测试,我找到了解决方案。这是我的代码:

if($request->hasFile('image')) {
    $image = $request->file('image');
    $imageName = $image->getClientOriginalName();
    $fileName =  'public/news/' . time() . '-' . $imageName;
    Image::make($image)->resize(600,300)->save(storage_path('app/' . $fileName));
    $news->image = $fileName;
  }

主要问题是路径,而且我不需要使用 storeAs() 函数,只需使用干预函数...仅此而已。 这种方法更加灵活,并且很容易从出色的干预库中实现附加功能。