✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Carregue e redimensione várias imagens no Laravel

73

Além deste blog, estou executando um canal no YouTube onde compartilho os tutoriais em vídeo. Recentemente, um dos assinantes do canal do YouTube perguntou sobre o redimensionamento de várias imagens no Laravel. Eles querem redimensionar várias imagens de uma vez. Neste artigo, estudamos como fazer upload e redimensionar várias imagens no Laravel.

Intervention Image é uma biblioteca de código aberto que nos permite manipular imagens. Vou usar esta biblioteca para redimensionar imagens.

Carregue e redimensione várias imagens no Laravel

Começando

Para atingir nosso objetivo, você precisa instalar e configurar a biblioteca de Imagens de Intervenção no projeto Laravel. Abra o terminal no diretório raiz do seu projeto e execute o comando:

composer require intervention/image

Assim que a biblioteca estiver instalada, abra o config/app.phparquivo e adicione provedores de serviço, fachada nele. Adicione os provedores de serviço deste pacote ao $providersarray.

InterventionImageImageServiceProvider::class,

Adicione a fachada ao $aliasesarray.

'Image' => InterventionImageFacadesImage::class,

Em seguida, precisamos de um diretório onde armazenamos nossos arquivos carregados. O Laravel Filesystem fornece um disco público para armazenar os arquivos. O disco público contém arquivos que podem ser acessados ​​publicamente. Você encontrará os arquivos carregados na storage/app/publicpasta. Para acessar esses arquivos na web, você precisa criar um link simbólico de public/storagepara storage/app/public.

Crie um link simbólico usando o comando:

php artisan storage:link

Este comando criaria uma pasta de armazenamento no diretório público. É aqui que armazenamos nossos arquivos.

Carregar e redimensionar imagens no Laravel

Para fazer upload de arquivos em um servidor, você precisa de um formulário. Vamos criar um formulário onde você pode selecionar vários arquivos para carregar em um servidor. Abaixo está um exemplo de código do formulário que irá dentro do seu arquivo de visualização.

<form action="{{ url('ROUTE HERE') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image[]" id="exampleInputFile" multiple />
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

No formulário, peguei um nome de entrada de arquivo como ‘profile_image []’ que envia uma matriz de arquivos para o servidor. Além disso, adicionei um atributo ‘múltiplo’ que nos permite selecionar vários arquivos. Substitua o marcador ROUTE_URL pelo seu valor real.

Como precisamos fazer o upload e redimensionar as imagens, no controlador adicione duas fachadas da seguinte forma.

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
 
class ImageController extends Controller
{
 
}

Ao adicionar a fachada, você pode chamar as funções de redimensionamento da biblioteca de imagens de intervenção. No código abaixo, irei carregar os arquivos em dois lugares. Um é a imagem original. O segundo está no diretório de miniaturas. Primeiro carregamos a imagem original na pasta de miniaturas e depois a redimensionamos.

public function store(Request $request)
{
    if ($request->hasFile('profile_image')) {
 
        foreach($request->file('profile_image') as $file){
 
            //get filename with extension
            $filenamewithextension = $file->getClientOriginalName();
 
            //get filename without extension
            $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
            //get file extension
            $extension = $file->getClientOriginalExtension();
 
            //filename to store
            $filenametostore = $filename.'_'.uniqid().'.'.$extension;
 
            Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
            Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));
 
            //Resize image here
            $thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);
            $img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
                $constraint->aspectRatio();
            });
            $img->save($thumbnailpath);
        }
 
        return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");
    }
}

Aqui estamos redimensionando a imagem proporcionalmente. Fazendo isso, mantemos a proporção da imagem e a imagem não é cortada. Estou passando a largura como 400 e a altura como 150. Você pode alterar esses valores de acordo com sua necessidade.

Vá em frente e teste. Você obterá a versão de redimensionamento das imagens carregadas no diretório ‘storage / profile_images / thumbnail’.

Se você está procurando um corte difícil, substitua as linhas abaixo

$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
    $constraint->aspectRatio();
});
$img->save($thumbnailpath);

Com

$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);

Espero que você entenda como fazer o upload e redimensionar várias imagens no Laravel. Por favor, compartilhe seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação