Cómo crear mosaicos de imágenes con ImageMagick (y II)

Por petición popular, aquí viene el pequeño añadido sobre el tutorial del otro día en el que explicaba cómo crear mosaicos de imágenes empleando para ello ImageMagick.

Voy a partir de las cuatro figuras que utilicé anteriormente, pero en sus versiones recortadas, pero en formato .tif (ejemplo-im-{1,2,3,4}-cropped.tif), porque el .png y la adición de texto se llevan ligeramente a hostias, al menos con mis ejemplos. Voy a hacer un mosaico de 2×2, como en el tutorial anterior, pero ahora voy a añadir unos pequeños rótulos que indiquen filas y columnas.

La gracia aquí reside en que no sirve unir las imágenes como la otra vez, formando directamente el patrón de 2×2 (o igual sí, pero yo tengo otro método que creo que da mejor resultado y hay que andar haciendo menos cálculos). Lo que hay que hacer es crear primero dos columnas de imágenes (de 2 imágenes cada columna), poner el texto en esas columnas y luego juntarlas horizontalmente. Primero, a ver cómo es eso de añadir un texto:

convert -gravity South -font "Times-Roman" -pointsize 36 -annotate 0 'Imagen 1' ejemplo-im-1-cropped.tif ejemplo-im-1-cropped-annotated.tif

-gravity South indica que queremos que las letras aparezcan bajo la imagen, -font "Times-Roman" -pointsize 36" indica la tipografía y el tamaño de letra, y -annotate 0 'Imagen1' indica que queremos que se imprima el texto Imagen1 sin ningún tipo de desplazamiento o rotación.

Y obtenemos justamente esto:

Oooops.

Oh, la mierda. Resulta que el texto se pone debajo de la imagen, pero se va a por uvas. No sé por qué ocurre esto: pasa solamente con mis imágenes originales, pero no con lo que voy a ir generando a partir de ellas. Necesita un pequeño desplazamiento:

Oooops (2)

Mejor, pero tampoco es lo que queríamos: en realidad lo que necesitamos es que se añada una pequeña franja blanca bajo la imagen y el texto quede ahí. Esto se puede hacer con el argumento -splice.

convert -gravity South -font "Times-Roman" -pointsize 36 -splice 0x50 -annotate +0+70 'Imagen 1' ejemplo-im-1-cropped.tif ejemplo-im-1-cropped-annotated.tif

Mejor.

Ok, pero tampoco queremos esto. En realidad, queremos juntar dos imágenes (la 1 y la 3 por un lado, formando una columna, y la 2 y la 4 por otro) y etiquetar esas columnas. Bien, no tiene mucha complicación (y ahora el texto sí se comporta como se supone que se tiene que comportar, sin tener que andar toreando los desplazamientos):

montage -geometry +0+3 -tile 1x ejemplo-im-1-cropped.tif ejemplo-im-3-cropped.tif col1.tif

convert -gravity South -font "Times-Roman" -pointsize 36 -splice 0x40 -annotate 0 'Col1' col1.tif col1_annotated.tif

Efectivamente:

De forma análoga, genero la segunda columna y puedo montarme un mosaico preliminar con lo que ya expliqué el otro día. Es importante notar que -gravity South se encarga de centrar el texto, por eso es útil hacerlo de esta forma.

Ya solamente queda etiquetar las filas de la siguiente manera:

convert -gravity NorthWest -font "Times-Roman" -pointsize 36 -splice 100x0 -annotate +0+125 'Row1' -annotate +0+378 'Row2' completo_salvo_filas.tif completo.tif

¿Por qué annotate +0+125 y annotate +0+378? Porque queremos que el texto quede alineado con la parte central de cada fila. Las imágenes son de 250×250, luego la parte central de la primera fila, teniendo en cuenta que vamos a empezar a escribir desde la parte superior izquierda (-gravity NorthWest), quedará 125 píxeles por debajo, y la segunda a 125 + 250 + 3 (por los 3 píxeles que he estado dejando entre las imágenes del mosaico) = 378. Por si alguien se lo está preguntando: sí, se puede rotar el texto.

Sí, puede parecer enrevesado, pero digo lo del otro día: cuando hay que hacer varias operaciones de este tipo, poder automatizar el proceso es esencial.

DeliciousTumblrTuentiShare
Esta entrada fue publicada en Ciencia, Geek World. Guarda el enlace permanente.

Los comentarios están cerrados.