Modular el brillo, la saturación y el matiz con -modulate de ImageMagick
El modificador -modulate de ImageMagick, presente en convert (para aplicar los cambios en un nuevo fichero) y mogrify (para aplicar los cambios en el fichero de imagen original) permite modificar el brillo, la saturación y el matiz de una imagen. Según la documentación de ImageMagick, los tres valores que acepta, en el orden $brillo,$saturación,$matiz, tienen un rango de 0 a 200, siendo 100 el valor neutro. Veremos que no es así.
Brillo y saturación
Cuando a -modulate le pasamos un único valor, este modifica el brillo. Podemos quitar brillo a una imagen indicándole valores por debajo de 100 o subir el brillo con valores superiores a 100. Si le indicamos dos valores, modifica el brillo y la saturación. Para modificar la saturación, pero no el brillo, debemos indicar:
convert $imagen_original -modulate 100,$saturacion $imagen_destino
Modificar el brillo
Para ver de un manera bastante clara cómo modifica -modulate el brillo y la saturación de una imagen, partiremos de una imagen con bastante colorido:
Y, a partir de esa imagen, vamos a modificar primero el brillo. Vamos a ver primero cómo si aplicamos el valor mínimo (0) deja la imagen en negro, pero si aplicamos el máximo (200) aclara bastante la imagen sin llegar a dejarla en blanco:
convert grafiti_almozara.jpg -modulate 0 grafiti_almozara_0.jpg
convert grafiti_almozara.jpg -modulate 200 grafiti_almozara_200.jpg
A modo de curiosidad, vamos a ver que, independientemente de lo que diga la documentación de ImageMagick, podemos indicarle un valor superior a 200 y -modulate aplica una mayor modificación:
convert grafiti_almozara.jpg -modulate 500 grafiti_almozara_500.jpg
Pero, por lo general, los valores con los que operaremos con -modulate serán siempre cercanos a 100.
Veamos cómo modifica la imagen con 50 y con 150:
convert grafiti_almozara.jpg -modulate 50 grafiti_almozara_50.jpg
convert grafiti_almozara.jpg -modulate 150 grafiti_almozara_150.jpg
Modificar la saturación
Para modificar sólo la saturación, sin afectar al brillo, indicaremos el valor 100 para el brillo y otro valor para la saturación.
Con una saturación de 0, convertimos la imagen en una escala de grises:
convert grafiti_almozara.jpg -modulate 100,0 grafiti_almozara_100_0.jpg
Con un valor superior a 0 e inferior a 100, los colores aparecerán apagados:
convert grafiti_almozara.jpg -modulate 100,50 grafiti_almozara_100_50.jpg
A mayor valor en la saturación, mayor será la intensidad de los colores:
convert grafiti_almozara.jpg -modulate 100,150 grafiti_almozara_100_150.jpg
Cambiar el tono de la imagen
Para el tono (hue) también el rango va de 0 a 200, modificando los colores distintos al blanco y al negro mediante una rueda cromática.
Vamos a ver algunos ejemplos sobre una única imagen, pero podemos ver con mayor claridad esa rueda cromática si creamos un vídeo.
Primero, vamos a generar una imagen con distintos valores:
convert grafiti_almozara.jpg -modulate 100,100,0 grafiti_almozara_0.jpg
convert grafiti_almozara.jpg -modulate 100,100,40 grafiti_almozara_40.jpg
convert grafiti_almozara.jpg -modulate 100,100,160 grafiti_almozara_160.jpg
Y ahora vamos a ver cómo hacer un vídeo que gire cinco veces la rueda cromática yendo del 0 al 1000 (200×5):
#!/bin/bash if identify $1 > /dev/null 2>&1 then withoutextension="${1%%.*}" for i in {0..200} do convert $1 -modulate 100,100,$i png:- done | ffmpeg -f image2pipe -i - $withoutextension.mp4 else echo "You must write a valid image file." exit 1 fi
Con if identify $1 > /dev/null 2>&1
comprobamos si es un fichero válido de imagen.
La línea convert $1 -modulate 100,100,$i png:-
indica que no genere un nuevo fichero, sino que envíe la imagen a la tubería posterior que la recibirá ffmpeg -f image2pipe -i - $withoutextension.mp4
generando un vídeo cuyo nombre de fichero será el mismo de la imagen pero con extensión .mp4.
Pingback: Posterizar una imagen con ImageMagick – Linux en Español