NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO

ImageMagick: Manual en español.

[Un paseo por ImageMagick]


XII- Dibujar con ImageMagick.






Introducción




XII-1.-El lienzo

Con la opción [-draw], IM nos permite dibujar formas simples, que denomina "primitives". Ejecutando la orden: convert -list primitive obtendremos un listado de las "primitives" posibles en nuesntra versión de IM.

Pero antes de comenzar a crear estas formas simples con [-draw], es conveniente conocer como crear el "lienzo" sobre el que deberán dibujarse .Para ello disponemos de la opción [-size], ya tratada, a este propósito, en la sección anterior.

Debemos decir que como "lienzo" de [-draw] podemos utilizar también cualquier imagen.





XII-2.-Las dimensiones del lienzo: [-size]

Como se ha ya adelantado, con esta opción podemos crear un "lienzo" o "página", de las dimensiones deseadas, sobre el cual poder dibujar con [-draw]. En realidad lo que hacemos con esta opción es crear una imagen que nos sirva de base.

La sintaxis básica de esta opción es:

-size WxH

Esta opción debe utilizarse con un comando, p.e. , con el comando [convert], que requerirá la especificación de un input y un output.

Como se trata de un proceso de creación de una imagen, el input a utilizar no podrá ser una imagen...... aquí entra en juego el operador [xc:].

Una línea de órdenes con la opción [-size] tendria la siguiente sintaxis básica:

convert -size WxH xc:color output

Vamos a considerar de nuevo el operador [xc:].





XII-3.-El color del lienzo: El operador [xc:]

En la sección: [XI.-Creación de Lienzos]; vimos como crear distintas clases de lienzos. Todo lo dicho allí seria aplicable aquí, aunque en esta sección vamos a centrarnos en el operador generador de lienzos de color sólido [xc:]

Con este operador creamos un lienzo de color sólido y de unas determinadas dimensiones.

xc:color

El color se definirá según uno de los siguientes formatos:

La lista de colores disponibles puede obtenerse ejecutando el comando: convert -list color


Vamos ahora a ver [-size] y [xc:] en acción:


convert -size 100x100 xc:gray canvas.png

Hemos creado una imagen canvas.png de 100x100 px y de color gris (gray) con un borde de color rojo y de 5 px de grosor.


canvas.png

Vamos a comenzar el trazado de figuras simples con la opción [-draw]





XII-4.-La opción [-draw]

La sintaxis de la opción [-draw] seria del tipo:

convert -draw 'cadena' input output

Como veremos dentros de unos instantes, el contenido del argumento cadena dependerá del tipo de "primitive" que deseemos trazar.

En el caso de no disponer de una imagen previa sobre la que realizar el trazo, es decir, cuando deseemos crear un dibujo "ex-novo", deberemos utilizar la opción [-size], con el operador [xc:] como input en la linea de órdenes:

convert -size WxH xc:color -draw 'cadena' output

Seguidamente, a modo de adelanto, se listan los contenidos del argumento 'cadena' que van a tratarse en esta sección:


Cadena       "Primitive"
'point x,y'       Punto
'line x0,y0 x1,y1'            Línea Recta
'rectangle x0,y0 x1,y1'            Rectángulo
'roundRectangle x0,y0 x1,y1 Wc,Hc'            Rectángulo de bordes redondeados.
'circle x0,y0 x1,y1'            Círculo
'arc x0,y0 x1,y1 a0,a1'            Arco
'ellipse x0,y0 Rx,Rya0,a1'            Elipse
'polyline x0,y0 .... xn,yn '            Polilinea
'polygon x0,y0 .... xn,yn '            Polígono
'bezier x0,y0 .... xn,yn '          Curva Bezier
'text x0,y0 cadena '          Texto
'operador x0,y0 W,H archivo '          Imagen
 

Las coordenadas x e y se calcularán según se expuso en [-crop].




Dibujando formas simples. ("Primitives")





XII-5.-Dibujar un punto

-draw 'point x0,y0'

x0,y0= Coordenadas del punto.


convert -size 100x100 xc:white -fill red -draw 'point 50,50' punt.png

Con la anterior línea de órdenes se ha creado un "lienzo" de 100x100px,de color blanco sobre el que se ha dibujado un punto rojo en las coordenadas x=50, y=50.

