NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO

ImageMagick: Manual en español.

[Un paseo por ImageMagick]


IV.- Imágenes Compuestas






Tiras y Mosaicos de imágenes





VI-1.-Crear tiras de imágenes: [-append] [+append]

Mediante esta opción podremos generar un output que sea una "tira" de imágenes, vertical u horizontal, formada por la unión de las imágenes definidas como inputs.

convert -append input1 input2....inputn output

Con la anterior orden crearíamos una imagen, output que contendria las imágenes de los inputs definidos en la orden, dispuestas verticalnemte y en el mismo orden en que se definieron en la linea de comandos.

Si utilizáramos +append, la disposición de las imágenes en el output seria horizontal.

En la misma línea de comandos en la que creemos las tiras de imágenes, pueden incluirse opciones tales como [-border] y [-bordercolor], destinadas a crear bordes ; [-background] y [-texture], que nos crearan un fondo; [-frame] y [-mattecolor], que nos enmarcarán las imágenes.... etc


Partimos de las siguientes imágenes, de izquierda a derecha:
input1.png, input2.png e input3.png

    

convert -append \
input1.png input2.png input3 png append-v.png

Ahora la misma orden , pero añadiendo un borde de 5px ,color a rojo,
alrededor de cada imagen y de la tira.

convert -append \
-border 5 -bordercolor red\
input1.png input2.png input3.png append-vx.png

   

Lo mismo con la opción [+append]

convert +append \
border 5 -bordercolor blue \
input1.png input2.png input3.png append-h.png






IV-2.-Mosaicos de imágenes: El comando [montage]

Con el comando [montage] podemos crear una imagen compuesta (mosaico de imágenes) a partir de un conjunto de imágenes individuales.

La sintaxis de este comando es casi idéntica a la del comando [convert]:

montage input1 input2 input3 ... inputn output

El output será una imagen-mosaico, formada por las imágenes del input, dispuestas en el mismo orden en que se escribieron en la orden del comando.

Con [montage] son posibles órdenes como las siguientes:

montage *.png output.jpg

montage *.* output.jpg

