{"id":28372,"date":"2021-05-25T10:59:00","date_gmt":"2021-05-25T07:59:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28372"},"modified":"2021-10-17T16:46:32","modified_gmt":"2021-10-17T13:46:32","slug":"cree-una-miniatura-en-laravel-usando-la-biblioteca-de-imagenes-de-intervencion","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/cree-una-miniatura-en-laravel-usando-la-biblioteca-de-imagenes-de-intervencion\/","title":{"rendered":"Cree una miniatura en Laravel usando la biblioteca de im\u00e1genes de intervenci\u00f3n"},"content":{"rendered":"<p>En el sitio web, siempre nos ocupamos de las im\u00e1genes. Seg\u00fan el requisito, utilizamos diferentes versiones de im\u00e1genes. Es una buena pr\u00e1ctica para los desarrolladores crear diferentes versiones, tambi\u00e9n conocidas como miniaturas de la imagen \u00fanica. Estas miniaturas se pueden utilizar mientras se muestran diferentes tama\u00f1os de im\u00e1genes seg\u00fan el tama\u00f1o del contenedor. Mostrar una imagen que se ajuste al tama\u00f1o del contenedor ahorrar\u00e1 ancho de banda y mejorar\u00e1 el tiempo de carga de la p\u00e1gina. Mostrar una imagen de gran tama\u00f1o en un contenedor peque\u00f1o es una mala pr\u00e1ctica y compromete el tiempo de carga de la p\u00e1gina. Como resultado, se recomienda crear varias miniaturas de una imagen y usar la versi\u00f3n adecuada cuando sea necesario.<\/p>\n<p>En este art\u00edculo, estudiamos c\u00f3mo crear una miniatura en Laravel usando la biblioteca de im\u00e1genes de intervenci\u00f3n. <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Intervention Image<\/a> es gratuito y una de las bibliotecas m\u00e1s populares para la manipulaci\u00f3n de im\u00e1genes. En segundo plano, esta biblioteca utiliza GD Library e Imagick para la manipulaci\u00f3n de im\u00e1genes.<\/p>\n<p>Para este tutorial, crear\u00e9 3 miniaturas: peque\u00f1a, mediana, grande con tama\u00f1os 150 93, 300 * 185, 550 340 respectivamente. Cambie estos tama\u00f1os seg\u00fan sus necesidades.<\/p>\n<h3>Empezando<\/h3>\n<p>Para comenzar, primero debe instalar la biblioteca de im\u00e1genes de intervenci\u00f3n en Laravel. Abra la terminal en el directorio ra\u00edz de su proyecto y ejecute el siguiente comando:<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>Despu\u00e9s de instalar la biblioteca, abra el <code>config\/app.php<\/code>archivo y agregue las siguientes l\u00edneas.<\/p>\n<p>Agregue los proveedores de servicios para este paquete en la <code>$providers<\/code>matriz.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>Agregue la fachada a la <code>$aliases<\/code>matriz.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<p>A continuaci\u00f3n, para almacenar las im\u00e1genes necesitamos crear un directorio. Dir\u00edgete a la terminal y ejecuta el comando de la siguiente manera:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Este comando crea un directorio de almacenamiento (enlace simb\u00f3lico) en la carpeta p\u00fablica. En esta carpeta, subir\u00e9 la imagen original y sus miniaturas.<\/p>\n<h3>Crea una miniatura en Laravel<\/h3>\n<p>Todos configuramos la configuraci\u00f3n b\u00e1sica y ahora podemos escribir el c\u00f3digo real. Creemos un formulario en su archivo de vista.<\/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>En el controlador, debe agregar la fachada de la biblioteca &#8216;Imagen&#8217; que hemos agregado en el <code>config\/app.php<\/code>archivo.<\/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>Al agregar la fachada, podemos llamar a funciones de la biblioteca de im\u00e1genes de intervenci\u00f3n. En el siguiente c\u00f3digo, subir\u00e9 la imagen en dos lugares. La imagen original va directamente dentro de la <code>storage\/profile_images<\/code>carpeta. Las miniaturas se almacenar\u00edan en el <code>storage\/profile_images\/thumbnail<\/code>directorio. Primero cargamos la imagen original en la carpeta de miniaturas y luego la cambiamos de tama\u00f1o.<\/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>En el c\u00f3digo anterior, almaceno la imagen con 3 formatos peque\u00f1o, mediano y grande. Despu\u00e9s de almacenarlos, estamos llamando al m\u00e9todo <code>createThumbnail<\/code>y pasando el ancho y alto requeridos al m\u00e9todo. Definamos esta funci\u00f3n a continuaci\u00f3n. Esta funci\u00f3n deber\u00eda ir al mismo 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>Aqu\u00ed estamos cambiando el tama\u00f1o de la imagen proporcionalmente. Al hacerlo, mantenemos la relaci\u00f3n de aspecto y la imagen no se cortar\u00e1.<\/p>\n<p>Si est\u00e1 buscando un cultivo duro, reemplace las l\u00edneas siguientes<\/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>Con<\/p>\n<pre><code>$img = Image::make($path)-&gt;resize($width, $height)-&gt;save($path);<\/code><\/pre>\n<p>Espero que entiendas c\u00f3mo crear una miniatura en Laravel usando la biblioteca de im\u00e1genes de intervenci\u00f3n. Me gustar\u00eda escuchar sus pensamientos en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/cambiar-el-tamano-de-la-imagen-en-laravel-usando-la-biblioteca-de-imagenes-de-intervencion\/\" title=\"Cambiar el tama\u00f1o de la imagen en Laravel usando la biblioteca de im\u00e1genes de intervenci\u00f3n\">Cambiar el tama\u00f1o de la imagen en Laravel usando la biblioteca de im\u00e1genes de intervenci\u00f3n<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-cargar-y-comprimir-imagenes-en-laravel\/\" title=\"Una gu\u00eda para cargar y comprimir im\u00e1genes en Laravel\">Una gu\u00eda para cargar y comprimir im\u00e1genes en Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/cargar-y-cambiar-el-tamano-de-varias-imagenes-en-laravel\/\" title=\"Cargar y cambiar el tama\u00f1o de varias im\u00e1genes en Laravel\">Cargar y cambiar el tama\u00f1o de varias im\u00e1genes en Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQuieres crear una miniatura en Laravel mientras subes la imagen? En este art\u00edculo, estudiamos c\u00f3mo crear varias miniaturas utilizando la imagen de intervenci\u00f3n.<\/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":[495],"tags":[849],"class_list":["post-28372","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28372"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28372\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21673"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}