| [ Indice General ] | [ Sección Anterior ] | [ Sección Siguiente ] |
NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO |
![]() |
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:
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:]
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]) |
![]() |
|
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 |
![]() |
|
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 |
![]() |
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 convert -size 100x100 radial-gradient:color output.gif |
![]() |
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 |
![]() |
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 |
![]() |
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: \ |
![]() |
convert -size 100x100 gradient: \ |
![]() |
convert -size 100x100 gradient: \ |
![]() |
convert -size 100x100 gradient:red-lime \ |
![]() |
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 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 |
![]() |
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 |
|
![]() |
|
|
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 |
|
![]() |
|
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:
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 |
![]() |
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 |
![]() |
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 |
![]() |
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 \ convert -size 150x100 pattern:hexagons -background none \ |
![]() |
-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:
| Voronoi | Se limita a mapear cada pixels desde el punto de color más cercano. |
| Shepards | Para 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 . |
| Bilinear | Este 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 |
| Barycentric | Mapeará 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)
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 |
![]() |
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. |
![]() |
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. |
![]() |
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 |
![]() |