montage /home/images/*.png output.jpg


Para los siguientes ejemplos vamos a utilizar como inputs las siguientes imágenes:



00.png

01.png

02.png

03.png

04.png

05.png

06.png

07.png

08.png

09.png

Situados en el directorio que contiene las imágenes del input, con cualquiera de las siguientes órdenes obtendriamos el mismo resultado:

montage 00.png 01.png 02.png 03.png 04.png 05.png\ 06.png 07.png 08.png 09.png montage.png

montage *.png montage.png

montage *.* montage.png


montage.png


Podemos disminuir o eliminar el espacio en blanco que IM situa, por defecto, alrededor de las imágenes. Para ello se utilizará la opción [-geometry]:





IV-3.-La opción [-geometry] con el comando [montage]

Con esta opción determinamos el tamaño y la posición de una imagen. Las sintaxis básicas de esta opción son:

-geometry W

-geometry WxH{±}x{±}y

Para el significado de los argumentos ( W,H, ±x,±y ) véase [-crop]

Con el comando [montage] se utilizará en órdenes del tipo:

montage input1 input2 input2 -geometry +x+y output

[montage] interpretará los valores de x e y como la cantidad de espacio, en pixels, a dejar alrededor de cada imagen que compone el mosaico.

Mas adelante, al hablar del comando [composite] se podrá ver otro comportamiento de la opción [-geometry]


montage 01.png 02.png 03.png 04.png 05.png 06.png \
07.png 08.png 09.png -geometry +1+1 montage-x-y.png

Con la anterior orden cada imagen queda rodeada de un espacio de 1px.
(Obsérvese que entre dos imágenes contiguas el espacio será de 2 px: 1 px por imagen.)


montage-x-y.png

Podemos utilizar la opción [-geometry] sobre una sola imagen.
Consideremos que partimos de la imagen, a302.jpg, de 204x150 px.

montage a302.jpg -geometry 102x75+10+10 a302-m.jpg

Obtendremos la imagen a302-m.jpg de 102x75 px y con un espacio en blanco a su alrededor de 10 px.


a302.jpg

a302-m.jpg


OBSERVACION:Llegado este momento vamos introducir una notación shell característica de UNIX que nos resultará útil cuando tratemos con listas de imágenes.

Cuando operamos con un listado ordenado de imágenes, como es nuestro caso, podemos sustituir la notación:

montage 01.png 02.png 03.png 04.png 05.png output.jpg

por uno de las siguientes:

montage 0[12345].png output.jpg
montage 0[1-5].png output.jpg

El nombre del archivo se "expande" con cada uno de los caracteres que se encuentran entre los corchetes, o con todos los comprendidos en el intervalo, en el caso de la notación [x-y] del segundo ejemplo.A partir de ahora, cuando sea posible, va a utilizarse este tipo de notación.

Pensemos que IM no solo actua sobre imágenes concretas: TAMBIEN ACTUA SOBRE LISTAS ORDENADAS DE IMÁGENES.



Veamos algunos ejemplos más la opción [-geometry] y de la notación que se acaba de exponer:

montage 0[135].png -geometry 25x25+1+1 montage-geo-1.jpg


montage_geo_1.jpg

montage 0[0-4].png -geometry 25x25+1+1 montage-geo-2.jpg


montage_geo_2.jpg

montage 0[1-6].png -geometry 25x25+1+1 montage-geo-3.jpg


montage_geo_3.jpg

montage 0[1-9].png -geometry 25x25+1+1 montage-geo-4.jpg


montage_geo_4.jpg

montage 0[0-9].png -geometry 25x25+1+1 montage-geo-5.jpg


montage_geo_5.jpg

Con las anteriores órdenes hemos formado "mosaicos" de imágenes en los que cada "baldosa" mide 25x25 px.
El espacio en blanco alrededor de cada "balosa" es de 1px.
IM procura que la imagen final sea lo mas "cuadrada" posible y con los mínimos espacios en blanco.
Con la opción [-tile] tendremos un mayor control soble la disposición de las imágenes input en el output.





IV-4.- Número de filas y columnas del mosaico: [-tile]

Con el comando [montage] la opción [-tile] nos permite controlar la disposición de las imágenes en el "mosaico" final. Su sintaxis básica seria:

montage inputs -tile WxH output

donde:

Jugando con estos dos argumentos, podemos conseguir outputs sin espacios en blanco.... o con los espacios en blanco que deseemos.

Veamos unos ejemplos:


montage 0[1-7].png -tile -geometry 9x1 20x20+1+1 tile_9x1.png

Con 7 imágenes en el input hemos generado un output de 9 columnas y 1 fila( total:9 "baldosas"):
Nos quedan dos espacios ("baldosas") en blanco.


tile_9x1.png

montage 0[1-7].png -tile 4x3 -geometry 20x20+1+1 tile_4x3.png

Con 7 imágenes en el input hemos generado un output de 4 columnas y 3 filas (total:12 "baldosas"):
Nos quedan 5 espacios ("baldosas") en blanco.


tile_4x3.png

montage 0[1-7].png -tile 3x3 -geometry 20x20+1+1 tile_3x3.png

Con 7 imágenes en el input hemos generado un output de 3 columnas y 3 filas (total:9 "baldosas"):
Nos quedan 2 espacios ("baldosas") en blanco.


tile_4x3.png


Como hemos podido comprobar con los anteriores ejemplos, la opción [-tile] nos permite un mayor control sobre la disposición de los elementos en el output.

Hasta ahora hemos operado con unos argumentos de [-tile] que generaban en el output un número de celdas ("baldosas") superior al número de imágenes del input. Veamos que pasa cuando se dá el caso contrario: el número de imágenes del input es mayor que el número de celdas generado por los argumentos de [-tile]:


montage 0[0-9].png -tile 4x1 -geometry 20x20+1+1 tile_4x1.png


tile_4x1-0.png

tile_4x1-1.png

tile_4x1-2.png

montage 0[0-9].png -tile 2x2 -geometry 20x20+1+1 tile_2x2.png


tile_2x2-0.png

tile_2x2-1.png

tile_2x2-2.png

Como puede observarse, [montage] genera múltiples outputs, cada uno con las dimensiones especificadas en los argumentos de [-tyle]. Cada una de estas imágenes se nombra añadiendo un número al nombre especificado en el output de la linea de órdenes.

Puede resolverse el problema de los outputs múltiples y celdas en blanco, especialmente cuando se desconoce el número de inputs ( por ejemplo, en órdenes del tipo *.jpg ), sencillamente no especificando uno de los dos argumentos de [-tile], ya sea el número de columnas o el de filas. Veamos unos ejemplos.


montage 0[1-7].png -tile x1 -geometry 20x20+1+1 tile_x1.png


tile_x1.png

montage 0[1-7].png -tile x2 -geometry 20x20+1+1 tile_x2.png


tile_x2.png
montage 0[1-7].png -tile x4 -geometry 20x20+1+1 tile_x4.png

tile_x4.png

montage 0[1-7].png -tile 4x -geometry 20x20+1+1 tile_4x.png


tile_4x.png

montage 0[1-7].png -tile 5x -geometry 20x20+1+1 tile_5x.png


tile_5x.png

montage 0[1-7].png -tile 9x -geometry 20x20+1+1 tile_9x.png


tile_9x.png




IV-5.-Dejando espacios vacios con [montage]: El operador [null:]

A la hora de realizar ciertos mosaicos con imágenes, puede interesarnos dejar determinadas celdas vacias. Ello implica la utilización de imágenes especiales... "sin contenido", por llamarlas de algún modo. El operador [null:] nos generará imágenes especialmente destinadas a este propósito.

El operador [null:] se trata también en [Formatos Especiales de Archivo]

Debemos advertir que los "huecos" generados por [null:] no aceptarán etiquetas, marcos, sombreados etc. Solo les afectará el color de fondo o textura que podamos asignar al mosaico.

La linea de comandos, con uno o varios operadores [null:], será del siguiente tipo:

montage input1 input2 null: input3 null: uotput

Cada operador [null:] dará lugar a una "baldosa" vacia.

Veamos unos ejemplos:


montage 00.png 01.png null: 02.png 03.png \
-tile x1 -geometry 30x30+2+2 null.png


null.png
montage 00.png 01.png null: 02.png 03.png null: \
04.png 05.png -tile 2x4 -geometry 30x30+2+2 null_b.png

null_b.png

Como puede observarse, [null:] se comporta como un input más.





IV-6.- Clonar imágenes : La opción [-clone] [+clone]

Con esta opción podemos hacer una cópia de una o varias imágenes, en una secuencia de imágenes.

Como se verá tambien más adelante, la forma [+clone] puede utilizarse para la clonación de imágenes individuales (no pertenecientes a una secuencia).

Comenzemos por la forma "ordinaria" [-clone]:

-clone indice

[-clone] debe usarse solo entre paréntesis.

La imagen (o imágenes) a clonar se especificarán por su número de índice, de acuerdo con lo explicado en [Operaciones con secuencias de imágenes]

Para especificar un rango se especificarán los índices de la primera y última imagen del mismo, separados por un guió.(p.e: 7-12 )

Cuando se quieran clonar varias imágenes se especificarán sus índices, separados por una coma (¡NO ESPACIOS!) : p.e : 2,5,7,9


convert 0[0-2].png \( -clone 1,2 \) +append clone.png

convert 0[0-4].png \( -clone 1-3 \) +append clone_bis.png


clone.png

clone_bis.png


[+clone]

La forma [+clone], utilizada en secuencias de imágenes, hará una copia de la última imagen de la secuencia.

Puede utilizarse también para la clonación de imágenes no pertenecientes a una secuencia (imágenes individuales). Veamos unos ejemplos:


Observemos las siguientes líneas de órdenes y sus resultados:

convert grun.jpg +clone +clone +append clon_plus0.png

Se ha clonado dos veces la imagen del input y se ha procedido a generar una tira horizontal con [+append], que contendrá tres imágenes: el input más sus dos clones.

Como ha podido apreciarse, no se han utilizado paréntesis.

La utilización de paréntesis nos permitirá realizar modificaciones sobre cada una de las imágenes clonadas, de forma individiual. Veámoslo con la siguiente línea de órdenes:

convert grun.jpg \(+clone -paint 3 -bordercolor red -border 5 +clone \) clon_plus1.png

Como podemos observar, al primer "clon" se le ha aplicado la opción [-paint] y se le ha creado un borde de 5 pixels de color rojo.





Composición Alfa de imágenes

La Composición Alfa es el proceso de fusionar dos o más imágenes, utilizando determinados métodos.

Los métodos utilizados nos determinarán el tipo de imagen resultante y si esta será o no transparente.

La Composición Alfa puede utilizarse, directamente o indirectamente, como parte de un proceso.

La via "normal" de realizar esta composición es mediante el comando [composite], pero pueden obtenerse resultados similares mediante el comando [convert] con las opciones [-compose] y [-composite], lo que nos dá una mayor flexibilidad a la hora de incorporar la Composición Alfa en procesos de manipulación de imágenes.

Cuando se habla de Composición Alfa se denomina Imagen Fuente a la imagen que deseamos superponer e Imagen Destino a la imagen sobre la que se realizará la superposición.

Es importante señalar que la imagen resultante tomará la información y el tamaño de la Imagen Destino





IV-7.-Superponer imágenes: El comando [composite]

Este comando nos permite superponer una imagen a otra.

La sintaxis de este comando es:

composite inputfuente inputdestino output

Donde:

Es importante mantener el orden de las imágenes descrito en la sintaxis ya que la imagen que soporta la superposición (inputdestino) será la que determine las dimensiones de la imagen resultante (output).

Para mostrar como actua este comando partimos de dos imágenes:

  • muestra.png: (75x50 px, fondo transparente)
  • parquet.png: (150x150px)

muestra.png

parquet.png

Si deseamos superponer muestra.png a parquet.png la orden seria:

composite muestra.png parquet.png muestra_parquet.jpg


muestraparquet.jpg

Como puede apreciarse en el anterior ejemplo, la imagen se superpone en el ángulo superior izquierdo de la imagen receptora.

También podemos observar como se ha respetado el canal alfa (transparencia) de la imagen muestra.png.

Con [composite] podemos usar la opción [-alpha] para controlar el canal alfa de las imágenes:


Veamos el resultado de realizar la superposición desactivando el canal alfa muestra.png (eliminamos la transparencia)

composite -alpha Off muestra.png parquet.png muestra_parquet-alfa.jpg





IV-8.-Posicionar la imagen fuente: La opción [-gravity]

Esta opción nos permite emplazar la imagen que se superpone en el lugar que le indiquemos de la imagen receptora.

La sintaxis para esta opción seria:

composite -gravity argumento inputfuente inputdestino output

Los argumentos posibles de [-gravity] son:



Con la orden: convert -list gravity obtendremos un listado de los argumentos de [-gravity]


Veamos como actuan los citados argumentos a partir de dos imágenes:


punto.png

base.png

None:

composite -gravity None punto.png base.png none.png

¿Cual es la diferencia entre None y NorthWest? :-)

Center:

composite -gravity Center punto.png base.png center.png

East:

composite -gravity East punto.png base.png east.png

NorthEast:

composite -gravity NorthEast punto.png base.png northeast.png

North:

composite -gravity North punto.png base.png north.png

NorthWest:

composite -gravity NorthWest punto.png base.png northwest.png

SouthEast:

composite -gravity SouthEast punto.png base.png southeast.png

South:

composite -gravity South punto.png base.png south.png

SouthWest:

composite -gravity SouthWest punto.png base.png southwest.png

West:

composite -gravity West punto.png base.png west.png

Static:

composite -gravity Static punto.png base.png static.png





IV-9.-La opción [-geometry] con el comando [composite]

Con la opción [-gravity] hemos visto una forma de emplazar la imagen fuente sobre la imagen destino. Hay otra forma algo más precisa de hacerlo: mediante la opción [-geometry], que se trató ya en el ámbito del comando [montage]. Vamos a ver aquí su uso con el comando [composite].

composite -geometry WxH±x±y inputfuente inputdestino output

El argumento WxH nos determinará las dimensiones (en pixels) de la imagen fuente (W=achura; H=altura).

Cuando no se use este argumento (-geometry ±x±y), la imagen fuente mantendrá su tamaño original.

El argumento ±x±y nos determinará la posición de la imagen fuente en la imagen destino. (Las referencias al eje X y al eje Y se tomarán según lo explicado en la opción [-crop])

Veamos unos ejemplos, partiendo de las dos imágenes utilizadas en [-gravity]:

composite punto.png -geometry +10+25 base.png geo-1.png

composite punto.png -geometry 40x40+5+5 base.png geo-2.png





IV-10.-La opción [-tile] con el comando [composite]

Mas adelante, al tratar del comando [montage] se verá la que tal vez sea la principal acción de la opción [-tile]. Aquí vamos a ver la utilización de esta opción con el comando [composite].

Con el comando [composite], la opción [-tile] repite la opción composite hasta cubrir toda la imagen receptora. Literalmente: la "embaldosa" con la imagen que se superpone.


composite -tile muestra.png parquet.png compo-tile.png





IV-11.-Disolver una imagen en otra:[-dissolve]

Provoca la "disolución" de una imagen en otra, de acuerdo con un porcentaje dado.

composite -dissolve n% inputfuente inputdestino output

La opacidad de la imagen inputfuente toma el valor establecido en n% y entonces, es superpuesta a inputdestino


A partir de las imágenes rojo.png y barras.png:

composite -dissolve n% rojo.png barras.png n.png

Veamos los resultado para valores de n% =  10% ;  20% ;  40%;  60% ;  80% ;  100%:


rojo.png

n=10%

n=40%

n=80%

barras.png

n=20%

n=60%

n=100%




IV-12.-Combinar dos imágenes con: [-blend]

La opción [-blend] nos permite hacer aquello que pretendia hacer la opción [-dissolve]: No se limita a superponer una imagen sobre otra, si no que trata a ambas imágenes por igual, combinándolas de acuerdo con un porcentaje dado. La sintaxis básica de esta opción es:

composite -blend n inputfuente inputdestino output

composite -blend nf x nd inputfuente inputdestino output

Esta opción opera solo con el comando [composite].

Cuando se utiliza un solo porcentaje (el caso de a primera sintaxis) dicho valor se considerará como el porcentaje de disolución de la imagen fuente, mientras que la imagen destino será disuelta en un porcentaje igual a 100-n. Así, la orden -blend 40 disolverá la imagen fuente en un 40% y la imagen destino en un 60%.


Veamos el comportamiento de esta opción para distintos valores del argumento en la siguiente línea de órdenes y a partir de las dos imágenes inputfuente e inputdestino

composite -blend argumento -gravity south inputfuente inputdestino -alpha set output

(Es una buena idea activar un canal alfa después de que se haya aplicado [-blend] para combinar las imágenes.)

Como puede observarse, este seria un buen método para ir sustituyendo lentamente una imagen en otra. De hecho, utilizando un liezo negro podria conseguirse una secuencia en la que una imagen se va, lentamente, disolviendo en otra.

Podemos considerar los siguientes argumentos de esta opción como "argumentos especiales":

  • 0x0 : Ambas imágenes se disuelven en una transparencia completa. Equivalente al método [Clear] de la opción [-compose]
     
  • 0: Deja inalterada al imagen destino. Equivalente al método [Dst] de la opción [-compose]
     
  • 100: La imagen fuente en un lienzo negro. Equivalente al método [Src] de la opción [-compose]
     
  • 100x100: Se combinan las dos imágenes. Equivalente al método [Plus] de la opción [-compose]
     
  • 50: Promedia las dos imágenes. Es equivalente a la opción [-average], pero con solo dos imágenes.

Uso de [-blend] en la modificación de una sola imagen.

La opción [-blend] puede utilizarse para cosas distintas de la combinación de dos imágenes; puede usarse también para realizar determinadas modificaciones en una sola imagen (modificar el brillo, la saturación, el contraste, colorearla....etc.). Veamos unos ejemplos de ello:


Podemos hacer que una imagen fuente se vuelva más brillante u oscura combinándola con un lienzo (imagen destino) de su mismo tamaño, completamente negro :

composite -blend argumento rose.png -size 70x46 xc:black -alpha on output

Veamos el resultado para distintos valores de argumento:

Si como imagen destino usamos un lienzo color gris puro ( #808080), podremos ajustar el contraste:

composite -blend argumento rose.png -size 70x46 xc:'#808080' -alpha on output

Si como imagen destino utilizamos una imagen desenfocada (rose_blur.png) y como imagen fuente, la misma imagen enfocada......

composite -blend argumento rose.png rose_blur.png -alpha on output

(Hemos creado la imagen desenfocada mediante la orden : convert rose.png -blur 0x5 rose_blur.png)

También podmos utilizar la opción [-blend] para controlar la transparencia de una imagen. Se realizará asignando un porcentaje de disolución diferente para cada imagen de modo que la suma de ambos porcentajes sea menor de 100, lo que es igual a la adición de transparencia.

De hecho, es como si se combinara una imagen destino con una imagen fuente completamente transparente (por ejemplo, generada utilizando el operador [null:]) .

composite -blend nf x nd rose.png rose.png -alpha on output

composite -blend nf x nd null: rose.png -alpha on output

El hecho de que la opción [-blend] opere solo con el comando [composite], puede limitar su utilidad en este tipo de transformaciones.





IV-13.-Inclusión de marcas de agua: [-watermark]

Con esta opción podemos incluir marcas de agua en una imagen, controlando su brillo.

composite -watermark n% inputfuente inputdestino output

El brillo de la marca de agua que se incluirá (inputfuente) podrá controlarse con el argumento n%, como porcentaje, de manera similar como se controlaba la opacidad en [-dissolve].

Podemos controlar el emplazamiento de la marca de agua mediante la opción [-gravity]. De no hacerse, se situará en el extremo superior-izquierdo (NorthWest).


Vamos a incluir la marca de agua marca.png en la imagen llac.jpg:

composite -watermark n% -gravity SouthWest marca.png llac.jpg llac_wm.png

Utilizamos la opción [-gravity] para emplazar la marca en el extremo inferior-izquierdo.

Veamos los resultados para n% =  20%;  40% y  80%


marca.png

llac.jpg

n%=20%

n%=40%

n%=80%




IV-14.-Composición Alfa con el comando [convert] : La opción [-composite]

La opción [-composite] es la via más directa de realizar una Composición Alfa mediante el comando [convert]. La sintaxis básica seria del tipo:.

convert imagendestino imagenfuente -geometry WxH±x±y -composite output

Obsérvese que cuando se hace una composición con el comando [convert], la secuencia de imágenes difiere de la del comando [composite]: Aquí la imagen destino precede a la imagen fuente.

Con la opción [-geometry], no solo determinamos la posición de la imagenfuente, ( mediante los parámetros ±x±y); sino que también establecemos el tamaño de la última imagen (su inmediata anterior) de la secuencia, mediante los parámetros WxH


Para los siguientes ejemplos vamos a utilizar las siguientes imágenes ( entre paréntesis, sus demensiones en pixels):

  • blue.png (150x150)
  • red.png (50x50)
  • green.png (50x50)
  • yellow.png (50x50)

convert blue.png red.png -geometry +25+25 -composite composite_0.png

convert blue.png red.png -geometry +25+25 -composite \
green.png -geometry +50+50 -composite\
composite_1.png

convert blue.png red.png -geometry 25x25+25+25 -composite \
green.png -geometry +75+0 -composite\
yellow.png -geometry 75x75+30+50 -composite \
composite_2.png

Podemos ver como con la opción [-geometry], además de determinar la posición, podemos redimensionar la imagen ( caso de red.png y de yellow.png


Una importante función de [-composite] será la de implementar [-geometry], cuando la opción [-compose] se utilize con el comando [-convert]. Seguidamente lo vamos a ver.





IV-15.-Posicionamiento de imágenes en un lienzo virtual: [-page]

-page WxH±x±y

-page media±x±y

+page

Mediante esta opción podemos determinar el tamaño y la posición de una imagen en un lienzo virtual.

Aquí veremos la utilización de [-page] en la composición de imágenes sobre un lienzo.

Para ver el funcionamiento de esta opción, ver [-flatten].

Con [+page] eliminaremos los ajustes de [-page] para una imagen

El tamaño de la página, WxH, puede sustituirse por media, que puede adoptar los valores ( con sus dimensiones correspondiente) relacionados es [ESTA TABLA]

Así, -page A4+8+3 equivaldria a -page 595x842+8+3

Para el significado de ±x±y, ver [-crop]. Por defecto su valor es +0+0





IV-16.-Ajuste de la información del lienzo y el offset de una imagen : [-repage] [+repage]

-repage WxH±x±y

+repage

Esta opción es similar a [-page], con la única diferencia de que, mientras que [-page] actua como un ajuste de imagen, [-repage] lo hace como una opción operativa.

Sin el argumento del tamaño de página (o con 0x0) , se fuerza al recálculo del lienzo, por lo que la imagen lo ocupará completamente.

[+repage] elimina completamente el meta-dato "lienzo virtual" de la imagen.

-layers mosaic : [-mosaic]

Esta opción es un "alias" del método mosaic de la opción [-layers]

Actua como [-flatten], pero expandiendo el lienzo inicial de la primera imagen hasta comprender todas las imágenes.





IV-17.-Composición de imágenes con la opción [-flatten]

[-flatten] es una opción que opera sobre listas de imágenes.

Con esta opción, a partir de un conjunto dado de imágenes, compondremos una imagen única mediante un proceso se Composición Alfa.

Las posiciones de las imágenes se determinará usando la opción [-page] (lienzo virtual).

Veamos, através de unos ejemplos, como funciona esta opción:


Una sintaxis típica para esta opción podria ser:

convert -page 150x150+0+0 00.png \
-page +50+50 01.png -page +100+100 02.png\
-flatten flatten.png

Con la primera opción [-page] se crea un lienzo virtual de 150x150 pixels y se posiciona la primera imagen (00.png) en +0+0.

Con las siguientes opciones [-page] se van posicionando las distintas imágenes sobre el lienzo creado.

Debemos destacar que la primera imagen de la secuencia será siempre la base sobre la que se posicionarán las siguientes.

Para ver mejor el funcionamiento "en crudo" de [-flatten], vamos a utilizar dos imágenes de distintas dimensiones: macba.png de 119x150 px y grn.png de 100x72 px.

Observemos el resultado de las siguientes órdenes:

convert grun.jpg macba.png -flatten gm.png

La imagen grun.jpg, de 100x72 px, es el lienzo sobre la que "coloca" macba.png, de 119x150 px.

Como consecuencia,macba.png, además de cubrir completamente grun.jpg, queda recortado a las dimensiones de esta última.

convert macba.png grun.jpg -flatten mg.png

En este caso las dimensiones del lienzo las determina macba.png.

Al no especificarse una localización mediante la opción [-page], la segunda imagen se localizará en el extremo superior izquierdo del lienzo.

convert -page 250x200+125+100 grun.jpg \
-page +0+0 macba.png -backgroud blue\
-flatten pgm.png

Aquí hemos creado un lienzo y posicionado en el la primera imagen, con la segunda opción [-page] posicionamos la segunda imagen en el lienzo creado.

IM asigna un color de fondo por defecto. En esta última línea de órdenes lo hemos personalizado con la opción [-bacground]

Podemos crear también un lienzo, mediante la opción [-size], sobre el cual posicionar las imágenes :

convert -size 150x150 xc:green \
-page +0+0 00.png -page +50+50 01.png \
-page +100+100 02.png -flatten flatten-size.png

Una de las mas interesantes utilidades de la opción [-flatten] es la de "convertir" un fondo transparente en un fondo de color:

convert abcd-.png -background Lime \
-flatten abcd-lime.png





IV-18.-Determinar un método específico de composición: La opción [-compose]

Mediante esta opción podemos determinar un método específico de composición.

Puede utilizarse con el comando [composite] o con el comando [convert] y la opción [-composite]

Utilizada con el comando [composite], su sintaxis seria:

composite inputfuente -compose metodo inputdestino output

Cuando se utilice con el comando [convert], se utilizará con la opción [-composite] de acuerdo con la siguiente sintaxis:

convert -compose metodo inputdestino inputfuente -composite output

Podemos ver como la imagen destino precede a la imagen fuente.

Para el posicionamiento de la imagen fuente pueden utilizarse las opciones [-gravity] y/o [-geometry]

composite -compose metodo inputfuente inputdestino \
{-gravity argumento} {-geometry WxH±x±y} output

convert -compose metodo inputdestino inputfuente \
{-gravity argumento} {-geometry WxH±x±y} -composite output

Recordemos que si utilizamos el parámetro WxH de la opción [-geometry], variará el tamaño de la última imagen de la secuencia en curso: inputdestino en el caso de una linea de órdenes con el comando [-composite] e inputfuente en el caso de una línea de órdenes con el comando [convert]

Mediante la orden convert -list compose podremos obtener una lista de los métodos disponibles.

Vamos a considerar los siguientes métodos:

Métodos Duff-Porter
  •  [Over] 
  •  [Dst_Over] 
  •  [Src] 
  •  [Copy] 
  •  [Dst] 
  •  [Dst_In] 
  •  [Dst_Out] 
  •  [ATop] 
  •  [Clear] 
  •  [Xor] 
Métodos Matemáticos.
  •  [Multiply] 
  •  [Screen] 
  •  [Bumpmap] 
  •  [Divide] 
  •  [Plus] 
  •  [Add] 
  •  [Minus] 
  •  [Subtract] 
  •  [Difference] 
  •  [Exclusion] 
Métodos de Manipulación del Color
  •  [Overlay] 
  •  [Hard_Light] 
  •  [Soft_Light] 
  •  [Lighten] 
  •  [Darken] 
  •  [Color_Dodge] 
Métodos de Cópia de Canales.
  •  [Copy_Opacity] 
  •  [Copy_Red /_Green / _Blue] 
  •  [Copy_Cyan / _Magenta / _Yellow] 
  •  [Copy_Black] 
  •  [Hue] 
  •  [Saturate] 
  •  [Luminize] 
  •  [Colorize] 
Métodos Especiales.
  •  [Change_Mask] 



Métodos Duff-Porter


Over

-compose Over

Es el método por defecto. Superpone la imagen fuente sobre la imagen destino.

Si no utilizamos las opciones [-geometry] y/o [-gravity] la imagen fuente se superpondrá en el extremo superior-izquierdo de la imagen destino.


Vamos a utilizar las siguientes imágenes:

  • A_white.png ; (37x38 pixels) como imagen fuente.
  • rose.png ;(70x46 pixels) como imagen destino.

Las dos siguientes órdenes darán el mismo resultado:

composite -compose over A_white.png rose.png output.png

convert -compose over rose.png A_white.png -composite output.png

Al ser [Over] el método de composición por defecto, es el que se aplicaria en la siguiente orden, obteniéndose el mismo resultado que con las dos anteriores:

convert rose.png A_white.png -composite output.png

Observemos que el orden de las imágenes fuente y destino es distinto cuando se utiliza el comando [-composite] que cuando se utiliza el comando [convert]

Aplicando ahora alguna las opciones de localización:

composite -gravity center A_white.png rose.png output_1.png

convert -geometry +5+15 center A_white.png rose.png -composite output_2.png

No hemos implementado la opción -compose Over...... ya que al ser el método de composición por defecto, obtenemos el mismo resultado con o sin ella.




Dst_Over

-compose Dst_Over

Coloca la imagen fuente DEBAJO de la imagen destino..... o lo que es lo mismo, la imagen destino (Dst) queda sobre (Over) la imagen fuente :-)

Debemos adelantar que para cada método Dst_* existe su correspondiente Src_*. Así, el método Src_Over nos colocaria la imagen fuente (Src) ENCIMA de la imagen destino.


composite -compose Dst_Over - geometry +5+5 A_black.png A_white.png output.png

convert -compose Dst_Over A_white.png A_black.png -geometry +5+5 -composite output.png




Src

-compose Src

este operador reemplaza completamente la imagen destino por la imagen fuente. La transparencia y los colores de la imagen destino se eliminan completamente, dejando una imagen negra del mismo tamaño que la imagen destino, soble la cual se situará la imagen fuente.


composite -compose Src A_white.png rose.png output.png

convert -compose Src rose.png A_white.png -composite output.png




Copy

-compose Copy

Actua como el método Src, pero no elimina las partes de la imagen destino que se encuentran fuera del área de la imagen superpuesta (imagen fuente).


composite -compose Copy A_white.png rose.png output.png

convert -compose Copy rose.png A_white.png -composite output.png


Vistas las acciones de los métodos Src y Copy, cabria preguntarse por su utilidad. Bueno, pues son una via de recortar imágenes, con el mismo resultado que si usáramos la opción [-crop]. Veamos unos ejemplos:


Supongamos que tenemos una imagen, fondo.png, de 150x150 pixels y necesitáramos una porción de ella de las dimendiones de la imagen rose.png (70x46 pixels). Podríamos usar la opción [-crop], para recortar la porción deseada o ejecutar la orden:

composite -compose src fons.png rose.png src_1.png

Con las opciones [-gravity] o [-geometry] podriamos elegir la región del recorte.

composite -compose src -gravity southwest fons.png rose.png src_2.png

Debemos hacer notar que lo que hemos hecho con estas órdenes es un recorte, no un redimensionamiento.

Con el método Copy obtendríamos resultados similares, pero de recorte de porciones de la imagen destino, permaneciendo el resto de esta intacto.

convert -compose Copy fons.png -size 150x100 xc:none -geometry +0+0 -composite cpy_0.png

Con la anterior orden como imagen fuente usamos la imagen transparente generada por -size 150x100 xc:none. (Véase: El operador [xc:])




Dst

-compose Dst

Este método, sencillamente, no hace nada. La imagen fuente es completamente ignorada y la imagen destino se deja tal como estaba, sin modificación alguna.

De hecho, este operador se utiliza para desactivar la composición. Es una especie de "turn-off".




Dst_In

-compose Dst_In

Con este método enmascaramos la imagen detino con la imagen fuente. Viene a ser lo mismo que utilizar la imagen fuente como una máscara del operador [Copt_Opacity], pero con la diferencia que con [Dst_In] no pueden utilizarse imágenes fuente en escala de grises, solo imágenes que tengan un canal alfa..


Observemos la siguiente línea de órdenes:

composite -compose Dst_In -gravity center A_white.png rose.png output_1.png

Obsérvese la diferencia con el método [Over]

Si en la anterior linea de órdenes introdujéramos la opción [-alpha], podemos utilizar la imagen "A" como una máscara para recortar su silueta de la imagen destino:

composite -compose Dst_In -gravity center A_white.png rose.png -alpha set output_2.png




Dst_Out

-compose Dst_Out

Mediante este método "recortamos", de la imagen destino, la imagen fuente.


composite -compose Dst_Out A_white.png rose.png output_0.png

Vemos como la imagen output_0.png es el resultado de "recortar" la silueta de la imagen fuente en la imagen destino.El fondo del recorte completamente opaco.

Introduciendo la opción [-alpha] en la anterior línea de órdenes obtenemos un "recorte", output_1.png con fondo transparente:

composite -compose Dst_Out A_white.png rose.png -alpha set output_1.png




ATop

-compose ATop

Este método, utilizado con imágenes destino completamente opacas da el mismo resultado que el método [Over]. En cambio, cuando la imagen destino es transparente o semitransparente, la imagen fuente queda recortada por los límites de la imagen destino. En otras palabras, la superposición de la imagen fuente queda limitada por los límites de la imagen destino.


Para ver el funcionamiento de este método utilizaremos dos imáges de 70x70 pixels con fondo transparente: atp_s.png como imagen fuente y atp_d.png como imagen destino.

composite -compose ATop -geometry -13-17 atp_s.png atp_d.png output.png

este método de composición se utiliza para crear efectosd e luz-sombra.




Clear

-compose Clear

Este método elimina la imagen destino e ignora la imagen fuente. Si se tiene desactivado el canal alfa obtendremos una imagen completamente opaca de las dimensiones de la imagen destino. Con el canal alfa activo el output será transparente.


composite -compose Clear A_white.png rose.png output.png

Este es un método usado para crear lienzos transparentes o negros cuyo tamaño deba coincidir con el de una determinada imagen (que se usará como imagen destino)




Xor

-compose Xor

Este es un método "extraño" : lo que hace es superponer las dos imágenes para luego eliminar el área en que las dos imágenes se sobreponen, transformándola en transparente.


Veamos el resultado de aplicar este método en dos imágenes, xr_0.png y xr_1.png. Sobre su resultado, xor_0.png , tomado como imagen destino, se aplicará de nuevo el método tomando como imagen fuente xr_2.png.

convert -compose Xor xr_1.png xr_0.png -composite xor_0.png

composite -compose Xor xr_2.png xor_0.png xor_1.png

Como puede verse, por aplicación reiterada de este método con varias imágenes pueden obtenerse interesantes efectos.

Se obtendria el mismo resultado con una orden del tipo:

compose$ convert \( -compose Xor xr_0.png xr_1.png -composite \) \
-compose Xor xr_2.png -composite xor_1.png




Métodos Matemáticos


Multiply

Multiplica los valores de las imágenes fuente y destino.

Este método convierte en transparente el blanco..... y colores muy claros

Es un buen método para superponer dibujos lineales, diagramas o imágenes de texto a una imagen con fondo blanco o ligeramente coloreado. El blanco de la imagen fuente no cambiará los colores de la imagen destino, mientras que cualquier color oscuro de la imagen fuente se superpondrá a la imagen destino oscureciendo el área superpuesta.


Generamos cuatro imágenes de 25x15 pixels con la palabra 'Rosa', con distintos colores de fondo y de texto

convert -background color -fill color -size 25x15 label:Rosa output.gif

Veamos los resultados de tomar las imágenes generadas como imágenes fuente en la siguiente línea de órdenes:

composite -compose Multiply -gravity center imagenfuente rose.gif output




Scren

Similar a [Multiply], solo que [Screen] hace trasparente al negro....o colores muy oscuros. Cualquier color claro se superpondrá como blanco en la imagen destino.


Veamos las siguientes líneas de órdenes:

convert -background black -fill white -size 25x15 label:Rosa negro.gif

Veamos a tomar la imágen generada como imágen fuente en la siguiente línea de órdenes:

composite -compose Multiply -gravity center negro.gif rose.gif output.gif

Utilizando un texto de fondo blanco y texto negro e resultado seria:




Bumpmap

Este es un método similar a [Multiply], salvo en que la imagen fuente se convierte en una imagen es escala de grises antes de ser superpuesta.


Generamos tres imágenes de 25x15 pixels con la palabra 'Rosa', con distintos colores de fondo y de texto

convert -background color -fill color -size 25x15 label:Rosa output.gif

Veamos los resultados de tomar las imágenes generadas como imágenes fuente en la siguiente línea de órdenes:

composite -compose Bumpmap -gravity center imagenfuente rose.gif output




Divide

Los valores de la imagen destino son divididos por los valores de la imagen fuente.

Uno de los efectos de este método, en el caso de imágenes en las que predominen valores cercanos al blanco (1.0) y al negro (0.0) es que el brillo de la imagen fuente será aumentado proporcionalmente a la cantidad de sombras existentes en la imagen destino. Si la imagen destino es completamente blanca, la imagen fuente no será alterada ( suponiendo que ambas tengan las mismas dimensiones). Esto puede utilizarse para eliminar zonas occuras de una imagen, debidas a las lentes (viñetado), escaneado defectuoso, deterioro por el paso del tiempo, etc...


Veamos en acción este método :

composite -compose Divide macba.png gray50.png output.gif

hemos utilizado una imagen gris gray50.png como imagen destino para aumentar el brillo de la imagen fuente macba.png. Ambas imágenes tienen las mismas dimensiones.

En el caso de utilizar la imagen gray50.png como imagen fuente y macba.png como imagen destino, el resultado seria el siguiente:




Plus

Mezcla los colores de la imagen fuente con los de la imagen destino.En "Photoshop 7" este tipo de composición es conocido como "Linear Dodge"


composite -compose Plus rojo.png verde.png output.gif




Add

Este método es parecido a [Plus], con la particularidad que cuando el color resultante se encuentra cercano al blanco, es "reiniciado" hacia el negro...... Mejor verlo con unos ejemplos.


Vamos a utilizar un gradiente en escala de grises generado por la orden:

convert -size 60x60 gredient: gradient.png

Este gradiente va a ser utilizado como imagen fuente y como imagen destino. Veamos la diferencia entre los métodos [Plus] y [Add]:

composite -compose Plus gradient.png gradient.png Plus.png

composite -compose Add gradient.png gradient.png Add.png

Como puede observarse, con el método [Add], las zonas brillantes (cercanas al blanco) se "reinician" hacia el negro, formando otro gradiente.

Este "reinicio" se da también uando usamos gradientes de colores: se dará hacia el color mas oscuro. Veamos los resultados de las dos siguientes líneas de órdenes:

composite -compose Add gradient_0.png gradient_0.png add_0.png

composite -compose Add gradient_0.png gradient_1.png add_1.png

Y para fianlizar, una muestra de las posibilidades de este método para la creación de gradientes:

composite gradient.png \( +clone +clone +clone \) -compose Add -flatten venetian.png

composite gradient.png \( gradient.png -rotate -90 \) -compose Add diagonal.png




Minus

Este método es algo especial, en el contexto de los métodos de composición "matemáticos". El resultado es una imagen en la cual los colores de una imagen se han sustraido de los de otra. Sin embargo, la opacidad ( si está presente) también sufre el proceso de sustracción, por lo cual el resultado final de la composición no podrá verse si no es con el canal alfa en "off".


composite -compose minus RGB.png rojo.png minus.png

Podemos ver que colores son afectados, removiendo completamente el círculo rojo de la imagen fuente, si hacemos que todos los pixels sean completamente opacos.

composite -compose minus RGB.png rojo.png -alpha off minus_.png




Subtract

Este método es una especie de módulo del método [Minus]. Actua de la misma forma pero con la particuladidad de que, por ejemplo, sustrayendo blanco de gris el resultado será gris, no negro, como seria el caso de [Minus].


composite -compose subtract RGB.png rojo.png subtract.png

composite -compose subtract RGB.png rojo.png -alpha off subtract_.png




Difference

Con este método la imagen resultante es la diferencia absoluta entre los valores de los colores. Así, la direfencia entre blanco y negro dará un resultado máximo de blanco.

Este operador puede utilizarse para negativizar selectivamente una imagen: La superposición de negro no tiene efecto sobre la imagen destino, en cambio, la superposición de blanco provoca la negativización de los colores. Veamos un ejemplo


composite -compose difference BN.gif rose.gif difference.png

Observemos como se ha negativizado la parte de la imagen destino "cubierta" por la porción blanca de la imagen fuente, mientras que la "cubierta" por la porción negra se mantiene inalterada.

Otra de las aplicaciones de este método seria la de comparar dos imágenes del mismo tamaño con el fin de visualizar las diferencias entre ellas.

Veamos el resultado de estas dos líneas de órdenes:

composite -compose difference plus_G.png rose.gif dif_1.png

composite -compose difference plus_R.png rose.gif dif_2.png

Veamos el uso de este método en la comparación de dos imágenes:

composite -compose difference grun.png grun_1.gif grun_dif.png

Como podemos observar, en la imagen resultante destacan las diferencias entre la imagen fuente y la imagen destino.




Exclusion

Este método es una especie de "diferencia promediada": blanco sobre blanco nos dará blanco; negro sobre negro, negro; en cambio gris sobre gris nos dará gris........... La verdad es que no se nos ocurre una utilidad para este método.... :-)




Métodos de manipulación del color.


Overlay

Con este método se preservan los blancos y negros puros presentes en la imagen destino, mientras se colorean los medio-tonos grises con los colores presentes en la imagen fuente, con la imagen en color superpuesta.


composite -compose overlay gradiente.png rose.png overlay.png

Una de las aplicaciones de este método es la de crear efectos "3D". Veamos un simple ejemplo: Partiremos de una fifura de un círculo, circle_blue.jpg, que "sombrearemos" :

convert circle_blue.jpg -shade 120x30 circle_shade.jpg

Posteriormente aplicamos el método tomando como imagen fuente circle_blue.jpg y como imagen destino la imagen generada por la anterior línea de órdenes, circle_shade.jpg

composite -compose circle_blue.jpg circle_shade.jpg circle_3d.jpg




Hard_Light

Este método es exactamente igual que [Overlay], con la particularidad de que aquí imagen fuente e imagen destin se intercambian.

Con [Hard_Light] se añaden altas luces a una imagen en color, por lo que una de las utilidades de este método será la de añadir textura a una imagen. Veamos un ejemplo utilizando las mismas imágenes que en el método [Overlay]:


composite -compose Hard_Light rose.png gradient.png hard_light.png




Soft_Light

Este método también añade altas luces y sonbreados a una imagen, pero en este caso los colores de la imagen destino son modificados en el sentido de reducir el contraste.El efecto es un suavizado de la textura de la imagen, conservando los colores.


composite -compose Soft_Light gradient.png rose.png soft_light.png




Lighten / Darken

Estos dos métodos comparan los valores de los colores de las imágenes fuente y destino y toman sus valores mas luminosos ( Lighten) y mas oscuros (Darken).


composite -compose metodo rose.png gradient.png output.png

Veamos los resultados para metodo=Lighten y para método=Darken




Color_Dodge / Color_Burn

No se van a tratar estos métodos debido a que no he conseguido generar, ni he hallado, ejemplos que puedan ilustrarlos.




Métodos de cópia de canales.



Copy_Red / Copy_Green / Copy_Blue

Estos métodos actuan tomando el correspondiente canal de la imagen fuente y copiándolo en la imagen destino.

Es un método poco usado, debido a la disponibilidad de opciones para separación y combinación de canales de color.




Copy_Cyan / Copy_Yellow / Copy_Magenta / Copy_Black

Estos métodos actuan tomando el correspondiente canal de la imagen fuente y copiándolo en la imagen destino.

Es un método poco usado, debido a la disponibilidad de opciones para separación y combinación de canales de color.




Hue

Copia el tono de una imagen fuente, RGB, en la imagen destino, dejando la saturación y brillo inalterados.

Se supone que tanto la imagen fuente como la destino son imágenes RGB.




Saturate

Copia la saturación de una imagen fuente, RGB, en la imagen destino, dejando el tono y brillo inalterados.

Se supone que tanto la imagen fuente como la destino son imágenes RGB.




Luminize

Copia el brillo de una imagen fuente, RGB, en la imagen destino, dejando el tono y la saturación inalterados.

Se supone que tanto la imagen fuente como la destino son imágenes RGB.




Colorize

Copia el tono y la saturación de una imagen fuente, RGB, en la imagen destino, dejando el brillo inalterado.

Se supone que tanto la imagen fuente como la destino son imágenes RGB.




Métodos Especiales



Change_Mask

Mediante este método convertiremos en completamente transparendes determinados pixels de la imagen destino. Una de las utilidades de este método es la de "retransparentar" una imagen que fué incluida en un fondo complejo.


composite -compose change_mask fuente.png destino.png output.png





[ Indice ] [ Inicio Sección] [ Sección Anterior ] [ Sección Siguiente ]

Licencia: "ImageMagick: Manual en español". By Antoni Serra Devecchi is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España License.

NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO