{"id":27799,"date":"2021-05-25T10:56:00","date_gmt":"2021-05-25T07:56:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27799"},"modified":"2021-10-18T04:09:33","modified_gmt":"2021-10-18T01:09:33","slug":"crie-uma-miniatura-no-laravel-usando-a-biblioteca-de-imagens-de-intervencao","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/crie-uma-miniatura-no-laravel-usando-a-biblioteca-de-imagens-de-intervencao\/","title":{"rendered":"Crie uma miniatura no Laravel usando a biblioteca de imagens de interven\u00e7\u00e3o"},"content":{"rendered":"<p>No site sempre tratamos das imagens. Com base no requisito, usamos diferentes vers\u00f5es de imagens. \u00c9 uma boa pr\u00e1tica que os desenvolvedores criem vers\u00f5es diferentes, tamb\u00e9m conhecidas como miniaturas da imagem \u00fanica. Essas miniaturas podem ser usadas ao exibir diferentes tamanhos de imagens, dependendo do tamanho do cont\u00eainer. Mostrar uma imagem que se ajusta ao tamanho do cont\u00eainer economiza largura de banda e melhora o tempo de carregamento da p\u00e1gina. Mostrar uma imagem de tamanho grande em um cont\u00eainer pequeno \u00e9 uma pr\u00e1tica ruim e compromete o tempo de carregamento da p\u00e1gina. Como resultado, \u00e9 recomend\u00e1vel criar v\u00e1rias miniaturas de uma imagem e usar a vers\u00e3o apropriada sempre que necess\u00e1rio.<\/p>\n<p>Neste artigo, estudamos como criar uma miniatura no Laravel usando a biblioteca de Imagens de Interven\u00e7\u00e3o. <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Intervention Image<\/a> \u00e9 gratuito e uma das bibliotecas populares para manipula\u00e7\u00e3o de imagens. Em segundo plano, esta biblioteca usa a Biblioteca GD e Imagick para manipula\u00e7\u00e3o de imagens.<\/p>\n<p>Para este tutorial, criarei 3 miniaturas &#8211; pequeno, m\u00e9dio e grande com tamanhos 150 93, 300 * 185, 550 340 respectivamente. Altere esses tamanhos de acordo com sua necessidade.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Para come\u00e7ar, voc\u00ea precisa primeiro instalar a biblioteca de Imagens de Interven\u00e7\u00e3o no Laravel. Abra o terminal no diret\u00f3rio raiz do seu projeto e execute o comando abaixo:<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>Depois de instalar a biblioteca, abra o <code>config\/app.php<\/code>arquivo e adicione as seguintes linhas nele.<\/p>\n<p>Adicione os provedores de servi\u00e7o para este pacote na <code>$providers<\/code>matriz.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>Adicione a fachada ao <code>$aliases<\/code>array.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<p>A seguir, para armazenar as imagens, precisamos criar um diret\u00f3rio. V\u00e1 at\u00e9 o terminal e execute o comando da seguinte maneira:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Este comando cria um diret\u00f3rio de armazenamento (link simb\u00f3lico) na pasta p\u00fablica. Nesta pasta, irei carregar a imagem original e suas miniaturas.<\/p>\n<h3>Crie uma miniatura no Laravel<\/h3>\n<p>Todos n\u00f3s definimos a configura\u00e7\u00e3o b\u00e1sica e agora podemos escrever o c\u00f3digo real. Vamos criar um formul\u00e1rio em seu arquivo de visualiza\u00e7\u00e3o.<\/p>\n<pre><code>&lt;form action=\"{{ url('PASS_ACTION_URL') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>No controlador, voc\u00ea precisa adicionar a fachada da biblioteca &#8216;Imagem&#8217; que adicionamos no <code>config\/app.php<\/code>arquivo.<\/p>\n<pre><code>&lt;?php\n\u00a0\u00a0\nnamespace AppHttpControllers;\n\u00a0\u00a0\nuse IlluminateHttpRequest;\nuse Image;\n\u00a0\u00a0\nclass ImageController extends Controller\n{\n\u00a0\u00a0\n}<\/code><\/pre>\n<p>Adicionando a fachada, podemos chamar fun\u00e7\u00f5es da biblioteca Intervention Image. No c\u00f3digo abaixo, irei fazer o upload da imagem em dois lugares. A imagem original vai diretamente para dentro da <code>storage\/profile_images<\/code>pasta. As miniaturas seriam armazenadas no <code>storage\/profile_images\/thumbnail<\/code>diret\u00f3rio. Primeiro carregamos a imagem original na pasta de miniaturas e depois a redimensionamos.<\/p>\n<pre><code>public function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/small thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$smallthumbnail = $filename.'_small_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/medium thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/large thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$largethumbnail = $filename.'_large_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images', $filenametostore);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $smallthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $mediumthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $largethumbnail);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create small thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$smallthumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$smallthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($smallthumbnailpath, 150, 93);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create medium thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$mediumthumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$mediumthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($mediumthumbnailpath, 300, 185);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create large thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$largethumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$largethumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($largethumbnailpath, 550, 340);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('image')-&gt;with('success', \"Image uploaded successfully.\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, guardo a imagem com 3 formatos: pequeno, m\u00e9dio e grande. Depois de armazen\u00e1-los, estamos chamando o m\u00e9todo <code>createThumbnail<\/code>e passando a largura e altura necess\u00e1rias para o m\u00e9todo. Vamos definir essa fun\u00e7\u00e3o a seguir. Esta fun\u00e7\u00e3o deve ir para o mesmo controlador.<\/p>\n<pre><code>\/**\n\u00a0* Create a thumbnail of specified size\n\u00a0*\n\u00a0* @param string $path path of thumbnail\n\u00a0* @param int $width\n\u00a0* @param int $height\n\u00a0*\/\npublic function createThumbnail($path, $width, $height)\n{\n\u00a0\u00a0\u00a0\u00a0$img = Image::make($path)-&gt;resize($width, $height, function ($constraint) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0$img-&gt;save($path);\n}<\/code><\/pre>\n<p>Aqui estamos redimensionando a imagem proporcionalmente. Fazendo isso, mantemos a propor\u00e7\u00e3o da imagem e a imagem n\u00e3o \u00e9 cortada.<\/p>\n<p>Se voc\u00ea est\u00e1 procurando um corte dif\u00edcil, substitua as linhas abaixo<\/p>\n<pre><code>$img = Image::make($path)-&gt;resize($width, $height, function ($constraint) {\n\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n});\n$img-&gt;save($path);<\/code><\/pre>\n<p>Com<\/p>\n<pre><code>$img = Image::make($path)-&gt;resize($width, $height)-&gt;save($path);<\/code><\/pre>\n<p>Espero que voc\u00ea entenda como criar uma miniatura no Laravel usando a biblioteca de Imagens de Interven\u00e7\u00e3o. Eu gostaria de ouvir sua opini\u00e3o na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/redimensionar-imagem-no-laravel-usando-a-biblioteca-de-imagens-de-intervencao\/\" title=\"Redimensionar imagem no Laravel usando a biblioteca de imagens de interven\u00e7\u00e3o\">Redimensionar imagem no Laravel usando a biblioteca de imagens de interven\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-e-compactar-imagens-no-laravel\/\" title=\"Um guia para fazer upload e compactar imagens no Laravel\">Um guia para fazer upload e compactar imagens no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/carregue-e-redimensione-varias-imagens-no-laravel\/\" title=\"Carregue e redimensione v\u00e1rias imagens no Laravel\">Carregue e redimensione v\u00e1rias imagens no Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea quer criar uma miniatura no Laravel enquanto carrega a imagem? Neste artigo, estudamos como criar v\u00e1rias miniaturas usando a imagem de interven\u00e7\u00e3o<\/p>\n","protected":false},"author":1,"featured_media":21673,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-27799","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27799"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27799\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21673"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}