Cambiar tamaño (redimensionar) imagen en Laravel 8 con librería ImageManagerStatic de Intervention

En este post escribiré de la importancia de redimensionar las imágenes subidas desde un formulario o API de Laravel 8 u otro Framework que trabaje con PHP, uno de los principales motivos por el cual se busca redimensionar es el peso de la imágenes. Actualmente vengo trabajando con reportes en PDF (dompdf.wrapper) y las imágenes subidas directamente desde teléfonos móviles. Al pasar del tiempo los smartphones suelen mejorar sus cámaras con mayor resolución y tamaño. Con la finalidad de no restringir el tamaño de la imagen o poner como requisitos los tamaños máximos que se deben subir, se implementa este tipo de soluciones donde podamos reducir en gran parte el tamaño y obtenerlo del tamaño ideal para el trabajo que estés realizando. En mi experiencia las imágenes reducen una cantidad considerable sin perder una buena calidad para una impresión en un reporte u otras partes donde desees utilizar la imagen redimensionada. Aquí les dejo el código completo para que lo puedas implementar sin problemas. Saludos.


Implementación

  • Crear el enlace simbólico de Storage
artisan storage:link
  • A través de la consola descargaremos la librería con el siguiente comando
php composer require intervention/image
  • Referenciamos la librería en el el archivo config/app.php en $providers, escribimos lo siguiente
Intervention\Image\ImageServiceProvider::class,
  • En el mismo archivo del paso anterior debajo hay un arreglo (Array) $aliases, escribimos lo siguiente
'Image' => Intervention\Image\Facades\Image::class,
  • Ejecutar el siguiente comanda por la consola, para que los archivos sean publicados
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"
  • Importa la librería en tu controlador (Controller) donde llegará la imagen
use Storage;
use Intervention\Image\ImageManagerStatic as Image;
  • Función que recibe un Request, donde nos llegará la imagen con nombre file
public function subir_foto(Request $request){

            //Se declara el tipo de guardado
            Storage::disk('local');

            //capturar el nombre del archivo
            $nombre = time().$request->file('file')->getClientOriginalName();

            //guardar la imagen en Storage
            $path = Storage::putFileAs(
                'img/', $request->file('file'), time().$nombre
            );
            
            //Ubicación de la imagen
            $real_path = public_path('/storage'.'/'.$path);

            //Cambiar de tamaño segun el aspecto
            Image::make($real_path)
                ->resize(900, null, function ($constraint){
                    $constraint->aspectRatio();
                })
                ->save($real_path,72);

            //Retornar URL
            return $real_path;
  }


Comentarios

Entradas más populares de este blog

Evaluar funciones matemáticas en Java con librería JEP

Aprendizaje supervisado - Árbol de decisión para diagnóstico de enfermedades con Python