A menudo es necesario hacer una manipulación básica de imágenes y da mucha pereza ejecutar GIMP u otro editor de imágenes para una tontería; e incluso a veces necesitamos modificar gran cantidad de imágenes y necesitamos automatizar el proceso:
Tabla de contenidos
Ejecución
Aunque ImageMagick, que seguro que lo encontráis en los repositorios de vuestra distribución favorita, da mucho más de sí, aquí veremos ejemplos con convert, import y mogrify
Redimensionado de imágenes
Por ejemplo para redimensionar con un ancho de 320 pixels:
$ convert -resize 320 hamburgueson.jpg hamburgueson_mini.jpg
De esta forma, si especificamos la altura, se ignorará, ya que convert intentará mantener el aspecto de la imagen.
También podemos imponer la altura y que se calcule automáticamente el ancho:
$ convert -resize x500 hamburgueson.jpg hamburgueson_mini.jpg
O si queremos, podemos también redimensionar con un porcentaje del tamaño original:
$ convert -resize 40% hamburgueson.jpg hamburgueson_mini.jpg
También es posible la redimensión sin mantener el aspecto (relación ancho/alto) de la siguiente forma:
$ convert -resize \!600×300 hamburgueson.jpg hamburgueson_deforme.jpg
Y esto mismo, también por porcentaje:
$ convert -resize \!100×30% hamburgueson.jpg hamburgueson_deforme.jpg
Capturando el escritorio
Puede que nuestro entorno preferido de escritorio no venga con esta funcionalidad, o incluso que estemos desde una máquina remota y queramos ver lo que pasa en el escritorio, una captura de pantalla no viene mal. Para ello podemos hacer lo siguiente:
$ import -window root captura.jpg
O si queremos capturar una ventana en especial:
$ import ventana.jpg
Nos aparecerá un puntero especial que nos permitirá seleccionar la ventana a capturar.
O si queremos capturar una ventana en especial sin necesidad de hacer click (muy útil si estamos en un equipo remoto):
$ import -window «Titulo de la ventana» ventana.jpg
También podemos sacar el ID de la ventana con:
$ wmctrl -l
Y poner en lugar del título, el ID. Es necesario que nos encontremos en el mismo escritorio de la ventana para hacer la captura. Cómo podemos hacer eso remotamente ?
$ wmctrl -l # Nos dirá en la segunda columna el escritorio donde está la ventana
$ wmctrl -s [numero] # Saltaremos al escritorio [numero], el primero es el cero.
Espacios de color
Podemos cambiar el formato del color de forma rápida usando colorspaces, dependiendo del formato de salida y la forma en la que la imagen será utilizada, para vídeo, por ejemplo. Aunque también tenemos algunos espacios interesantes como:
$ convert -colorspace gray hamburgueson.jpg hamburgueson_gris.jpg
El tono de gris estará calculado para adecuarse al ojo humano: Gris = 0.299*Rojo+0.587*Verde+0.114*Azul
Aunque también podremos transformar a YUV, XYZ, LAB, HSL, etc; también necesitamos que el formato de salida sea compatible con esos espacios de color. Para ver una lista de todos los colorspaces disponibles:
$ covert -list colorspace
También podemos ecualizar la imagen con respecto a los diferentes espacios de color de la siguiente forma:
$ convert -colorspace [espacio] -equalize origen destino
En el ejemplo:
$ convert -colorspace hsl -equalice hamburgueson.jpg hamburgueson_hsl.jpg
Y si no queremos decir el colorspace, usaremos el actual de la imagen:
$ convert -equalize hamburgueson.jpg hamburgueson_e.jpg
Recortar imágenes
Es más cómodo hacerlo con el ratón, pero en ocasiones querremos automatizar el proceso, y podemos hacerlo de la siguiente forma:
$ convert -crop [ancho]x[alto]+[x]+[y]
Por ejemplo lo siguiente:
$ convert -crop 300×300+100+100
Creará una imagen de 300×300 y empezará a partir del punto 100×100 (desde la izquierda/arriba).
Bordes
Para añadir un borde podemos hacer lo siguiente:
$ convert -bordercolor [color] -border [ancho]x[alto] origen destino
En el ejemplo tenemos:
$ convert -bordercolor black -border 10×10 hamburgueson.jpg hamburgueson_borde.jpg
Para especificar el color podemos hacerlo de varias formas:
$ convert -bordercolor black/red/green/blue… # Por su nombre. Si queremos saber los nombres de color disponibles:
$ convert -list color
$ convert -bordercolor «#aacc11» # Por su equivalente hexadecimal
$ convert -bordercolor «rgb(100,150,200)» # En función de sus valores RGB
$ convert -bordercolor «hsl(100,150,200)» # En función de sus valores HSL
$convert -bordercolor «cmyk(100,200,150,230)» # En función de sus valores CMYK
… etcétera… tantos formatos como espacios de color.
Ahora bien, queremos quitar el reborde añadido:
$ convert -trim hamburgueson_borde.jpg hamburgueson_nuevo.jpg
Pero es posible que por la compresión jpeg no se detecte bien el borde (es una compresión con pérdida de calidad, y se modifica la imagen; para nosotros el borde es negro, pero para el ordenador hay muchos tonos de negro), entonces podemos hacer lo siguiente:
$ convert -fuzz 10% -trim hamburgueson_borde.jpg hamburgueson_nuevo.jpg
Con esto damos una tolerancia de un 10% al color, es decir, si se parecen los tonos de negro en menos de un 10% serán considerados iguales.
También podemos añadir un biselado como el del ejemplo de la siguiente manera:
$ convert -mattecolor red -frame 20×20+10+10 hamburgueson.jpg hamburgueson_rojo.jpg
Filtros y efectos
Por si fuera poco, podemos aplicar los filtros típicos a las imágenes como blur, motion-blur, blur gaussiano (gaussian-blur), ruido (noise), carboncillo (charcoal).
En el ejemplo, se ha añadido motion-blur de la siguiente forma:
$ convert -motion-blur 10×40+10+0 hamburgueson.jpg hamburgueson_movido.jpg
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /
Pingback: Poesía binaria » Jugando con ImageMagick (II): Color y rotación /
Pingback: Poesía binaria » Jugando con ImageMagick (III): Colecciones, texto, y unión de efectos /
Pingback: Poesía binaria » Jugando con ImageMagick (IV): Automatizando procesos, creando animaciones /
Pingback: Poesía binaria » Vídeo digital: Secuencias de imágenes /
Pingback: ¡Qué rico! « Mi visión del mundo /
Pingback: Agregar marcas de agua masivamente » @lucasm86 /
Pingback: Leer y procesar imágenes en C gracias a ImageMagick y su API MagickCore | Poesía Binaria /
Excelente artículo! Es lo que buscaba! Gracias por compartir.
Pingback: Píldora: 10 maneras de tomar una captura de pantalla en GNU/Linux – Poesía Binaria /