NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO

ImageMagick: Manual en español.

[Un paseo por ImageMagick]


XI.- Creación de lienzos.







XI-1.- Introducción

En IM los lienzos se utilizan para varios propósitos: como imagen base para el dibujo, como fondos sobre los que superponer otras imágenes o como parte del procesamiento general de imágenes.

Los lienzos pueden ser de un solo color sólido, de un rango de colores, estar formados por un mosaico de pequeñas imágenes....etc.

Seguidamente vamos a describir algunos modos de generar lienzos, algunos de ellos através de una serie de operadores específicos para la generación de lienzos.

Los operadores generadores de lienzos que vamos a considerar serán:

[xc:]      Genera lienzos de un color sólido.
[gradient:]      Genera lienzos de un gradiente lineal de colores.
[radial-gradient:]      Genera lienzos de un gradiente radial de colores.
[plasma:]      Genera lienzos aleatorios.
[tile:]      Genera lienzos "mosaico".
[pattern:]      Generador de patrones para mosaicos.


Los citados operadores deben utilizarse conjuntamente con la opción [-size], con el fin de determinar las dimensiones del lienzo. La sintaxis básica sería del tipo:

-size WxH operador:argumento

A menudo, el argumento del operador serán colores, que podrán definirse mediante uno de los siguientes formatos:





Lienzos de color sólido.



XI-2.- Generación directa de lienzos de color sólido mediante el operador [xc:]

Mediante el operador [xc:] podremos generar lienzos de un solo color.

-size WxH xc:color


convert -size 100x100 xc:red scRed.gif


Seguidamente vamos a apuntar algunas técnicas aplicables a la generación de lienzos de color sólido, y a su modificación, sin que intervenga el operador [xc:]





XI-3.- Generación de un lienzo partir de un pixel de una imagen.


Observemos la siguiente linea de órdenes

convert nuvol.png -crop 1x1+40+50 -scale '100x100!' sc01.gif

De una imagen preexistente, nuvol.png, mediante la opción [-crop] hemos "cortado" una área de un pixel (1x1) de una determinada zona (+40+50) y la hemos redimensionado a las dimensiones deseadas (100x100), mediante la opción [-scale],(Hubiéramos podido usar la opción [-resize])





XI-4.- Modificación del color de un lienzo.



Mediante la opción [-opaque] podemos modificar el color de un lienzo preexistente:

convert sc01.gif -fill '#88B039' -opaque red sc02.gif

También podemos recurrir a recubrir el color inicial con otro, mediante la opción [-colorize]

convert sc01.gif -fill yellow -colorize 100% sc03.gif

Entre otras muchas formas de cambiar el color de un lienzo preexistente podrian mencionarse la utilización de las opciones [-level-colors] y [-sparse-color] o la utilización de la opción [-draw].

Merece una atención especial la creación de lienzos transparentes a partir de imágenes preexistentes: la via más fácil y rápida de conseguirlo seria utilizando la opción [-alpha]

convert sc01.gif -alpha transparent sc04.gif





Lienzos con gradiente de color.



XI-5.- Generación directa de lienzos con gradiente de color lineales: [gradient:]

La via mas fácil y directa de generar lienzos con un gradiente de color es mediante el operador [gradient:]

Mediante este operador pueden generarse gradientes a partir de uno o dos colores. Su sintaxis responde al modelo:

-size WxH gradient:color

-size WxH gradient:color1-color2

Los colores del argumento podrán definirse mediante uno de los siguientes formatos:

Cuando se use sin el argumento (color) se generará un gradiente que irá desde el blanco (en la parte superior de la imagen) hasta el negro (en la parte inferior de la imagen).

Cuando como argumento se utilize un solo color, el gradiente se generará desde dicho color (en la parte superior de la imagen) hasta el blanco o el negro (en la parte inferior de la imagen), dependiendo de cual de estos dos últimos colores provea el gradiente más pronunciado con respecto al color elegido como argumento.

Cuando como argumento se fijen dos colores (color1-color2) el gradiente se generará desde el color color1, en la parte superior de la imagen, hasta el color color2, en la parte inferior de la imagen.


Veamos los resultados para distintos valores del argumento color

convert -size 100x100 gradient:color output.gif





XI-6.- Generación directa de lienzos con gradiente de color radiales: El operador [radial-gradient:]

A partir de la versión de IM 6.4.4 , pueden generarse gradientes radiales mediante el operador [radial-gradient:].

El gradiente generado estará centrado en el medio de la imagen y su diámetro abarcará todo lo ancho y alto de esta.

