OptiPNG: Optimización de imágenes PNG

El otro día hablé de pngcrush, una aplicación libre y multiplataforma que permite reducir el peso de una imagen PNG sin que haya pérdida de calidad. Hoy toca hablar de OptiPNG, una herramienta similar que está basada en pngcrush.

Está publicado bajo licencia zlib (compatible con GPL) y está desarrollado por Cosmin Truţa. Está disponible en los repositorios de varias distros, pero también hay versión para Windows y Mac OS.

Al igual que pngcrush, funciona por línea de comandos, pero usarlo es tan fácil como escribir:

optipng imagen.png

Sin embargo, lo que sí diferencia a ambas herramientas es la versatilidad de OptiPNG. Es una aplicación más completa, no solo porque a través de diversos parámetros permite gestionar muchos detalles del proceso, sino porque además permite convertir imágenes en formato BMP, GIF, PNM y TIFF a formato PNG con optimización incluida.

El problema es que gestionar detalles de la optimización no es una tarea fácil, pero sí podemos exprimir con facilidad la capacidad de optimización de esta forma:

optipng -o6 imagen-original.png -out imagen-optimizada.png

En este caso estamos utilizando los parámetros:

  • -o6: Define el nivel de optimización, en este caso estamos usando el 6. Con -o1 estaríamos realizando una sola prueba de recompresión, mientras que -o2 sería el nivel por defecto que se usa al ejecutar el comando como "optipng imagen.png". Cuanto mayor sea el nivel, más "potente" es la optimización.
  • -out: Permite especificar el nombre del archivo resultante. Si no usamos este parámetro, la imagen optimizada sobreescribe la original.

Un dato adicional sobre el parámetro -oX (siendo X el nivel de optimización). El nivel 6 prueba 120 métodos (similar a la opción -brute de pngcrush) y el 7 llegaría hasta 240 métodos o pruebas de compresión. En muy pocos casos el nivel 7 consigue mejores resultados que el 6, así que este último es más que suficiente.

Vuelvo a poner un ejemplo con FanTux, creado por adrielhernandez y publicado en TuxFactory bajo licencia Creative Commons by-nc-sa. Antes de optimizarla con optipng, la he reducido a 128x128 con GIMP para que no sea tan pesada y la he guardado sin tocar nada más.

FanTux OriginalFanTux OptiPNG

A la izquierda tenemos la imagen original, a la derecha la imagen optimizada con OptiPNG utilizando el nivel 6 de optimización (-o6). No hay ningún cambio, pero la imagen original pesa 23,76 KB y la optimizada 21,43 KB, lo que supone una reducción del 10% (aproximadamente) sobre la original, sin pérdida de calidad. El nivel 7 de optimización da el mismo resultado.

Si lo comparamos con el resultado que dio pngcrush, podemos comprobar que la imagen optimizada con OptiPNG pesa un poquito más, exactamente 21 bytes más (una cantidad despreciable). Eso sí, he de reconocer que he obtenido mejores resultados con OptiPNG salvo casos contados, como este.

Pngcrush: Optimización de imágenes PNG

Pngcrush es una aplicación que permite optimizar una imagen PNG para reducir su tamaño sin pérdida de calidad.

Es una herramienta libre, desarrollada por Glenn Randers-Pehrson y publicada por bajo licencia zlib, que es compatible con la licencia GPL.

Está disponible en los repositorios de las distros GNU/Linux más importantes, aunque en la web hay un enlace a la página del proyecto en SourceForge, donde podemos encontrar el código fuente y versiones para Windows. Incluso hay versiones para Mac OS en Darwin Ports.

Funciona por línea de comandos, pero es fácil de usar, no hay más que ejecutar el comando:

pngcrush imagen-original.png imagen-optimizada.png

Permite controlar al detalle la optimización a través de una serie de opciones que podemos ver si ejecutamos simplemente "pngcrush" en la terminal. De todos modos, para aquel que no quiera complicaciones, puede usar el comando anterior.

Si queremos sacar mayor partido a la optimización podemos podemos usar un comando un poquito más completo:

pngcrush -rem -reduce -brute imagen-original.png imagen-optimizada.png

En este caso estamos utilizando los parámetros:

  • -rem: Elimina información adicional de la imagen.
  • -reduce: Intenta reducir la profundidad de color de la imagen y eliminar los colores no utilizados, siempre que sea posible y sin pérdida de calidad.
  • -brute: Prueba más de 120 métodos de optimización y se queda con el que dé mejor resultado.

Voy a poner un ejemplo con FanTux, creado por adrielhernandez y publicado en TuxFactory bajo licencia Creative Commons by-nc-sa. Antes de optimizarla con pngcrush, la he reducido a 128x128 con GIMP para que no sea tan pesada y la he guardado sin tocar nada más.

FanTux OriginalFanTux pngcrush

A la izquierda tenemos la imagen original, a la derecha la imagen optimizada con pngcrush utilizando los parámetros "rem", "reduce" y "brute". Se ven exactamente igual, pero la imagen original pesa 23,76 KB y la optimizada 21,41 KB, lo que supone una reducción del 10% (aproximadamente) sobre la original, sin pérdida de calidad.

Obviamente, la reducción depende de cada imagen, pero utilizando estos 3 parámetros conseguiremos una optimización bastante interesante, reduciendo así el peso de las imágenes PNG sin que haya pérdida de calidad.