sábado, 6 de junio de 2020

Tratar imágenes con ImageMagick

Imagemagick es una potentísima ‘suite’ de herramientas para el tratamiento de imágenes, que trabaja desde comandos por consola (y que supongo que estará en las ‘tripas’ de muchas aplicaciones gráficas de edición de imágenes), con la que se puede hacer muchas cosas con las variadas utilidades que contiene (convert, identify, mogrify, montage…, que se pueden ver con ‘man imagemagick’), y que siempre es bueno tener a mano porque hay cosas que se hacen rapidísimamente con ella. Creo que en Debian 10 ya viene instalada por defecto. Y si no, se instala (por ejemplo, con 'sudo apt install imagemagick').
Así que vamos a echarle un vistazo a lo más interesante.


Si, porque no pretendo profundizar en el uso de Imagemagick, cuyo tutorial sería extensísimo (para que el que tenga humor, o curiosidad, por ver todo lo que se puede hacer con esta herramienta, le bastará introducir, en la búsqueda del Google, nombre de la utilidad + imagemagick, y encontrará mucha información), pero si dejar anotado aquí algunas cosas útiles y sencillas que se pueden realizar con el comando 'convert', que es su utilidad 'buque insignia' (y/o con ‘mogrify’)
Y es que convert y mogrify son bastante similares, la diferencia básica en que con ‘convert’ tienes que introducir tanto el nombre del archivo original (input) como el que quieras dar al archivo modificado (por lo que al final conservarás ambos archivos), mientras que con ‘mogrify’ solo se introduce el nombre del archivo a modificar, y te lo guarda con la modificación realizada (sobrescribiendo el original). Por eso mogrify se usa bastante para modificar (definitivamente) el tamaño de archivos (con ‘mogrify -resize...’), como explicaba, ya hace mucho tiempo, en 2013, en esta entrada
(Que también se podría hacer con convert, con el mandato (por ejemplo)
convert imagen.jpg -resize 50% imagen_reducida.jpg
para conservar ambos archivos). 
(Y se me ocurre que quizás sea bueno recordar también aquí esa anotación genérica ‘%d’ para numerar múltiples imágenes de salida, como (en el ejemplo sería con 3 dígitos) ‘imagen%03d.extensión’, donde obtendríamos la salida ‘imagen000.jpg, imagen001.jpg, imagen002.jpg’, etc.)
Pero dicho esto, vamos a ver ahora algunas utilidades con ‘convert’. Por ejemplo…

Cambiar formato de archivos de imagen
Sencillísimo
convert imagen.bmp imagen.jpg 
pero -¡Atención...!- como los archivos PDF también son ‘archivos de imagen’ también podemos convertir un PDF en imagen… 
convert archivo.pdf archivo.png 
o, viceversa… 
convert archivo.jpg archivo.pdf 
NOTA interesante: una forma muy sencilla de enviar por email una colección de fotos es convirtiéndolas en un solo archivo PDF (abriendo una terminal en la carpeta donde tengamos ‘exclusivamente’ estas fotos), con 
convert *.jpg fotos.pdf
y, si se quiere, rehacer las imágenes individuales (por ejemplo con 'convert fotos.pdf fotos%02d.jpg') en el destino.

Unir dos (o más) imágenes
Se hace con el mandato convert +append (para unirlas horizontalmente) o convert -append (para unirlas verticalmente).
convert +append imagen1.png imagen2.jpg imagen3.png imagenHorizontal.jpg
(como se ve, se pueden mezclar formatos. Hombre, como queda perfecto es si las fotos a unir tienen el mismo ancho y alto, en pixeles. 

NOTA: Fijarse que el último nombre es el de la imagen final. Aunque también, para separar el input y el output, se puede poner con la notación ‘convert [imagen_original] [modificadores] [imagen_final_modificada]’. Así: 
convert imagen1.png imagen2.jpg imagen3.png -append imagenVertical.jpg

Girar (o voltear) una imagen
Para girar 90º en sentido horario se usa 
convert -rotate -90 imagen.png imagen_rotada.png
y en sentido anti-horario (como he dicho, también se podría poner así) 
convert imagen.png -rotate +90 imagen_rotada.png
Y para voltear (giro de 180 grados de arriba para abajo)
convert -flip imagen.jpg imagen_volteadaH.png 
y con giro de 180º de izquierda a derecha 
convert -flop imagen.jpg imagen_volteadaV.png 
NOTA IMPORTANTE: todos estos mandatos, si la modificación es definitiva (y no queremos conservar la imagen inicial) se pueden hacer, más sencillamente, con ‘moglify’. Por ejemplo 
moglify -flip foto.png 
nos voltea una foto, que se guarda ya volteada, y 
mogrify -rotate -90 foto.png 
nos la gira 90º, y conserva ya girada, esa imagen.

Convertir una imagen en thumbnail (o icono)
Podemos hacerlo con el mandato 
convert -sample 32x32 imagen.jpg thumbimagen.png
(Nota: el tamaño final no será exactamente de 32x32 pixeles, porque convert ajustará la proporcionalidad del alto y ancho original (a lo mejor, por ejemplo, queda en 32x27)

Y podrían hacerse muchas cosas más. Por terminar con algún ejemplo mas...

Pasar una imagen a Blanco y Negro
convert imagen.png colorspace gray imagenByN.png
(muy sencillo ¿no?)

Poner marco o borde coloreado a una foto
convert -raise 20x20 foto.jpg foto_enmarcada.jpg
(es un marco 3D semitransparente, se puede variar el ancho en el ejemplo, 20x20) y… 

convert -bordercolor blue2 -border 15x15 foto.png foto_conborde.png 
Nota: los posibles colores podemos verlos con el comando 
convert -list color

Añadir un texto a una imagen
Esto ya es un poco más complejo pero, para ver hasta donde llega el potencial de ImageMagick, también podríamos añadir un texto a una imagen, definiendo el tipo de letra (font) el color (fill), el tamaño, en puntos (pointsize), y el texto, y su ubicación, con el mandato (por ejemplo)…
convert imagen.png -gravity South -font helvetica -fill orange -pointsize 50 -annotate +0+0 'texto a incluir' imagen_texto.png 

(nota, el comando va 'todo seguido) donde -gravity es el modificador de convert y South la posición elegida para el texto (el Sur es abajo, y centrado, North sería arriba, etc) y, más adelante, +0+0 es el desplazamiento (en pixeles) que queramos dar al texto (desde su posición ‘centrada en South’), respectivamente, hacia la derecha y hacia arriba).
(NOTA: también se podría usar la cómoda notación de un comando largo, escribiendo en líneas que terminen con / y que empiece (la siguiente) con > para indicar que, en realidad, va todo seguido)

Por cierto, además del ya mencionado 'convert -list color', con ‘convert -list font’ podemos conocer, en este caso, las fuentes disponibles.

Bueno, y hablando de seguir, no sigo más, salvo decir, para terminar, que en realidad, imageMagick instala también un pequeño GUI donde, a partir de un ‘File-Open…’ se pueden hacer muchas cosas… pero es muy complicado de usar si no eres un usuario ‘PRO’ de ImageMagick… y yo prefiero ocultarlo en mi 'Menu' de aplicaciones gráficas, y usar estos pequeños ‘tips’, por consola, para hacer algunas cosillas como las indicadas.

No hay comentarios:

Publicar un comentario