Todo lo comentado en con el operador [gradient:], es aplicable aquí, perp teniendo en cuenta que con [gradient:] el inicio del gradiente, se localizaba en la parte superior de la imagen y con [radial-gradient:] se localizará en el centro de esta.


Apliquemos a este operador los mismos valores del argumento color
utilizados en [gradient:] y veamos los resultados

convert -size 100x100 radial-gradient:color output.gif





XI-7.- Transparencias en gradiente.

En los dos anteriores operadores, al utilizar dos colores como argumento, uno de ellos puede ser puede "transparent" o "none", con lo que se generará un gradiente de transparente al color o viceversa (dependiendo del orden de los colores en el argumento). Obviamente, el formato del output debe ser uno de los que soporten transparencia, como el PNG.


convert -size 100x100 gradient:none-red output.png

convert -size 100x100 gradient:red-none output.png





XI-8.- Gradientes por redimensionamiento.

Una vía interesante de creación de gradientes es por redimensionamiento (expansión) de una imagen pequeña (por ejemplo, una imagen de 1x2 pixels) hasta el tamaño deseado mediante la opción [-resize]. Veamos unos ejemplos:


convert -size 1x2 gradient:tomato-yellow -resize '100x100!' output.jpg

Con la anterior orden primero hemos creado una imagen de 1x2 pixels con un gradiente de "tomate" (tomato) a "amarillo" (yellow) para, seguidamente, expandirla hasta 100x100 pixels mediante la opción [-resize]

Con el método del redimensionado podemos incluso prescindir de la opción [-size] y del operador [gradient] para la creación de lienzos con gradiente. Observemos la siguiente línea de órdenes:

convert xc:black xc:red xc:tomato xc:yellow xc:white +append -resize '250x30!' optput.png

Hemos "creado" cinco píxels de un color diferente cada uno de ellos, los hemos adosado con [+append] y los hemos expandido a una dimensión de 250x30 pixels mediante [-resize]......Un buén método para conseguir gradientes a partir de más de dos colores.

La opción [-resize] difumina los los colores entre los pixels de acuerdo con la definición de la opción [-filter] (de no haber una opción [-filter] definida, el redimensionamiento se realizará con su valor por defecto). Ajustando el parámetro de la opción [-filter] podremos conseguir que el gradiente resultante sea más o menos marcado. Observemos el resultado de aplicar varios filtros a la siguiente línea de órdenes:

convert xc:black xc:red xc:yellow xc:green1 xc:cyan xc:blue xc:black +append -filter filtro -resize '250x30!' output.png

Los filtros disponibles pueden listarse con la orden : convert -list filter





XI-9.- Modificaciones en gradientes.

Cuando se crean los lienzos con gradientes pueden aplicarse otras opciones con el fin de lograr llamativos "efectos"..... Veamos algunos ejemplos....el resto, en manos de vuestra imaginación :-)


convert -size 142x142 gradient: \
-rotate -45 -gravity center -crop 100x100+0+0 diagonal.gif

convert -size 100x100 gradient: \
-distort SRT 60 distort.gif

convert -size 100x100 gradient: \
-swirl 180 swirl.gif

convert -size 100x100 gradient:red-lime \
-swirl 90 -paint 3 -edge 2 mill.gif





Gradientes aleatorios.



XI-10.- El operador [plasma:]

Con el operador [plasma:] generaremos unos gradientes con una composición aleatoria de colores. Debe significarse que el operador [plasma:] generará un gradiente distinto cada vez que se ejecute.

La sintaxis de este operador es similar a la del operador [gradient:]

-size WxH plasma:color

-size WxH plasma:color1-color2

Lo dicho al comentar la sintaxis del operador [gradient:] puede aplicarse aquí, aunque es conveniente hacer unas pequeñas observaciones:

Con el operador [plasma:] se obtienen mejores resultados con medios-tonos (como "tomato", "steelblue") que con colores puros ("red", "blue"...). Los medios-tonos nos generarán una mayor variedad de colores.

Si color1 es igual a color2 (por ejemplo, es posible un argumento del tipo red-red), obtendremos un fondo que será, predominantemente, de este color.

El operador [plasma:] tiene un argumento "especial" : fractal.
Con fractal como argumento se generarán unos colores mas resaltados, lo que nos facilitará la obtención de cambios y modificaciones utilizando otras opciones y/o operadores.

Aplicando otras opciones, podremos conseguir efectos muy vistosos, sobre todo cuando se haya ut¡lizado fractal como argumento.


convert -size '100x100!' plasma:color output.gif

convert -size '100x100!' plasma:color1-color2 output.gif

convert -size '100x100!' plasma:color-color output.gif