Puede verse que se ha utilizado la opción [-fill] para asignar un color al trazo (en este caso, un punto).





XII-6.-.Dibujar una linea recta

-draw 'line x0,y0 x1,y1'

(x0,y0) y (x1,y1), son las coordenadas de cada uno de los extremos de la recta.

Podemos determinar el grosor del trazo mediante la opción [-strokewidth]

Podemos determinar el color del trazo mediante la opción [-stroke]


convert -size 100x100 xc:blue \
-strokewidth 5 -stroke red \
-draw 'line 10,10 90,90' line.png

Con la anterior línea de órdenes se ha creado un "lienzo" de 100x100px, de color azul sobre el que se ha dibujado una linea recta de color rojo entre las coordenadas x0=10, y0=10.correspondientes al punto del extremo inferior, y las coordenadas x1=90, y1=90, correspondientes al punto del extremo superior.

Se ha utilizado las opciónes [-strokewidth] para fijar el grosor del trazo y [-stroke] para asignarle un color.

Ahora veamos el trazado de varias líneas sobre una imagen preexistente:

convert \
-strokewidth 5 -stroke black -draw 'line 10,10 90,60' \
-strokewidth 2 -stroke red -draw 'line 10,60 90,10' \
-strokewidth 10 -stroke yellow -draw 'line 50,70 50,10' \
rotar.jpg lineas.png


lineas.png

Hemos trazado tres lineas sobre una imagen, definiendo el grosor y el color de cada una de ellas con [-strokewidth] y [-stroke], respectivamente.





XII-7.-Dibujar un rectángulo

-draw 'rectangle x0,y0 x1,y1'

El grosor del trazo de los lados se estabecerá con la opción [-strokewidth]

El color del trazo de los lados se establecerá con la opción [-stroke]

El color de relleno de la superficie del rectángulo se fijará con la opción [-fill]


convert -size 100x100 xc:white \
-strokewidth 5 -stroke red -fill blue \
-draw 'rectangle 20,80 80,20' rectangle.png

convert \
-strokewidth 3 -stroke red -draw 'rectangle 20,70 80,20' \
-strokewidth 6 -stroke yellow -draw 'rectangle 40,60 60,40' \
rotar.jpg rectangle-r.png

Vemos que si no se especifica un fondo, IM asigna uno por defecto, en este caso, negro.

convert -fill transparent \
-strokewidth 3 -stroke red -draw 'rectangle 20,70 80,20' \
-strokewidth 6 -stroke yellow -draw 'rectangle 40,60 60,40' \
rotar.jpg rectangle-rt.png

Aquí hemos establecido un fondo transparente. Al establecerse al principio de la orden y no habiendo otra declaración de [-fill], el valor transparent afecta a los dos rectángulos.

convert \
-fill transparent -strokewidth 3 -stroke red -draw 'rectangle 20,70 80,20' \
-fill green -strokewidth 6 -stroke yellow -draw 'rectangle 40,60 60,40' \
rotar.jpg rectangle-rtg.png

Hemos declarado otra opción [-fill] después de la primera declaración -draw (rectángulo rojo): El fondo del rectángulo rojo será transparente y el del amarillo, verde,





XII-8.-Dibujar un rectángulo de esquinas redondeadas.

-draw 'roundRectangle x0,y0 x1,y1 Wc,Hc'

Como se puede observar, conserva la sintaxis de [rectangle], con un par de coordenadas más:



El grosor del trazo de los lados se estabecerá con la opción [-strokewidth]

El color del trazo de los lados se establecerá con la opción [-stroke]

El color de relleno de la superficie del rectángulo se fijará con la opción [-fill]


Veamos el comportamiento para distintos valores de Wc y Hc

convert -size 100x100 xc:white -fill yellow -strokewidth 3 -stroke red \
-draw 'roundRectangle 10,10 90,90 Wc,Hc' output.png


Wc=0
Hc=0

Wc=10
Hc=10

Wc=20
Hc=20

Wc=10
Hc=50

Wc=50
Hc=10




XII-9.-Dibujar un círculo

