Efecto remolino en ImageMagick

Con ImageMagick podemos crear un efecto remolino sobre una imagen con el operador -swirl, que deforma la imagen en círculo el número de grados que le pasemos como argumento.

Para ver este efecto, vamos a crear una imagen que tenga cuatro cuadros, dos rojos y dos azules:

convert \( -size 400x222 xc:Red xc:Blue -append \) \( xc:Blue xc:Red -append \) +append rojoyazul.jpg

convert \( -size 400x223 xc:Red xc:Blue -append \) \( xc:Blue xc:Red -append \) +append rojoyazul.jpg

Como el valor que le indicamos a -swirl es el número de grados que ha de girar el remolino, cuanto mayor sea este valor, mayor será remolino. Así, si le damos un valor de 45 el efecto será menor que, de 180:

convert rojoyazul.jpg -swirl 45 rojoyazul_swirl_45.jpg

convert rojoyazul.jpg -swirl 45 rojoyazul_swirl_45.jpg

convert rojoyazul.jpg -swirl 180 rojoyazul_swirl_180.jpg

convert rojoyazul.jpg -swirl 180 rojoyazul_swirl_180.jpg

Aunque el valor indicado sea en grados, podemos pasarle un valor superior a 360, no se limita a un círculo:

convert rojoyazul.jpg -swirl 400 rojoyazul_swirl_400.jpg

convert rojoyazul.jpg -swirl 400 rojoyazul_swirl_400.jpg

Incluso un valor extremadamente alto, como 800:

convert rojoyazul.jpg -swirl 800 rojoyazul_swirl_800.jpg

convert rojoyazul.jpg -swirl 800 rojoyazul_swirl_800.jpg

Tampoco tiene que preocuparnos el tamaño de la imagen original, ya que -swirl nunca desborda ese tamaño. Veámoslo con un valor muy superior al número de píxeles tanto de la anchura como de la altura de la imagen original, como puede ser 2800:

convert rojoyazul.jpg -swirl 2800 rojoyazul_swirl_2800.jpg

convert rojoyazul.jpg -swirl 2800 rojoyazul_swirl_2800.jpg

Como vemos, lo único que hace es que las ondas del remolino sean más finas, y con mayor número de giros, pero no desborda, por lo  que siempre tenemos la seguridad de que las esquinas van a quedar encuadradas en  la imagen.

Y, como siempre que podemos indicarle un valor a un parámetro de ImageMagick, podemos animar la imagen:

#!/bin/bash

for x in 1
do
    for i in {0..360..2}
    do 
        convert $1 -swirl $i png:-
    done
    for i in {359..1..2}
    do 
        convert $1 -swirl $i png:-
    done
done | ffmpeg -f image2pipe -i - ${1%%.*}.gif

Que, pasándole como argumento la imagen con la que hemos trabajado en este artículo, nos genera una animación como esta:

 

 

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.