Compressão de imagens durante o upload

Comprimir uma imagem durante o upload no Laravel pode ser feito usando várias bibliotecas. Uma das bibliotecas mais populares para manipulação de imagens é o Intervention Image. Aqui está um guia sobre como comprimir uma imagem durante o upload usando o Laravel e o Intervention Image:

  1. Instale a biblioteca Intervention Image: Para começar, instale o pacote via Composer:
composer require intervention/image
  1. Configure o ServiceProvider: Depois de instalar o pacote, registre o ServiceProvider do Intervention Image. Abra config/app.php e adicione o seguinte código no array providers:
Intervention\Image\ImageServiceProvider::class,

E adicione o seguinte código no array aliases:

'Image' => Intervention\Image\Facades\Image::class,
  1. Manipule a imagem durante o upload: Agora, você pode usar a biblioteca Intervention Image para manipular e comprimir imagens durante o upload. Aqui está um exemplo de como você pode fazer isso em um controlador Laravel:
use Illuminate\Http\Request;
use Image; // Facade do Intervention Image

public function uploadImage(Request $request)
{
    // Valide o upload da imagem
    $request->validate([
        'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:20480', // 20MB
    ]);

    // Faça o upload da imagem
    $image = $request->file('image');

    // Crie uma instância da imagem
    $img = Image::make($image->getRealPath());

    // Redimensione a imagem para 1023x1023
    $img->resize(1023, 1023, function ($constraint) {
        $constraint->aspectRatio();
        $constraint->upsize();
    });

    // Defina a qualidade da imagem (quanto menor, mais comprimida)
    $img->save(public_path('path/to/image.jpg'), 60); // 60% de qualidade

    // Retorne uma resposta (por exemplo, redirecione de volta com uma mensagem de sucesso)
    return back()->with('success', 'Imagem carregada com sucesso!');
}
  1. No front-end: Certifique-se de que seu formulário tenha o atributo enctype="multipart/form-data" para permitir o upload de arquivos. Por exemplo:
<form action="/upload-image-route" method="post" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
</form>

Com esses passos, você deve ser capaz de comprimir e redimensionar imagens durante o upload no Laravel usando a biblioteca Intervention Image. Ajuste conforme necessário para atender às suas necessidades específicas.