-draw 'circle x0,y0 x1,y1'

  • x0,y0= coordenadas del centro de la circunferencia.
  • x1,y1= coordenadas de un punto de la circunferencia.

De hecho, además del de definir el centro con x0,y0, definimos la longitud del radio con el par (x0,y0,x1,y1), por lo que una forma fácil de calcularlo es hacer coincidir x0 con x1 o bién y0 con y1

Fijándonos en la figura de la izquierda, obtendríamos el mismo resultado con cualquiera de las siguientes dos especificaciones:

-draw 'cercle x0,y0 x0,y1'

-draw 'cercle x0,y0 x1,y0'

De todas formas, el segundo par es siempre las coordenadas de un punto de la circunferencia.



Veamos algunos ejemplos para distintos valores de x1,y1:

convert -size 100x100 xc:white -fill yellow -strokewidth 3 -stroke red\
-draw 'circle 50,50 x1,y1' output.png


x1=20 ; y1= 20

x1=30 ; y1= 30

x1=45 ; y1= 45

x1=50 ; y1= 20

El grosor del trazos se estabecerá con la opción [-strokewidth]

El color del trazo se establecerá con la opción [-stroke]

El color de relleno de la superficie del círculo se fijará con la opción [-fill]





XII-10.-Dibujar un arco.

-draw 'arc x0,y0 x1,y1 a0,a1'

Inscribe un arco elíptico en el interior de un rectángulo.


x0,y0 y x1,y1 son las coordenadas que nos delimitan el rectángulo en el que se inscribirá la elipse.

a0 y a1 son los ángulos de rotación inicial y final, respectivamente.

La figura arco 1 los ángulos inicial y final son, y 360º, por lo que se ha dibujado la elipse entera.

En la figura arco 2 el trazo comienza en el ángulo 45º y finaliza en el 270º.


arco 1

arco 2

convert -size 100x60 xc:white -fill yellow -stroke red \
-draw 'arc 20,10 80,50 45,360' arc3.png

convert -size 100x60 xc:white -fill yellow -stroke red \
-draw 'arc 20,10 80,50 30,150' arc4.png

convert -size 100x60 xc:white -fill yellow -stroke red \
-draw 'arc 20,10 80,50 30,300' arc5.png


Como se ha visto, pueden usarse las opciones [-strokewidth], [-stroke] y [-fill]





XII-11.-Dibujar una elipse

-draw 'ellipse x0,y0 Rx,Ry a0,a1'

convert -size 100x100 xc:white -stroke red -fill yellow \
-draw 'ellipse 50,50 20,40 45,270' output.png





XII-12.-Dibujar una polilinea

-draw 'polyline x0,y0 x1,y1.......xn,yn'

El comportamiento de este operador es el trazado de líneas entre los puntos definidos.


convert -size 100x100 xc:white -stroke red -fill yellow \
-draw 'polyline 2,2 30,40 60,15 70,60 15,80 80,90' output.png





XII-13.-Dibujar un polígono.

-draw 'polygon x0,y0 x1,y1.......xn,yn'

El comportamiento de este operador es similar a [polyline], con la diferencia que [polygon] cierra el trazado; esto es, une el primero con el último de los puntos definidos en la línea de órdenes.


convert -size 100x100 xc:white -stroke red -fill yellow \
-draw 'polygon 2,2 30,40 60,15 70,60 15,80 80,90' output.png

Como podemos ver, se han unido los puntos (2,2) y (80,90)





XII-14.-Dibujar curvas Bezier.

-draw 'bezier x0,y0 x1,y1.......xn,yn'

Las curvas Bezier se basan en una serie de puntos de control.

Normalmente suelen darse cuatro puntos. El primero y el último de los puntos definidos en la línea de órdenes marcan el inicio y el final de la curva. Los puntos intermedios actuan como "puntos de control" que definen la dirección y cuán "rápido" se desvia la curva hacia los puntos finales.


convert -size 600x600 xc:white \
-strokewidth 3 -stroke black -fill none \
-draw 'bezier 50,50 150,600 350,0 450,450' output.png

Las líneas rojas y la punteada muestran la polilinea resultante de unir los distintos punto.

Podemos ver como los vértices de ésta determinan los senos y picos de la curva, y los ángulos la "amplitud" de los mencionados senos y picos.


