Crear un lienzo uniendo colores vertical y horizontalmente con ImageMagick

Con ImageMagick podemos crear lienzos de colores uniformes, con degradados, uniendo franjas… pero cuando queremos unir lienzos horizontalmente y luego verticalmente con append a veces resulta un poco lioso. Hasta que descubres el truco, que es de lo que voy a hablar en este artículo.

Vamos a intentar hacer un lienzo uniendo cuatro lienzos más pequeños: uno rojo, otro verde, otro azul y otro negro. Vamos a intentar (para ver cómo lo que aparentemente intuitivo da error) crear dos lienzos, unirlos verticalmente con +append, otros dos lienzos, volver a unirlos verticalmente y luego unir horizontalmente los dos lienzos:

convert -size 200x200 xc:red xc:green +append xc:blue xc:black +append -append prueba_cuadros.jpg

El problema es que no crea el resultado deseado sino que une horizontalmente todos los lienzos:

convert -size 200x200 xc:red xc:green +append xc:blue xc:black +append -append prueba_cuadros.jpg

Como de esa manera no podemos unir los cuatro lienzos en filas de dos en dos, lo que podemos hacer es crear individualmente las dos filas y luego unirlas:

convert -size 200x200 xc:red xc:green +append fila_superior.jpg
convert -size 200x200 xc:blue xc:black +append fila_inferior.jpg
convert fila_superior.jpg fila_inferior.jpg -append cuatro_cuadros.jpg

El resultado final será el resultado esperado:

convert fila_superior.jpg fila_inferior.jpg -append cuatro_cuadros.jpg

Pero nos encontramos con varias cuestiones que son mejorables:

  • Hemos necesitado tres instrucciones en lugar de una.
  • Ha generado dos imágenes que deberíamos borrar:

convert -size 200x200 xc:red xc:green +append fila_superior.jpg

Y:

convert -size 200x200 xc:blue xc:black +append fila_inferior.jpg

Así que vamos a mejorar la instrucción. Para ello agruparemos cada una de las filas entre paréntesis. Y el resultado de ambas filas lo unimos con -append. Pero hemos de escapar los paréntesis, si no, nos dará un error como este:

$ convert -size 200x200 (xc:red xc:green +append) (xc:blue xc:black +append) -append cuadros.jpg
bash: error sintáctico cerca del elemento inesperado `('

Así que tenemos que escapar cada uno de los paréntesis que vayamos a usar:

convert -size 200x200 \( xc:red xc:green +append \) \( xc:blue xc:black +append \) -append cuadros.jpg

convert -size 200x200 \( xc:red xc:green +append \) \( xc:blue xc:black +append \) -append cuadros.jpg
Y así, ya tenemos una imagen formada por distintos lienzos unidos horizontal y verticalmente.

Hemos visto una imagen formada por cuatro cuadros iguales. Pero podemos hacer que cada lienzo sea de un tamaño distinto. Para ello, sólo tenemos que definir un bloque de -size y xc: por cada lienzo, manteniendo entre paréntesis cada una de las filas:

convert \( -size 266x222 xc:red -size 267x222 xc:green -size 266x222 xc:blue +append \) \( -size 400x223 xc:white -size 400x223 xc:black +append \) -append cinco_colores.jpg

convert \( -size 266x222 xc:red -size 267x222 xc:green -size 266x222 xc:blue +append \) \( -size 400x223 xc:white -size 400x223 xc:black +append \) -append cinco_colores.jpg

Un comentario en «Crear un lienzo uniendo colores vertical y horizontalmente con ImageMagick»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.