Anteriormente compartí un artículo dedicado a optipng y jpegoptim, dos herramientas para optimizar sin pérdida (reducir el tamaño en disco) imágenes PNG y JPEG, respectivamente. Esta vez descubrí AdvanceCOMP, un compresor de imágenes PNG que soporta el algoritmo de compresión libre Zopfli, desarrollado por Google, y decidí probarlo.
AdvanceCOMP es una colección de utilidades de reconversión de archivos .ZIP
, .PNG
, .MNG
y .GZ
, diseñada originalmente para recomprimir ROMs, snapshots y videos de juegos emulados.
Además de recomprimir estos formatos utilizando el algoritmo DEFLATE de 7-Zip, permite utilizar el algoritmo Zopfli, tal como mencionaba al comienzo de este artículo.
Para instalar AdvanceCOMP, es necesario compilarlo desde sus fuentes. En este caso utilizo un sistema *BSD, pero el procedimiento es idéntico en sistemas GNU/Linux.
Descargar y extraer el paquete tar.gz
:
$ fetch https://github.com/amadvance/advancecomp/releases/download/v1.20/advancecomp-1.20.tar.gz $ tar xzvf advancecomp-1.20.tar.gz
Luego configurar, compilar e instalar e paquete:
$ cd advancecomp-1.20 $ ./configure --prefix=/usr/local $ make # make install
Para recomprimir imágenes PNG con el algortimo Zopfli, se debe utilizar la herramienta advpng
e indicar las opciones -z -4
. El nivel de compresión es ajustable:
emi@hal9000:~/advancecomp-1.20 % advpng --help advancecomp v1.20 by Andrea Mazzoleni, http://www.advancemame.it Usage: advpng [options] [FILES...] Modes: -l, --list List the content of the files -z, --recompress Recompress the specified files Options: -0, --shrink-store Don't compress -1, --shrink-fast Compress fast (zlib) -2, --shrink-normal Compress normal (7z) -3, --shrink-extra Compress extra (7z) -4, --shrink-insane Compress extreme (zopfli) -i N, --iter=N Compress iterations -f, --force Force the new file also if it's bigger -q, --quiet Don't print on the console -h, --help Help of the program -V, --version Version of the program
Con -4
se selecciona el nivel de compresión "insano" que es justamente utilizando el algoritmo Zopfli.
Como advpng
no tiene un modo recursivo, es necesario utilizar find
para buscar todos los archivos PNG dentro de un directorio:
$ cd ~/images $ time find . -type f -iname "*.png" -exec advpng -z -4 {} \;
Tener en cuenta que Zopfli es altamente intensivo en cuanto a consumo de CPU, por lo que se debe evitar su uso desde un VPS.
A mi estación de trabajo con un procesador Intel Core i3 le llevó casi 3 horas recomprimir 1116 imágenes PNG:
6816 6359 93% ./2015/1/2014-social.png 6816 6359 93% 5841 5326 91% ./2015/1/2014-browser.png 5841 5326 91% 48490 44491 91% ./2015/1/referals.png 48490 44491 91% 11283 10544 93% ./2015/1/2014-country.png 11283 10544 93% 8329 7607 91% ./2015/1/2014-gender.png 8329 7607 91% 89521 83972 93% ./2015/4/wp_ss_20150421_0005.png 89521 83972 93% 88894 83418 93% ./2015/4/wp_ss_20150421_0006.png 88894 83418 93% 69064 61099 88% ./2015/4/insultos-sudo.png 69064 61099 88% 16745 14669 87% ./2015/4/wp_ss_20150421_0002.png 16745 14669 87% 10252 8860 86% ./2015/4/wp_ss_20150421_0003.png 10252 8860 86% 4779 4192 87% ./2015/4/vmware-tools02.png 4779 4192 87% 4430 3893 87% ./2015/4/vmware-tools01.png 4430 3893 87% 53278 49096 92% ./2015/4/wp_ss_20150421_0001.png 53278 49096 92% 10306.358u 31.204s 2:52:31.58 99.8% 218+187k 751+544io 13pf+0w
La tercer columna muestra el porcentaje de tamaño luego de recomprimir. Por ejemplo 92% indica que se logró reducir un 8% el tamaño de la imagen. Tener en cuenta que estas imágenes habían sido previamente recomprimidas utilizando optipng, lo cual significa que AdvanceCOMP logró reducir aún más, mejorando el rendimiento de optipng.
Referencias