Veamos unos ejemplos de curvas.

Debajo de cada una de ellas pueden leerse los valores de -draw 'bezier x0,y0x1,y1.......xn,yn'

En color negro se visualiza la polilinea resultante de unir los distintos puntos

En color rojo, la curva Bezier resultante.


(10,10 30,100 70,0 90,90)

(20,20 50,100 80,20 70,70)

(0,0 30,100 50,0 80,100 100,00)




XII-15.-Texto con [-draw].

Para la anotación de imágenes se vio la opción [-annotate], que por el momento sigue siendo la forma mas fácil de anotar una imagen, además de ser la que nos permite un mayor control de la anotación.

Pero también podemos utilizar la opción [-draw] para realizar anotaciones. Veamos como:

-draw 'text x0,y0 "cadena"'

x0,y0= Coordenadas del punto de "arrancada" del texto.

"cadena"= Texto. Si contiene espacios debe entrecomillarse. Si se han utilizado comillas simples en [-draw], como es nuestro caso, se utilizarán comillas dobles para la "cadena", y viceversa.

Con este operador, además de las opciones [-fill], [-stroke] y [-strokewidth], pueden utilizarse [-gravity], [-font], [-pointsize] , [-undercolor] y [-box].

convert -size 100x60 xc:skyblue -fill white -stroke black \
-font Nice-Regular -pointsize 30 -gravity center -box yellow \
-draw 'text 0,0 "¡Hola!"' output





XII-16.-Color con [-draw].

Este operador de [-draw] nos permitirá realizar toda una serie de interesantes operaciones. Se basa en un punto de control y en un método a aplicar:

-draw 'color x,y metodo'

Las coordenadas (x,y) son las del punto de control.

Los métodos posibles son:


point        Asigna al punto (x,y) el color que hayamos definido en [-fill].
replace        Lee el color del pixel (x,y) y reemplaza todos los elementos de dicho color presentes en la imagen por el color que hayamos definido en [-fill]
floodfill        Reemplaza el color de todos los elementos de la figura que contienen el punto contros por el color que hayamos definido en [-fill].
filltoborder        Como floodfill, pero afecta tanbién al borde de la figura.
reset        Como filltoborder

Veámoslos en acción:




convert -size 100x100 xc:white\
-stroke red -fill white -draw 'rectangle 10,10 90,90'\
-fill black -draw 'color 50,50 point' point.png

Con la anterior línea de órdenes se dibujado un rectángulo y se ha asignado a un punto de este, el punto control (50,50), el color definido en la opción [-fill]: black (negro)

Partiremos de la figura draw-color.png, de 100x100 px

convert -fill black -draw 'color 60,30 replace'\
draw-color.png replace.png

Se ha reeemplazado el color de todos los elementos de la imagen draw-color.png del mismo color que el punto control, (60,30), (amarillo), por el color difinido en la opción [-fill], (negro)

convert -fill black -draw 'color 60,30 floodfill'\
draw-color.png floodfill.png

Se ha reeemplazado el color del elementos de la imagen draw-color.png que contiene el punto control, (50,20), por el color difinido en la opción [-fill], (negro)

convert -fill black -draw 'color 60,30 filltoborder'\
draw-color.png filltoborder.png

Se ha reeemplazado el color de la imagen draw-color.png, incluyendo el borde, que contiene el punto control, (60,30), por el color difinido en la opción [-fill], (negro)

convert -fill black -draw 'color 60,30 replace'\
draw-color.png reset.png

Similar a la anterior,reemplaza el color de todos los elementos de la imagen draw-color.png que contiene el punto control, (60,30), por el color difinido en la opción [-fill], (negro)



Podemos combinar varios de los operadores vistos dentro de una misma opción [-draw].

Son posibles lineas de órdenes como:

convert -size 100x100 xc:white -fill none -stroke red -pointsize 14\
-draw 'rectangle 20,20 90,90 circle 50,50 80,50 text 10,10 "Combinacion"'\
output.png





Transformando los dibujos: Los operadores de transformación

La opción [-draw] soporta numerosas transformaciones, que pueden aplicarse mediante los correspondientes operadores de transformación, a las figuras que se crean con la mencionada opción. Vamos a considerar los siguientes operadores de transformación:


