Hace unos días, Google publicó un nuevo compresor de imágenes JPEG llamado Guetzli (galletita en suizo alemán). Es software libre publicado bajo la licencia Apache 2.0. En el blog, anunciaban resultados de archivos 35% más chicos que con métodos actuales, permitiendo usarlos en la web para carga más rápido y menos uso de datos.

Para instalarlo, podemos obtener el código desde GitHub, ya sea clonándolo o desde un archivo. En sistemas GNU/Linux (POSIX) tenemos que instalar libpng ( libpng-dev en Debian y Ubuntu, libpng-devel en Fedora y libpng en ArchLinux) y ejecutar make en el directorio de guetzli. Esto genera un ejecutable guetzli en el directorio bin/Release. Podemos agregarlo al path para usarlo cómodamente desde la terminal. También hay instrucciones para Windows y macOS.

Algunas notas importantes de la documentación de Guetzli:

  • Usa mucha memoria. Se deben proveer al menos 300MB de memoria por 1MPix de la imagen de entrada.
  • Usa mucho tiempo de procesamiento. Se debe contar en usar al menos 1 minuto de CPU por 1MPix de imagen de entrada.
  • Asume que la entrada está en el perfil sRGB (TIL) con una gamma de 2.2. Guetzli ignorará cualquier metadato de perfil de color de la imagen.

El binario lee una imagen JPEG o PNG y crea una imagen JPEG optimizada:


guetzli [--quality Q] [--verbose] original.png optimizada.jpg
guetzli [--quality Q] [--verbose] original.jpg optimizada.jpg

Para probarlo saqué una foto de 16.1MP con la cámara de mi teléfono. Al primer intento fallé porque no daba con la memoria suficiente tal como dice la documentación:


Unhandled exception. Most likely insufficient memory available.
Make sure that there is 300MB/MPix of memory available.

16.1 por 300 son 4830MB de memoria ram que debería tener disponible. Así que fui cerrando aplicaciones hasta que free -m diera con los números. Increíble cómo consumimos memoria estos días, pero al ver que tengo más de 100 pestañas abiertas en Firefox, editor de texto, cliente de correo, cliente de chat, un reproductor de música, etc… ejecutándose al mismo tiempo, tiene sentido.

La imagen original es esta (clic para ver la original):

Imagen Original Guetzli

Imagen Original Guetzli

Es la imagen cruda sin comprimir, directo de la cámara, con un peso de 2.9MB. Por lo que comentaba la documentación, la optimización llevaría unos 16 minutos aproximadamente (1 minuto por 1MPix), así que le conté el tiempo y me fui a preparar un café o algo:

$ time guetzli imagen.jpg imagen-optimizada.jpg

real 15m41.561s
user 14m58.576s
sys 0m42.356s

Prácticamente 16 minutos entonces. Y el resultado fue bastante bueno, resultando en esta otra imagen:

Imagen Guetzli Optimizada

Imagen Guetzli Optimizada

El tamaño de esta nueva imagen es de 1.4MB. Mirando muy de cerca las imágenes, realmente no noto una diferencia sustancial en la calidad, pero el tamaño se redujo bastante. Para comparar, optimicé la misma imagen con jpegoptim, un compresor de JPEG que se puede instalar desde los repos de Debian. Para hacer la cosa pareja, comprimí el archivo a la misma cantidad de MB que el creado por guetzli, ya que el comando lo permite:

$ jpegoptim --size=1433.6k imagen.jpg
imagen.jpg 3006x5344 24bit N Exif  [OK] 2854419 --> 1426035 bytes (50.04%), optimized.`

En este resultado sí noté una diferencia (haciendo mucho zoom):

Imagen jpegoptim

Imagen jpegoptim

A modo de conclusión, es una buena herramienta de Google y estas pruebas súper básicas y para nada profesionales confirman los niveles de compresión y la poca pérdida de calidad que promete Guetzli. Para un caso como este blog, donde la calidad de las imágenes no es tan importante, probablemente no lo use por un tema de tiempos más que nada. Pero imagino que para un blog de fotografía profesional, o donde las imágenes tengan un mayor protagonismo, sería útil. Ni que hablar para sitios con un tráfico importante, cada optimización sirve, y tener un script que optimice cada imagen sería beneficioso.

Pueden ver el repositorio de código en GitHub o el anuncio original de Google en su blog de Investigación.

No hay comentarios en este post

Feed de comentarios

Dejar un comentario

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.

Toasty!