Cómo reducir el tamaño de una imagen manteniendo el contenido

Publicado el

Hay muchas formas de reducir el tamaño en kb de una imagen reduciendo su calidad, pero lo que os voy a explicar hoy no tiene nada que ver con KB y sí con tamaño en píxeles, ancho y alto, algo que se suele hacer cortando el contenido para ajustarse a las necesidades.

Si tenemos una fotografía de 1700px de ancho y necesitamos ponerla en un lugar que solo acepta 1300px, tendremos dos opciones:

– Cambiar la escala modificando altura y anchura para mantener todo el contenido, algo que puede hacerse con soluciones como la ofrecida en este enlace (click aquí).
– Cortar la imagen sacrificando parte del contenido, algo que en muchas ocasiones no es aceptable. Este famoso «crop» puede hacerse con sitios como el de este otro enlace (click aquí).

El caso es que ahora tenemos una tercera opción: reducir el ancho y largo pero sin respetar proporciones y manteniendo el contenido, algo solo posible con la Inteligencia Artificial y solo válido si la imagen tiene mucho «espacio vacío», como el de la captura superior.

Esta solución puede probarse en trekhleb.dev/js-image-carver. Allí tenemos varios globos con mucho azul de cielo de fondo. Al decidir el nuevo tamaño vemos cómo el sistema va juntando los globos entre ellos para ajustarse el tamaño solicitado.

Lo he probado con otras muchas fotos, y el resultado es excelente en la mayoría de las ocasiones (siempre que mantenga las características indicadas antes).

fotos

Algoritmo Seam Carving

El proyecto ha sido creado con el algoritmo Seam Carving. El autor del mismo indica que el cambio de tamaño de la imagen en función del contenido se puede aplicar cuando se trata de cambiar las proporciones de la imagen (es decir, reducir el ancho manteniendo la altura) y cuando no es deseable perder algunas partes de la imagen. En este caso, hacer la escala de imagen sencilla distorsionaría los objetos que contiene. Para preservar las proporciones de los objetos mientras cambiamos las proporciones de la imagen, podemos usar el algoritmo Seam Carving que fue introducido por Shai Avidan y Ariel Shamir.

La idea del algoritmo Seam Carving es encontrar la secuencia continua de píxeles con la menor contribución al contenido de la imagen y luego cortarla (eliminarla). Este proceso se repite una y otra vez hasta que obtenemos el ancho o alto de imagen requerido.