Veamos estos operadores de transformación en acción:

Partiremos de la imagen arts.png ,resultado de aplicar a la imagen arts.jpg (831x622 px),la siguiente línea de órdenes:

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86\
-draw 'circle 75,75 90,90 rectangle 50,100 100,200 text 125,200 "H. Arts"'\
arts.jpg arts.png





XII-17.-Rotación: [rotate]

-draw ' rotate ±g ...........'

+g: Rotación en el sentido de las agujas del reloj.
-g: Rotación sentido contrario a las agujas del reloj.
El operador rotate afecta a todos los elementos de [-draw] que le siguen, pero no a los que le anteceden, lo que nos permitirá rotar selectivamente uno o varios elementos.

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86
-draw ' rotate -15 circle 75,75 90,90 rectangle 50,100 100,200 text 125,200 "H. Arts"'
arts.jpg arts.png

Se han rotado todos los elementos de [-draw]

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86\
-draw ' circle 75,75 90,90 rectangle 50,100 100,200 rotate -15 text 125,200 "H. Arts"'\
arts.jpg arts.png

Se ha rotado solo el elemento text.





XII-18.-Traslación: [translate]

-draw ' translate ±x,±y ...........'

+x:Traslada x pixels hacia la derecha.
-x:Traslada x pixels hacia la izquierda.
+y: Traslada y pixels hacia abajo.
-y: Traslada y pixels hacia arriba

El operador translate afecta a todos los elementos de [-draw] que le siguen, pero no a los que le anteceden, lo que nos permitirá trasladar selectivamente uno o varios elementos.

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw ' translate 100,150 circle 75,75 90,90 rectangle 50,100 100,200 \
text 125,200 "H. Arts"' arts.jpg arts.png

Se han trasladado todos los elementos de [-draw]

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw ' circle 75,75 90,90 translate 100,150 rectangle 50,100 100,200 \
translate 200,0 text 125,200 "H. Arts"' arts.jpg arts.png

Fijémonos como el elemento text ha acumulado los dos traslados definidos: primero se ha aplicado el traslado (100,150) al rectángulo y al texto para posteriormente, desde esta nueva posición, aplicar un traslado (200,0) al texto.





XII-19.-Escalado: [scale]

-draw ' scale x,y ...........'

x:Factor de escalado horizontal.
y:Factor de escalado vertical

El operador scale afecta a todos los elementos de [-draw] que le siguen, pero no a los que le anteceden, lo que nos permitirá escalar selectivamente uno o varios elementos.

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw ' scale 1.5,0.5 circle 75,75 90,90 rectangle 50,100 100,200 \
text 125,200 "H. Arts"' arts.jpg arts.png

Se han escalado todos los elementos de [-draw] por los factores 1.5(horizontal) y 0.5(vertical)
Como se vió en rotate y en translate, con scale puede realizarse también un escalado selectivo y/o acumulativo.





XII-20.-Inclinar: [skewx] [skewy]

Inclinar sobre el eje X: -draw ' skewx ±n ...........'

Inclinar sobre el eje Y: -draw ' skewy ±n ...........'

+n:Grados de la inclinación. A la derecha el el caso de skewx. Hacia abajo, en el caso de skewy.
+n:Grados de la inclinación. A la izquierda el el caso de skewx. Hacia arriba, en el caso de skewy.

Los operadores skewx y skewx afectan a todos los elementos de [-draw] que le siguen, pero no a los que le anteceden, lo que nos permitirá inclinar selectivamente uno o varios elementos.

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw ' skewx 30 circle 75,75 90,90 rectangle 50,100 100,200 \
text 125,200 "H. Arts"' arts.jpg arts.png

Se han inclinado todos los elementos de [-draw] 30º sobre el eje X

.

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw ' skewy 30 circle 75,75 90,90 rectangle 50,100 100,200 \
text 125,200 "H. Arts"' arts.jpg arts.png

Se han inclinado todos los elementos de [-draw] 30º sobre el eje Y .





XII-21.-Combinando transformaciones

Es posible combinar varias transformaciones en una misma orden de [-draw] .

