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

Crie uma miniatura no Laravel usando a biblioteca de imagens de intervenção

103

No site sempre tratamos das imagens. Com base no requisito, usamos diferentes versões de imagens. É uma boa prática que os desenvolvedores criem versões diferentes, também conhecidas como miniaturas da imagem única. Essas miniaturas podem ser usadas ao exibir diferentes tamanhos de imagens, dependendo do tamanho do contêiner. Mostrar uma imagem que se ajusta ao tamanho do contêiner economiza largura de banda e melhora o tempo de carregamento da página. Mostrar uma imagem de tamanho grande em um contêiner pequeno é uma prática ruim e compromete o tempo de carregamento da página. Como resultado, é recomendável criar várias miniaturas de uma imagem e usar a versão apropriada sempre que necessário.

Neste artigo, estudamos como criar uma miniatura no Laravel usando a biblioteca de Imagens de Intervenção. Intervention Image é gratuito e uma das bibliotecas populares para manipulação de imagens. Em segundo plano, esta biblioteca usa a Biblioteca GD e Imagick para manipulação de imagens.

Para este tutorial, criarei 3 miniaturas – pequeno, médio e grande com tamanhos 150 93, 300 * 185, 550 340 respectivamente. Altere esses tamanhos de acordo com sua necessidade.

Começando

Para começar, você precisa primeiro instalar a biblioteca de Imagens de Intervenção no Laravel. Abra o terminal no diretório raiz do seu projeto e execute o comando abaixo:

composer require intervention/image

Depois de instalar a biblioteca, abra o config/app.phparquivo e adicione as seguintes linhas nele.

Adicione os provedores de serviço para este pacote na $providersmatriz.

InterventionImageImageServiceProvider::class

Adicione a fachada ao $aliasesarray.

'Image' => InterventionImageFacadesImage::class

A seguir, para armazenar as imagens, precisamos criar um diretório. Vá até o terminal e execute o comando da seguinte maneira:

php artisan storage:link

Este comando cria um diretório de armazenamento (link simbólico) na pasta pública. Nesta pasta, irei carregar a imagem original e suas miniaturas.

Crie uma miniatura no Laravel

Todos nós definimos a configuração básica e agora podemos escrever o código real. Vamos criar um formulário em seu arquivo de visualização.

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

No controlador, você precisa adicionar a fachada da biblioteca ‘Imagem’ que adicionamos no config/app.phparquivo.

<?php
  
namespace AppHttpControllers;
  
use IlluminateHttpRequest;
use Image;
  
class ImageController extends Controller
{
  
}

Adicionando a fachada, podemos chamar funções da biblioteca Intervention Image. No código abaixo, irei fazer o upload da imagem em dois lugares. A imagem original vai diretamente para dentro da storage/profile_imagespasta. As miniaturas seriam armazenadas no storage/profile_images/thumbnaildiretório. Primeiro carregamos a imagem original na pasta de miniaturas e depois a redimensionamos.

public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
  
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
  
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
  
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //small thumbnail name
        $smallthumbnail = $filename.'_small_'.time().'.'.$extension;
 
        //medium thumbnail name
        $mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;
 
        //large thumbnail name
        $largethumbnail = $filename.'_large_'.time().'.'.$extension;
 
        //Upload File
        $request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
        $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $smallthumbnail);
        $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $mediumthumbnail);
        $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $largethumbnail);
  
        //create small thumbnail
        $smallthumbnailpath = public_path('storage/profile_images/thumbnail/'.$smallthumbnail);
        $this->createThumbnail($smallthumbnailpath, 150, 93);
 
        //create medium thumbnail
        $mediumthumbnailpath = public_path('storage/profile_images/thumbnail/'.$mediumthumbnail);
        $this->createThumbnail($mediumthumbnailpath, 300, 185);
 
        //create large thumbnail
        $largethumbnailpath = public_path('storage/profile_images/thumbnail/'.$largethumbnail);
        $this->createThumbnail($largethumbnailpath, 550, 340);
  
        return redirect('image')->with('success', "Image uploaded successfully.");
    }
}

No código acima, guardo a imagem com 3 formatos: pequeno, médio e grande. Depois de armazená-los, estamos chamando o método createThumbnaile passando a largura e altura necessárias para o método. Vamos definir essa função a seguir. Esta função deve ir para o mesmo controlador.

/**
 * Create a thumbnail of specified size
 *
 * @param string $path path of thumbnail
 * @param int $width
 * @param int $height
 */
public function createThumbnail($path, $width, $height)
{
    $img = Image::make($path)->resize($width, $height, function ($constraint) {
        $constraint->aspectRatio();
    });
    $img->save($path);
}

Aqui estamos redimensionando a imagem proporcionalmente. Fazendo isso, mantemos a proporção da imagem e a imagem não é cortada.

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

$img = Image::make($path)->resize($width, $height, function ($constraint) {
    $constraint->aspectRatio();
});
$img->save($path);

Com

$img = Image::make($path)->resize($width, $height)->save($path);

Espero que você entenda como criar uma miniatura no Laravel usando a biblioteca de Imagens de Intervenção. Eu gostaria de ouvir sua opinião 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