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

Пока я загружаю изображение со следующим кодом ниже:

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

Он проверяет наличие образа файла, восстанавливает его исходное имя, создает формат времени, прикрепленный к имени файла изображения, и загружает его в хранилище в нужной папке.

Как я могу изменить размер этого изображения перед загрузкой в ​​каталог файлов?

Я читал о Intervention, который включен в Laravel 7, но может ли кто-нибудь помочь мне добиться этого с помощью Intervention и сочетать его с моей логикой загрузки изображения?

Я пробовал вот так:

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 ошибку.


person user2519032    schedule 15.10.2020    source источник


Ответы (2)


Очевидно, 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)
person GotExx    schedule 15.10.2020
comment
Привет. Моя конфигурация по умолчанию (без каких-либо измененных каталогов). Я все еще получаю ту же ошибку, даже когда использую ваш пример. Я добавил вручную полный путь, но по-прежнему возникает та же ошибка. - person user2519032; 15.10.2020
comment
Спасибо за предложение, я нашел решение проблемы, и вы можете увидеть мой ответ. - person user2519032; 19.10.2020

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

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

person user2519032    schedule 19.10.2020