Как выбрать, должно ли вмешательство в изображение сохранять изображения?

#laravel #intervention

#laravel #вмешательство

Вопрос:

Я пытаюсь сохранить измененную копию загруженного изображения, но вмешательство в изображение, похоже, не знает, в каком корневом каталоге начинать, или, может быть, только я знаю, как правильно его настроить.

Это мой код в AvatarImageController@store

 public function store(Request $request, Game $game)
{
    if ($request->hasFile('game_image')) {
        $request->validate([
            'game_image' => 'mimes:jpeg,png|max:1014'
        ]);

        $file = $request->file('game_image');
        $filename_thumbnail = "thumb_". $file->hashName();
        $path_full = $request->file('game_image')->store('images/test_folder');
        $path_thumb = $request->file('game_image')->storeAs('images/test_folder/thumbs', $filename_thumbnail);

        // resize image
        $path_thumb = Intervention::make("./storage/app/public/" . $path_thumb)->resize(300, 200);
        $path_thumb->save();

        $image = new Image;
        $image->full = basename($path_full);
        $image->thumb = $filename_thumbnail;

        $game->images()->save($image);
        
        return back()->with('success', "Success!! Image uploaded.");
    }else{
        return back()->with('success', 'Ooops.. something went wrong.');
    }
    abort(500, 'Could not upload image :(');
}
 

Ошибка, которую я получаю:

 InterventionImageExceptionNotReadableException
Image source not readable
 

Я подозреваю, что это связано с тем, что я не на правильном пути, из-за этих строк из вышеприведенной функции:

     // resize image
    $path_thumb = Intervention::make("./storage/app/public/" . $path_thumb)->resize(300, 200);
    $path_thumb->save();
 

И это настоящий хассель, работающий с явными путями при использовании git в качестве развертывания.

Ответ №1:

Вы можете создать изображение напрямую, как это:

 $uploadedFile = $request->file('game_image'); 
$image = Image::make($uploadedFile);
 

Измените его размер:

 $image = $image->resize(300, 200);
 

и сохраните его следующим образом:

 $image_data = $image->encode('jpg')->__toString();
$relative_file_path = 'images/test_folder/';
Storage::put($relative_file_path, $image_data)
 

Ответ №2:

использовать помощник storage()?

 Intervention::make(storage_path('app/public/") . $path_thumb)