Debemos tener presente que cada operador afectará a todos los elementos de [-draw] que le siguen, y que los efectos de los operadodes son "acumulativos": cada operador inicia su acción en el estado en que el operador anterior dejó el/los elementos de [-draw] .

Veamos un ejemplo:

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86\
-draw 'translate 100,0 circle 75,75 90,90 rectangle 50,100 100,200 \
skewy 30 scale 1.5,0.5 text 125,200 "H. Arts"' arts.jpg arts.png

Las transformaciones realizadas han sido ( por orden y acumulativamente):

1º. Se han trasladado todos los elementos de [-draw] a la posición (100,0).

2º. Se ha inclinado el elemento text un ángulo (hacia abajo) de 30º sobre el eje Y

Se ha escalado el elemento text por los factores (1.5,0.5).





XII-22.-Usar mas de una opción [-draw]

Como se ha visto hasta ahora, cuando se utilizan los operadores de transformación en una opción [-draw] , sus acciones afectan a todos los elementos que le siguen, además de acumularse con las acciones de otros operadores de transformación que hayan podido establecerse.

Un modo de "afinar" las transformaciones que deseemos realizar es separar los elementos y sus operadodes de transformación en distintas opciones [-draw] .

Esto nos sirve también para poder asignar valores de [-fill] ; [-stroke].. etc distintos para cada elemento. Veamos un ejemplo:

convert -fill '#A22E2E' -font Nimbus-Sans-Bold -pointsize 86 \
-draw 'translate 150,0 circle 75,75 90,90' \
-fill yellow -draw 'skewx 10 rectangle 50,100 100,200' \
-fill green -draw 'skewy 25 text 125,200 "H. Arts"' \
arts.jpg arts-multix.png

Podemos ver como , mediante la utilización de más de una opción [-draw] se han podido asignar cualidades (color en este caso) y transformaciones para cada elemento en particular.





XII-23.-Combinar imágenes con [-draw] : Los operadores de combinación.

Ya se habló de combinar imágenes cuando se trató del comando [composite] . La opción [-draw] nos ofrece otro via para la combinación de imágenes, através de una serie de operadores:

convert -draw 'image operador argumentos superpuesta' input output

La superpuesta es el archivo de imagen que se combinará con el archivo de imagen input, de acuerdo con las acciones definidas por operador argumentos para dar el output.

Los operadores que trataremos son:





XII-23-1.-El operador Over

Coloca una imagen sobre otra.

convert -draw 'image Over x,y W,H input0' input1 output


Si deseamos colocar la imagen nuvol.png sobre la imagen playa.png, la línea de órdenes seria:
convert -draw 'image Over 10,10 70,50 nuvol.png' playa.png playa-n.png
			

nuvol.png

playa.png

playa-n.png
La imagen superpuesta arranca de la coordenada (10,10) y sus dimensiones son de 70x50 px




XII-23-2.-El operador [In]

Inserta una imagen en otra, de modo que no se usará nada de la imagen input que se encuentre bajo el área de la imagen insertada.

convert -draw 'image In x,y W,H input0' input1 output

(x,y); (W,H) e input0 tienen los mismos significados que en [Over]


convert -draw 'image In 10,10 70,50 nuvol.png' playa.png playa-in.png

nuvol.png

playa.png

playa-in.png




XII-23-3.-El operador [Out]

Elimina la porción de imagen del input que deberia ser ocupada por la imagen a insertar, pero sin llevar a cabo la inserción.

convert -draw 'image Out x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]


convert -draw 'image Out 10,10 70,50 nuvol.png' playa.png playa-out.png

nuvol.png

playa.png

playa-out.png




XII-23-4.-El operador [Xor]

convert -draw 'image Xor x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]


Este operador aplicará el operador Booleano or a la imagen a superponer (input0) y a la del input1 y colocará el resultado en el output. Si el valor de dos Bits, uno de input0 y otro de input1, son diferentes, el valor de la operación será 1. En caso contrario será 0


convert -draw 'image Xor 10,10 70,50 nuvol.png' playa.png playa-xor.png

nuvol.png

playa.png

playa-xor.png




XII-23-5.-El operador [Plus]

convert -draw 'image Plus x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]

