
ImageMagick desde el Terminal

Si bien ayer te mostraba un post sobre , hoy te traigo más información sobre esta potente herramienta.
Y es algo curioso, siempre que instalaba Shutter me fijaba que siempre se instalaba esta herramienta, si saber todas las prestaciones que trae.
Así que ya hablando un poco de ImageMagick, se puede decir que es una aplicación que permite manipular imágenes a través de la línea de comandos y sirve para prácticamente todos los formatos (+200). Con ella, también es posible automatizar las acciones sobre las imágenes contenidas en una carpeta (conversión, redimensionado, etc…)
Vamos a ver una lista de comandos útiles de ImageMagick que sirven para manipular imágenes desde la terminal:

Obtener información de una imagen:
identify -ping image.png
Obtener aún más información:
identify -verbose image.png
Conocer la lista de colores utilizados en una imagen:
identify -list color image.png
Convertir una imagen PNG en JPG:
convert image.png image.jpg
Convertir una imagen PNG en JPG indicando la calidad de conversión:
convert -quality 96 image.png image.jpg
Convertir todas las imágenes PNG en JPG contenidas en una carpeta:
mogrify -format png *.jpg
Convertir todas las imágenes (*.jpg, *.png) en PDF:
convert images*.* archivo.pdf
Cambiar el tamaño de una imagen:
convert -resize 48×48 image.png image-mini.png
Cambiar el tamaño de todas la imágenes de una carpeta:
mogrify -resize 48×48 *.png
Cambiar el tamaño de una imagen indicando el ancho:
convert -resize 620x image.png image-620.png
Cambiar el tamaño de una imagen indicando el alto:
convert -resize x100 image.png image-100.png
Crear un Favicon:
convert -colors 256 -resize 16×16 image.jpg favicon.ico
Convertir una imagen en color en blanco y negro:
convert -type image.jpg image-noir-blanc.jpg
Añadir un borde transparente de 1 pixel alrededor de una imagen:
convert -bordercolor Transparent -border 1×1 image.png image-borde.png
Añadir un borde negro de 10 pixels alrededor de una imagen:
convert -bordercolor #000000 -border 10×10 image.png image-borde.png
Crear un negativo de una imagen:
convert -negate image.png image-negate.png
Rotar una imagen en vertical:
convert -flip image.png image-inversee.png
Rotar una imagen de izquierda a derecha:
convert -flop image.png image-inversee.png
Usar el GUI de ImageMagick:
display image.png

Manipulación básica:
Para la creación de un thumbnail o copia en miniatura para ponerlo en webs o en catalogos usaremos la sintaxis:
convert -sample 80x60 zx80.jpg zx80-thumb.jpg
Convertirá una imagen llamada zx80.jpg en zx80-thumb.jpg a un tamaño de 80x60.
Este tamaño no es real del todo, ya que ImageMagick advertirá que la imagen puede quedar deformada y automáticamente la ajustará, pudiendo quedar de un tamaño tal que 76x58.
Tambien se pueden usar porcentajes:
convert -sample 45%x45% zx80.jpg zx80-thumb.jpg.
Si a la vez queremos rotar la imagen siguiendo las agujas del reloj pondremos:
convert -rotate 90 zx80.png zx80-2.png
Si quisieramos rotar la imagen en contra de las agujas del reloj, pondriamos un numero negativo:
convert -rotate -90 zx80.png zx80-2.png

Para hacer un flip, o lo que es lo mismo, cambiar la parte de arriba de la imagen a abajo o la derecha a la izquierda, teclearemos esta linea:
convert -flip zx80.jpg zx80-flip.jpg
O bien:
convert -flop zx80.jpg zx80-flop.jpg

Si tenemos una colección de imágenes para cambiar de formato, podemos usar el comando mogrify con el modificador -format:
mogrify -format jpg *.png
Tambien podemos crear thumbnails con mogrify y cambiarle el formato a png:
mogrify -format png -sample 30%x30% *.jpg

Añadir efectos
Los efectos especiales en las fotos las dotan de cierto don artístico.
Algunos efectos de ImageMagik son el charcoal, colorize, implode, solarize, entre otros. Estos patrones se fijan por medio de numeración para especificar la cantidad de efecto que tendrá la imagen.
En el caso de charcoal, una especie de boceto inicial de la imagen original, pondremos este comando:
convert -charcoal 3 zx80.png zx80-coal.png
Si quisiéramos poner otro tipo de efectos solo deberemos cambiarlo.

Jugando con PDFs
Si tenemos una colección de fotos, podemos añadirlas a un formato portable de datos (PDF) para catalogarlas o mandarlas a un amigo. El comando mágico que hace esto es:
convert *jpg zx80.pdf
Tambien se puede extraer imágenes de un pdf:
convert zx80.pdf zx80-imagen%04d.png
Donde:
- El modificador %d selecciona el formato de salida. Debe ser un numero decimal.
- Si ponemos un cero ( 0 ) nos servirá para el caso en que tengamos mas de 10 fotos, por lo que a las primeras 9 les pondrá el cero delante para estar ordenadas correctamente.
- El 4 indica el numero total de digitos que podrá usar. Por ejemplo 0001, 0002, 0003.... ideal para colecciones muy numerosas.
- Si no se especifica el modificador %d ImageMagick se encargará de poner un solo valor a la imagen.

Añadir texto
Con la cantidad de imágenes que solemos almacenar, ¿como distinguirlas? ¿Y si pudieramos añadirle un Tag o cabecera a la imagen?. Pues a eso vamos:
convert -font helvetica -fill red -pointsize 30
> -draw 'text 110,320 "Tibidabo, Barcelona"'
> zx80.png zx80-tag.png
Esto especifica el color, la fuente, el tamaño, la localización y el propio texto.
NOTA: Se puede poner todo en la misma linea de comando, la barra solo indica cambio de linea.
También podríamos poner textos con dos localizaciones diferentes en diferente color así:
convert -font helvetica -fill red -pointsize 30
> -draw 'text 110,320 "Tibidabo, Barcelona"'
> -fill blue -draw 'text 150,380 Domingo'
> zx80.png zx80-text.png
Si nos fijamos en las comillas vemos que en la primera frase tenemos dobles comillas ( " ) cuando en la segunda palabra no están puestas. Esto se debe a que si queremos poner más de una palabra deberemos especificarlo con las dobles comillas. Se puede además especificar tamaños diferentes para ambos textos.
NOTA: En algunas distribuciones Linux puede que la ruta de las fuentes no coincida con la ruta de ImageMagick, por lo que se deberá hacer un enlace simbolico o copiar las fuentes a la ruta apropiada, a no ser que especifiquemos el Path en el propio comando.

Borde
Para la aplicación de frames o bordes en una fotografia se puede especificar en modo solido o algo transparente.
convert -bordercolor white -border 5x5 zx80.png zx80-borde.png
Para saber los colores disponibles para bordes, fondos y textos tenemos el comando -list color.
Otra opción de borde es el raise o borde en 3D trasparente.
convert -raise 15x15 zx80.jpg zx80-raised.jpg
Para bordes algo más elaborados se puede usar las opciones de -mattecolor y -frame con los modificadores -bordercolor y -border.

Hasta aquí alguno de los comandos de esta poderosa aplicación, si deseás saber más, siempre podés hacer uso de las man pages.