convert -size '100x100!' plasma:fractal fractal-1.gif
convert -size '100x100!' plasma:fractal fractal-2.gif
convert -size '100x100!' plasma:fractal fractal-3.gif

Podemos ver como con la misma orden el resultado son tres lienzos distintos. Esto sucederá con cualquier argumento que se utilice.

convert -size '250x100!' plasma:fractal -blur 0x1 -paint 4 output.gif

convert -size '250x100!' plasma:fractal -blur 0x1 -emboss 2 output.gif

convert -size '250x100!' plasma:fractal -blur 0x2 -swirl 180 output.gif

convert -size '250x100!' plasma:fractal -paint 6 -edge 3 output.gif





XI-11.- Escala de grises con [plasma:]

El operador [plasma:] nos generará lienzos en color o en blanco y negro. Nos puede interesar disponer de liezos en escala de grises generados con este operador. Veamos como lograrlo:


La vía mas simple es generando directamente una imagen en escala de grises mediante la opción [-colorspace]

convert -size '100x100!' plasma:fractal -blur 0x2 -colorspace gray output.png

Otro modo sería copiando uno de los canales de color (en este ejemplo, el Rojo) sobre los otros dos con el fin de acentuar el efecto.

convert -size '100x100!' plasma:fractal -blur 0x2 -channel R -separate output.png

Aplicando la opción [-shade] podemos conseguir también unos excelentes resultados.

convert -size '100x100!' plasma:fractal -blur 0x5 -shade 120x45 -normalize output.png

Hasta este momento hemos visto la generación de lienzos en escala de grises utilizando el argumento fractal. Utilizando como argumento color-color podremos intentar controlar el brillo del lienzo generado.

convert -size '100x100!' plasma:black-black -blur 0x2 -colorspace gray grey0.jpg
convert -size '100x100!' plasma:grey25-grey25 -blur 0x2 -colorspace gray grey1.jpg
convert -size '100x100!' plasma:grey50-grey50 -blur 0x2 -colorspace gray grey2.jpg
convert -size '100x100!' plasma:grey75-grey75 -blur 0x2 -colorspace gray grey3.jpg
convert -size '100x100!' plasma:white-white -blur 0x2 -colorspace gray grey4.jpg

Si el anterior método no nos da outputs lo suficientemente marcados, podemos recurrir al método de copiar un canal:

convert -size '100x100!' plasma:black-black -blur 0x2 -channel G -separate grey5.pg
convert -size '100x100!' plasma:grey25-grey25 -blur 0x2 -channel G -separate grey6.jpg
convert -size '100x100!' plasma:grey50-grey50 -blur 0x2 -channel G -separate grey7.jpg
convert -size '100x100!' plasma:grey75-grey75 -blur 0x2 -channel G -separate grey8.jpg
convert -size '100x100!' plasma:white-white -blur 0x2 -channel G -separate grey9.jpg





Lienzos "mosaico"



Una de las vías para la creación de lienzos es mediante la unión de imágenes, formando un mosaico. En la red podremos hallar multitud de imágenes que podremos destinar a este fin.

Se van a tratar los siguientes métodos:





XI-12.- Uso de la opción [-tile] en la creación de lienzos.

La sintaxis general para esta opción sería:

composite -tile imagen1 imagen2 output

La imagen1 seria la que cubriria a la imagen 2, dando lugar al mosaico.

En el caso de creación de un lienzo, lo más adecuado seria sustituir imagen2 por: -size WxH xc:color

Así, podríamos considerar que la sintaxis de la opción [-tile], en el caso de la creación de lienzos, tomaría la siguiente forma:

composite -tile imagen1 -size WxH xc:color output

El argumento color es conveniente que sea none o transparent.


composite -tile weave.gif -size 100x100 xc:none tile_weave.gif





XI-13.- Uso del operador [tile:] en la creación de lienzos.

La sintaxis tipo de una línea de órdenes para la creación de un lienzo mediante el operador [tile:] sería:

convert size WxH tile:imagen output


convert -size 100x100 tile:weave.gif tile_weave.gif





XI-14.- Uso de las opciones [-clone] y [-append] en la creación de lienzos.

La mejor forma de ver el funcionamiento combinado de estas dos opciones en la creación de lienzos es mediante unos sencillos ejemplos:


convert discos.png \( +clone +clone \) +append \( +clone +clone \) -append tile_clone.gif

Se ha colocado en la memoria la imagen discos.png (I), se ha clonado dos veces y con [+append] se ha creado una tira horizontal de las tres imágenes (II). Dicha tira, aún en memoria, es clonada dos veces. Finalmente, las tres tiras se unen verticalmente mediante la opción [-append], dando lugar al output tile_clone.gif, (III)

Este método tiene la ventaja de poder realizar modificaciones, en la misma línea de órdene, del tipo:

convert discos.png \( +clone -paint 5 -edge 3 +clone \) +append \( +clone -paint 5 -edge 3 +clone \) -append tile_m_clone.gif





XI-15.- Uso del operador [pattern:] en la creación de lienzos.

Mediante el operador [pattern:] podemos utilizar toda una serie de patrones que nos proporciona IM.

Los patrones son pequeñas imágenes cuya principal uso es la de ser elementos de un mosaico.

La lista los patrones que nos proporciona IM puede verse en [Patrones que incorpora ImageMagick]

La sintaxis para esta opción es del tipo:

convert -size WxH pattern:patron output

El argumento patron será el nombre del patrón que deseemos utilizar.


convert -size 75x75 pattern:patron output

Veamos el resultado de la anterior orden para varios valores (nombres de patrones) del argumento patron.

Como se ha ido comentando, podemos aplicar a la generación de lienzos mosaico las opciones de modificación de imágenes que nos proporciona IM. Veamos unos ejemplos:

convert -size 150x100 pattern:leftshingle pattern:rightshingle +append output-0.png

convert -size 150x100 pattern:leftshingle pattern:rightshingle +append \
-shade 100x45 -fill Peru -tint 100% output-1.png

convert -size 150x100 pattern:hexagons -background none \
-wave 5x100 -edge 2 -fill tomato -opaque white output2.png





XI-16.- La opción [-sparse-color]

-sparse-color metodo 'x1, y1 color1 x2, y2 color2..... xn, yn colorn'

Esta opción actua coloreando la imagen a partir de los puntos y los colores especificados. El resto de los pixels de la imagen serán mapeados de acuerdo con el método elegido.

Los métodos disponibles son:

VoronoiSe limita a mapear cada pixels desde el punto de color más cercano.
ShepardsPara determimar el color del resto de los puntos de la imagen utiliza un radio (rango) eqivalente a la inversa de la distancia al cuadrado entre los puntos de color dados .
BilinearEste método se basa una ecuación de cuatro puntos sobre los tres canales de color para producir un gradiente de color uniforme entre los puntos de color fijados. Cuando se den menos de cuatro puntos pasará a utilizarse el método Baycentric.
BarycentricMapeará tres puntos de color en un triángulo lineal


Veamos ejemplos de cada uno de estos métodos.

(En las figuras se señalan los puntos con un círculo blanco)


Voronoi

Como ya se ha adelantado, este método mapea cada pixel de acuerdo con el color del punto mas cercano. Básicamente actua dividiendo la imagen en un conjunto de células poligonales alrededor de cada uno de los puntos fijados. Los lados de cada uno de los polígonos se encuentran a la mitad de la distancia que separa los dos puntos vecinos.


convert -size 100x100 xc: -sparse-color voronoi '30,10 red 10,80 blue 70,60 lime 80,20 yellow' voronoi.gif

Pueden aplicarse la mayoria de las opciones modificadoras de imágenes :

convert -size 100x100 xc: -sparse-color voronoi '30,10 red 10,80 blue 70,60 lime 80,20 yellow' -blur 0x20 -paint 3 voronoi_b.png



Shepards

Para determinar el color de cada punto, este método utiliza un rango igual a la inversa del cuadrado de la distancia entre cada uno de los puntos dados.


convert -size 100x100 xc: -sparse-color shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' shepards.gif

Pueden aplicarse la mayoria de las opciones modificadoras de imágenes.



Bilinear

Este método da lugar a un gradiente de color uniforme entre los cuatro puntos fijados.

Si se fijaran solo tres pontos se aplicaria el método [Barycentric]


convert -size 100x100 xc: -sparse-color bilinear '30,10 red 10,80 blue 70,60 lime 80,20 yellow' bilinear.gif

Pueden aplicarse la mayoria de las opciones modificadoras de imágenes.



Barycentric

Este es un método de tres puntos. Mapea los tres puntos en un triángulo lineal de color.


convert -size 100x100 xc: -sparse-color barycentric '30,10 red 10,80 blue 70,60 lime 80,20 yellow' barycentric.gif

Pueden aplicarse la mayoria de las opciones modificadoras de imágenes.




Podemos separar los tres canales en las figuras generadas por cada uno de loa métodos vistos. Es una manera de poder observar su forma de actuar. Para ello utilizaremos la siguiente línea de órdenes para cada uno de los métodos.

convert -size 100x100 xc: -sparse-color metodo '30,10 red 10,80 blue 70,60 lime 80,20 yellow' -separate output_%d.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