Aprendee a cambiar el tamaño de una imagen preservando la relación de aspecto de la imagen usando la biblioteca Image Intervention en PHP.

La libreria Image Intervention es una herramienta realmente útil para manipular imágenes linealmente sin tanta molestia. Una de las cosas que tuve que lograr recientemente fue crear la versión en miniatura de cualquier imagen cargada en un proyecto de Symfony. Como dije, trabajar con Image Intervention es bastante cómodo, así que simplemente utilicé el método de cambio de tamaño que proporciona el nuevo ancho de 256px y una altura nula (porque pensé que procesaría la relación de aspecto automáticamente):

<?php

use Intervention\Image\ImageManager;

$manager = new ImageManager();
$sourceImage = "images/source.jpg";
$destinationImage = "images/destination.jpg";

$image = $manager->make($source)->resize(256, null);

$image->save($destinationImage);

Sin embargo, la relación de aspecto no se conservó porque la imagen de salida se distorsionó:

Resize Image Intervention Only Width

Después de leer la documentación, descubrí que el problema era que solo proporcioné el ancho de la nueva imagen y no agregué la restricción para mantener la relación de aspecto. Para resolver este problema, utilicé el siguiente código en su lugar:

<?php

use Intervention\Image\ImageManager;

$manager = new ImageManager();
$sourceImage = "images/source.jpg";
$destinationImage = "images/destination.jpg";

// Cambiar el tamaño conservando la relación de aspecto de la imagen
$image = $manager->make($source)->resize(256, null, function ($constraint) {
    $constraint->aspectRatio();

    // si necesitas evitar el aumento de tamaño, puedes agregar:
    // $constraint->upsize();
});

$image->save($destinationImage);

Esta vez la miniatura se creó respetando la relación de aspecto como esperaba:

Aspect Ratio Image Resizing

El mismo código se aplica cuando deseas ajustar la altura de la imagen en lugar del ancho.

Que te diviertas ❤️!


Conviertete en un programador más sociable

Patrocinadores