Este operador suma el valor del pixel en input1 al valor del pixel en input0 y utiliza el nuevo valor en el output.

Si el nuevo valor es mayor que el soportado por el output, se usará el valor máximo posible.

El valor del canal mate será tratado como opaco.


convert -draw 'image Plus 10,10 70,50 nuvol.png' playa.png playa-plus.png

nuvol.png

playa.png

playa-plus.png




XII-23-6.-El operador [Minus]

convert -draw 'image Plus x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]

Similar al operador [Plus], salvo que en este caso se realiza una sustración de valores en lugar de una adición. Si el valor resultante es menos que 0, se tomará = como valor resultante.


convert -draw 'image Minus 10,10 70,50 nuvol.png' playa.png playa-minus.png

nuvol.png

playa.png

playa-minus.png




XII-23-7.-El operador [Difference]

convert -draw 'image Difference x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]

Similar al operador [Minus], salvo que en este caso se toma siempre el valor resultante, sin forzar a que no sea negativo.


convert -draw 'image Difference 10,10 70,50 nuvol.png' playa.png playa-difference.png

nuvol.png

playa.png

playa-difference.png
Este operador es muy útil a la hora de comparar dos imágenes, como hacíamos con el comando [compare].
 convert -draw 'image Difference 0,0 0,0 playa-1.png' playa.png playa-difference-1.png
			

playa-1.png

playa.png

playa-difference-1.png




XII-23-8.-El operador [Multiply]

convert -draw 'image Multiply x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]

Este operador multiplica el valor del pixel de input1 por el valor del pixel de input0 para determinar el valor del pixel en output.

Puede usarse este operador para crear sombras descendentes.


convert -draw 'image Difference 10,10 70,50 nuvol.png' playa.png playa-multiply.png

nuvol.png

playa.png

playa-multiply.png




XII-23-9.-El operador [Bumpmap]

convert -draw 'image Bumpmap x,y W,H input0' input1 output

(x,y); (W,H) y input0 tienen los mismos significados que en [Over]

Este operador toma la imagen input1 y la "sombrea" con input0.


convert -draw 'image Bumpmap 10,10 70,50 nuvol.png' playa.png playa-bumpmap.png

nuvol.png

playa.png

playa-bumpmap.png




XII-24.-Uso de los operadores de combinación con el comando [composite]: La opción [-compose]

Los anteriores operadores de combinación pueden utilizarse con el comando [composite]. Ello se hará mediante la opción [-compose] y se obtendrán resultados similares a los obtenidos con [-draw].

composite -compose operador input0 input1 output

La diferencia en este caso es que no se especifican los argumentos (x,y) y (W,H)





XII-25.-Controlando los pasos intermedios de un proceso de transformación: La opción [-write]

-write output

IM nos permite componer líneas de órdenes complejas, en las cuales se generan outputs intermedios que se convierten en inputs de porteriores procesos de transformación.

La opción [-write] nos permite generar imágenes de estos outputs intermedios de un proceso, lo que puede permitirnos una mayor comprensión y control de este.

Consideremos la siguiente línea de órdenes, utilizada en [XII-22.- Usar de más de una opción [-draw] ]:

 convert arts.jpg -fill '#A22E2E' -font Nimbus-Sans-Bold  -pointsize 86 \
	-draw 'translate 150,0 circle 75,75 90,90' \
	-fill green -draw 'skewx 10 rectangle 50,100 100,200'\
	-fill yellow -draw 'text 125,200 "H. Arts"' \
	arts.png

Podremos visionar los diversos outputs intermedios de este proceso "colocando" opciones [-write] al final de cada uno de los procesos intermedios que los generan, pero debemos tener la precaución de definir el input del proceso, arts.jpg en este caso, al principio de la línea de órdenes:

 convert arts.jpg -fill '#A22E2E' -font Nimbus-Sans-Bold  -pointsize 86 \
	-draw 'translate 150,0 circle 75,75 90,90' -write output-1.png \
	-fill green -draw 'skewx 10 rectangle 50,100 100,200' -write output-2.png \
	-fill yellow -draw ' skewy 25 text 125,200 "H. Arts"' \
	arts.png


arts.jpg

output-1.png

output-2.png

arts.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