Optimizar imágenes desde línea de comandos

Existen tanto herramientas online como aplicaciones y programas de sistema operativo (Linux en este caso) para optimizar imágenes de todo tipo (jpeg,jpg, png…). El problema es que la automatización de las tareas de optimización así como trabajar con una cantidad grande de imágenes se complica cuando nos limitamos a utilizar estas opciones. Para ello lo mejor es hacer uso de herramientas a través de la línea de comandos ya que nos permite crear scripts y automatizar las tareas de forma sencilla.

Optimizar imágenes jpg y jpeg en Linux

Para optimizar imágenes con formato jpeg y jpg podemos usar la herramienta jpegoptim, disponible en los repositorios oficiales de Debian y Ubuntu (en CentOS y RHEL creo que no está por repositorio, habría que instalarla manualmente):

# apt-get install jpegoptim

Su utilización básica es sencilla, ejecutamos el comando y pasamos la imagen como parámetro:

$ jpegoptim Dog.jpg 
Dog.jpg 640x480 24bit JFIF  [OK] 36670 --> 35679 bytes (2.70%), optimized.

Por salida estándar veremos el porcentaje que se ha podido optimizar. En caso de que la imagen ya se encuentre optimizada no se modificará y aparecerá «skipped». Al ser un formato comprimido es posible que no la optimiación sea mínima o nula:

$ jpegoptim Dog.jpg 
Dog.jpg 640x480 24bit Exif JFIF  [OK] 43486 --> 43499 bytes (-0.03%), skipped.

A la hora de procesar todo un directorio o un listado de imágenes podemos usar bucles de bash o un script según nuestras necesidades:

$ for imagen in Dog.jpg Cat.jpg Lion.jpg; do jpegoptim "$image"; done
$ for imagen in /home/foo/imagenes/*.jpg; do jpegoptim "$image"; done

Optimizar imágenes PNG en Linux

Para las imagenes PNG podemos utilizar la herramienta pngcrush, también disponible en los repositorios oficiales de Debian y Ubuntu:

 # apt-get install pngcrush

En cuanto a los parámetros a utilizar, está comprobado que el parámetro «-brute» es el que mejor nivel de compresión y optimización ofrece.

-brute (use brute-force: try 126 different methods [11-136])
        -c color_type of output file [0, 2, 4, or 6]
        -d directory_name (where output files will go)

Junto a este parámetro especificamos el nombre para la imagen que se va a generar además de la imagen origen (-e) o el directorio que contiene las imagenes (-d) si queremos procesar todas:

$ pngcrush -brute -e "dados_comprimida.png" dados.png 

 | pngcrush 1.7.9
[...[
 | and zlib version 1.2.3.3, Copyright (C) 1998-2002 (or later),
 |    Jean-loup Gailly and Mark Adler.
|| Warning: versions are different between png.h and png.c
||   png.h version: 1.2.42
||   png.c version: 1.2.44

 | It was compiled with gcc version 4.4.4 and gas version 2.9.5(?).

   Recompressing dados.png
   Total length of data found in IDAT chunks    =    47210
unknown chunk handling done.
   IDAT length with method  11 (fm 0 zl 2 zs 2) =   134056
[...] 
   IDAT length with method  57 (fm 4 zl 4 zs 0) =    50543
   IDAT length with method  58 (fm 5 zl 4 zs 0) =    50468
   IDAT length with method 135 (fm 4 zl 4 zs 3) =    54923
   IDAT length with method 136 (fm 5 zl 4 zs 3) =    54846
   Best pngcrush method = 0 (fm 5 zl 9 zs 1) for dadosdados_comprimida.png
     (no IDAT change)
     (no filesize change)

   CPU time used = 2.200 seconds (decoding 0.240,
          encoding 1.430, other 0.530 seconds)

# pngcrush -brute -d "/home/foo/imagenes" *.png

Algunas  ejecuciones más avanzadas aumentando el número de parámetros y las variables de optimización:

$ $ pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB entrada.png salida.png

Para el tema de optimizar PNGs, como herramienta online me gusta mucho tinypng.com, ofrece unos ratios de optimización bastante altos.  Echadle un vistazo.

Un comentario en “Optimizar imágenes desde línea de comandos

Comments are closed.