Archivo

Entradas Etiquetadas ‘azul’

Jugando con ImageMagick (II): Color y rotación

Miércoles, 1 de Septiembre de 2010 Gaspar Fernández Sin comentarios

Sigo con la serie de posts sobre ImageMagick, anteriormente estuvimos viendo cómo podemos redimensionar, añadir y quitar bordes a la imagen, cambiar y ecualizar el espacio de color, añadir efectos y capturar de la pantalla. Ahora veremos más cosas relacionadas con el color:

Tocando los canales de color

hamburgueson_33Imagina que queremos aplicar un efecto sólo en un canal, por ejemplo, un efecto radial-blur sólo en el canal rojo:

$ convert -channel red -radial-blur 30 hamburgueson.jpg hamburgueson_rojo.jpg

Donde 30 es el radio del emborronamiento (blur) radial.

Pero por ejemplo, si queremos aumentar el nivel de rojo, verde, o azul (o de los tres valores) de una imagen, podemos modificar los niveles de blanco y negro de la propia imagen.

tazasPara el ejemplo superior:

$ convert -level 30,100% taza.jpg taza_oscura.jpg

$ convert -channel blue -level 0,50% taza.jpg taza_azul.jpg

$ convert -channel red -level 30,80% taza.jpg taza_arojo.jpg

De izquierda a derecha.

Podemos también obtener la imagen a dos colores (blanco y negro), obtenido desde un valor umbral (valores inferiores, se representarán con negro y superiores con blanco), aunque, como veremos en el ejemplo, también podemos filtrar según el canal:

tazas1Para este ejemplo, hice lo siguiente:

$ convert -threshold 25% taza1.jpg tazaBN.jpg

$ convert -channel red,blue -threshold 55% taza.jpg taza_naranja_verde.jpg

$ convert -channel green -threshold 75% taza_magenta.jpg

Más efectos de color

taza_3Para conseguir el tono sepia hacemos lo siguiente:

$ convert -sepia-tone [umbral] origen destino

En el ejemplo hice lo siguiente:

$ convert -sepia-tone 90% taza.jpg taza_sepia.jpg

También disponemos del efecto posterizado (si no se aprecia bien en la miniatura, hacer click para ver en grande). Para conseguir el efecto hacemos lo siguiente:

taza_31

$ convert -posterize 4 taza.jpg taza_poster.jpg

Donde 4 es el número de niveles con el que vamos a posterizar.

También tenemos el efecto solarizado con el siguiente comando:

$ convert -solarize 2% taza.jpg taza_sol.jpg

taza_32Donde el 2% es el umbral deseado para el efecto, que vemos en la siguiente imagen.

Para completar los efectos de color, veamos también cómo podemos cambiar brillo, saturación y tono. Para controlarlo tenemos la orden:

$ convert -modulate [brillo],[saturacion],[tono] origen destino

Vemos en el siguiente ejemplo las imágenes con los efectos uno a uno:

tazas2

# En la primera se ha modificado el tono de la imagen:

$ convert -modulate 100,100,142 taza.jpg taza_hue.jpg

# En la segunda se modificó la saturación

$ convert -modulate 100,142,100 taza.jpg taza_sat.jpg

# En la tercera se cambió el brillo:

$ convert -modulate 142,100,100 taza.jpg taza_brillo.jpg

Todos estos parámetros se indican en porcentaje.

Rotación y transposición

Además de estos efectos de color, encontramos también algunas transformaciones de imagen

tazas3

$ convert -flip taza.jpg taza1.jpg

$ convert -flop taza.jpg taza2.jpg

$ convert -transpose taza.jpg taza3.jpg

$ convert -transverse taza.jpg taza4.jpg

taza_2

Para la rotación de la imagen ejecutamos lo siguiente:

$ convert -rotate 40 taza.jpg taza_r.jpg

Donde 40 es la cantidad de grados a rotar.

taza_33Para la rotación hay otra orden muy curiosa: polaroid. La podemos utilizar de la siguiente manera:

$ convert -polaroid 40 taza.jpg taza_p.jpg

Jugando con ImageMagick (I): Dimensiones, captura, color y efectos

Jueves, 26 de Agosto de 2010 Gaspar Fernández Sin comentarios

A menudo es necesario hacer una manipulación básica de imágenes y da mucha pereza ejecutar GIMP u otro editor de imágenes para una tontería; e incluso a veces necesitamos modificar gran cantidad de imágenes y necesitamos automatizar el proceso:

Ejecución

Aunque ImageMagick, que seguro que lo encontráis en los repositorios de vuestra distribución favorita, da mucho más de sí, aquí veremos ejemplos con convert, import y mogrify

Redimensionado de imágenes

hamburgueson_2$ convert -resize [dimensión/porcentaje] origen destino

Por ejemplo para redimensionar con un ancho de 320 pixels:

$ convert -resize 320 hamburgueson.jpg hamburgueson_mini.jpg

De esta forma, si especificamos la altura, se ignorará, ya que convert intentará mantener el aspecto de la imagen.

También podemos imponer la altura y que se calcule automáticamente el ancho:

$ convert -resize x500 hamburgueson.jpg hamburgueson_mini.jpg

O si queremos, podemos también redimensionar con un porcentaje del tamaño original:

$ convert -resize 40% hamburgueson.jpg hamburgueson_mini.jpg

hamburgueson_21También es posible la redimensión sin mantener el aspecto (relación ancho/alto) de la siguiente forma:

$ convert -resize \!600×300 hamburgueson.jpg hamburgueson_deforme.jpg

Y esto mismo, también por porcentaje:

$ convert -resize \!100×30% hamburgueson.jpg hamburgueson_deforme.jpg

Capturando el escritorio

Puede que nuestro entorno preferido de escritorio no venga con esta funcionalidad, o incluso que estemos desde una máquina remota y queramos ver lo que pasa en el escritorio, una captura de pantalla no viene mal. Para ello podemos hacer lo siguiente:

screenshot-26-08-2010-100842

$ import -window root captura.jpg

O si queremos capturar una ventana en especial:

$ import ventana.jpg

Nos aparecerá un puntero especial que nos permitirá seleccionar la ventana a capturar.

O si queremos capturar una ventana en especial sin necesidad de hacer click (muy útil si estamos en un equipo remoto):

$ import -window “Titulo de la ventana” ventana.jpg

También podemos sacar el ID de la ventana con:

$ wmctrl -l

Y poner en lugar del título, el ID. Es necesario que nos encontremos en el mismo escritorio de la ventana para hacer la captura. Cómo podemos hacer eso remotamente ?

$ wmctrl -l # Nos dirá en la segunda columna el escritorio donde está la ventana

$ wmctrl -s [numero] # Saltaremos al escritorio [numero], el primero es el cero.

Espacios de color

Podemos cambiar el formato del color de forma rápida usando colorspaces, dependiendo del formato de salida y la forma en la que la imagen será utilizada, para vídeo, por ejemplo. Aunque también tenemos algunos espacios interesantes como:hamburgueson_3

$ convert -colorspace gray hamburgueson.jpg hamburgueson_gris.jpg

El tono de gris estará calculado para adecuarse al ojo humano: Gris = 0.299*Rojo+0.587*Verde+0.114*Azul

Aunque también podremos transformar a YUV, XYZ, LAB, HSL, etc; también necesitamos que el formato de salida sea compatible con esos espacios de color. Para ver una lista de todos los colorspaces disponibles:

$ covert -list colorspace

hamburgueson_31También podemos ecualizar la imagen con respecto a los diferentes espacios de color de la siguiente forma:

$ convert -colorspace [espacio] -equalize origen destino

En el ejemplo:

$ convert -colorspace hsl -equalice hamburgueson.jpg hamburgueson_hsl.jpg

Y si no queremos decir el colorspace, usaremos el actual de la imagen:

$ convert -equalize hamburgueson.jpg hamburgueson_e.jpg

Recortar imágenes

Es más cómodo hacerlo con el ratón, pero en ocasiones querremos hamburgueson_4automatizar el proceso, y podemos hacerlo de la siguiente forma:

$ convert -crop [ancho]x[alto]+[x]+[y]

Por ejemplo lo siguiente:

$ convert -crop 300×300+100+100

Creará una imagen de 300×300 y empezará a partir del punto 100×100 (desde la izquierda/arriba).

Bordes

hamburgueson_41Para añadir un borde podemos hacer lo siguiente:

$ convert -bordercolor [color] -border [ancho]x[alto] origen destino

En el ejemplo tenemos:

$ convert -bordercolor black -border 10×10 hamburgueson.jpg hamburgueson_borde.jpg

Para especificar el color podemos hacerlo de varias formas:

$ convert -bordercolor black/red/green/blue… # Por su nombre. Si queremos saber los nombres de color disponibles:

$ convert -list color

$ convert -bordercolor “#aacc11″ # Por su equivalente hexadecimal

$ convert -bordercolor “rgb(100,150,200)” # En función de sus valores RGB

$ convert -bordercolor “hsl(100,150,200)” # En función de sus valores HSL

$convert -bordercolor “cmyk(100,200,150,230)” # En función de sus valores CMYK

… etcétera… tantos formatos como espacios de color.

Ahora bien, queremos quitar el reborde añadido:

$ convert -trim hamburgueson_borde.jpg hamburgueson_nuevo.jpg

Pero es posible que por la compresión jpeg no se detecte bien el borde (es una compresión con pérdida de calidad, y se modifica la imagen; para nosotros el borde es negro, pero para el ordenador hay muchos tonos de negro), entonces podemos hacer lo siguiente:

$ convert -fuzz 10% -trim hamburgueson_borde.jpg hamburgueson_nuevo.jpg

Con esto damos una tolerancia de un 10% al color, es decir, si se parecen los tonos de negro en menos de un 10% serán considerados iguales.

hamburgueson_42También podemos añadir un biselado como el del ejemplo de la siguiente manera:

$ convert -mattecolor red -frame 20×20+10+10 hamburgueson.jpg hamburgueson_rojo.jpg

Filtros y efectos

hamburgueson_32Por si fuera poco, podemos aplicar los filtros típicos a las imágenes como blur, motion-blur, blur gaussiano (gaussian-blur), ruido (noise), carboncillo (charcoal).

En el ejemplo, se ha añadido motion-blur de la siguiente forma:

$ convert -motion-blur 10×40+10+0 hamburgueson.jpg hamburgueson_movido.jpg

Visita otras webs de la red