Изменение размера изображения и сохранение в хранилище в Laravel 7

#laravel-7 #intervention

#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 InterventionImageImageManagerStatic 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 сообщение об ошибке.

Ответ №1:

Очевидно, что вмешательство не может прочитать ваше изображение, проверьте путь, который вы ему указали.

 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)
  

Комментарии:

1. Привет. Моя конфигурация по умолчанию (без каких-либо измененных каталогов). Я все еще получаю ту же ошибку, даже когда использую ваш пример. Я добавил вручную полный путь, но он по-прежнему имеет ту же ошибку.

2. Спасибо за ваше предложение, я нашел решение проблемы, и вы можете увидеть мой ответ.

Ответ №2:

Я нашел решение после долгого тестирования. Ниже приведен мой код:

 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 (), просто используя функции вмешательства…вот и все.
Этот подход намного более гибкий, и очень легко реализовать дополнительные функции из замечательной библиотеки вмешательств.