Cree una miniatura en Laravel usando la biblioteca de imágenes de intervención
En el sitio web, siempre nos ocupamos de las imágenes. Según el requisito, utilizamos diferentes versiones de imágenes. Es una buena práctica para los desarrolladores crear diferentes versiones, también conocidas como miniaturas de la imagen única. Estas miniaturas se pueden utilizar mientras se muestran diferentes tamaños de imágenes según el tamaño del contenedor. Mostrar una imagen que se ajuste al tamaño del contenedor ahorrará ancho de banda y mejorará el tiempo de carga de la página. Mostrar una imagen de gran tamaño en un contenedor pequeño es una mala práctica y compromete el tiempo de carga de la página. Como resultado, se recomienda crear varias miniaturas de una imagen y usar la versión adecuada cuando sea necesario.
En este artículo, estudiamos cómo crear una miniatura en Laravel usando la biblioteca de imágenes de intervención. Intervention Image es gratuito y una de las bibliotecas más populares para la manipulación de imágenes. En segundo plano, esta biblioteca utiliza GD Library e Imagick para la manipulación de imágenes.
Para este tutorial, crearé 3 miniaturas: pequeña, mediana, grande con tamaños 150 93, 300 * 185, 550 340 respectivamente. Cambie estos tamaños según sus necesidades.
Empezando
Para comenzar, primero debe instalar la biblioteca de imágenes de intervención en Laravel. Abra la terminal en el directorio raíz de su proyecto y ejecute el siguiente comando:
composer require intervention/image
Después de instalar la biblioteca, abra el config/app.php
archivo y agregue las siguientes líneas.
Agregue los proveedores de servicios para este paquete en la $providers
matriz.
InterventionImageImageServiceProvider::class
Agregue la fachada a la $aliases
matriz.
'Image' => InterventionImageFacadesImage::class
A continuación, para almacenar las imágenes necesitamos crear un directorio. Dirígete a la terminal y ejecuta el comando de la siguiente manera:
php artisan storage:link
Este comando crea un directorio de almacenamiento (enlace simbólico) en la carpeta pública. En esta carpeta, subiré la imagen original y sus miniaturas.
Crea una miniatura en Laravel
Todos configuramos la configuración básica y ahora podemos escribir el código real. Creemos un formulario en su archivo de vista.
<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>
En el controlador, debe agregar la fachada de la biblioteca ‘Imagen’ que hemos agregado en el config/app.php
archivo.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image;
class ImageController extends Controller
{
}
Al agregar la fachada, podemos llamar a funciones de la biblioteca de imágenes de intervención. En el siguiente código, subiré la imagen en dos lugares. La imagen original va directamente dentro de la storage/profile_images
carpeta. Las miniaturas se almacenarían en el storage/profile_images/thumbnail
directorio. Primero cargamos la imagen original en la carpeta de miniaturas y luego la cambiamos de tamaño.
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.");
}
}
En el código anterior, almaceno la imagen con 3 formatos pequeño, mediano y grande. Después de almacenarlos, estamos llamando al método createThumbnail
y pasando el ancho y alto requeridos al método. Definamos esta función a continuación. Esta función debería ir al mismo 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);
}
Aquí estamos cambiando el tamaño de la imagen proporcionalmente. Al hacerlo, mantenemos la relación de aspecto y la imagen no se cortará.
Si está buscando un cultivo duro, reemplace las líneas siguientes
$img = Image::make($path)->resize($width, $height, function ($constraint) {
$constraint->aspectRatio();
});
$img->save($path);
Con
$img = Image::make($path)->resize($width, $height)->save($path);
Espero que entiendas cómo crear una miniatura en Laravel usando la biblioteca de imágenes de intervención. Me gustaría escuchar sus pensamientos en la sección de comentarios a continuación.
Artículos relacionados
- Cambiar el tamaño de la imagen en Laravel usando la biblioteca de imágenes de intervención
- Una guía para cargar y comprimir imágenes en Laravel
- Cargar y cambiar el tamaño de varias imágenes en Laravel