Efecto rodillo con ImageMagick

Con el operador -roll desplazamos una determinada cantidad de píxeles a izquierda, derecha, arriba o abajo, corta esa cantidad de píxeles y los coloca en el lado opuesto. Como si tuviéramos la imagen en un rodillo y lo fuéramos girando. A medida que vamos girando el rodillo, la parte desplazada de la derecha pasa a estar en la izquierda.

Es un operador complicado de explicar con palabras, pero con imágenes lo veremos muy fácilmente. Partiremos de esta imagen:

Grafiti en Zaragoza

 

Con el comando -roll trabajaremos con dos valores, que pueden ser positivos o negativos, pero siempre tenemos que indicar con + y con – el desplazamiento a realizar. Si no lo indicamos, nos dará un error:

$ convert grafiti.jpg -roll 0+50 grafiti_0_50.jpg
convert-im6.q16: invalid argument for option `-roll': 0+50 @ error/convert.c/ConvertImageCommand/2610.

El primero de los valores es el desplazamiento horizontal, que si es positivo, desplazará hacia la derecha:

convert grafiti.jpg -roll +200+0 grafiti_200_0.jpg

Y si es negativo, desplazará hacia la izquierda:

convert grafiti.jpg -roll -200+0 grafiti_-200_0.jpg

convert grafiti.jpg -roll -200+0 grafiti_-200_0.jpg

 

El segundo valor es el desplazamiento vertical, con un valor positivo desplaza la imagen hacia abajo:

convert grafiti.jpg -roll +0+50 grafiti_0_50.jpg

convert grafiti.jpg -roll +0+50 grafiti_0_50.jpg

Y con un valor negativo, desplaza la imagen hacia arriba:

convert grafiti.jpg -roll +0-50 grafiti_0_-50.jpg

convert grafiti.jpg -roll +0-50 grafiti_0_-50.jpg

 

Vídeos con -roll

Este operador donde tiene su aplicación más potente es a la hora de hacer vídeos y animaciones tanto con una como con varias imágenes.

Veamos cómo hacer un gif que rote una imagen:

#!/bin/bash

width=$(identify -format %w $1)
height=$(identify -format %h $1)
step=5

for (( pos=0; pos<=$width; pos=$pos+$step ))
do
    convert $1 -roll +$pos+0 -extent ${height}x${height} png:-
done | ffmpeg -f image2pipe -i - ${1%%.*}.gif

 

 

 

Y generando una transición entre dos imágenes:

#!/bin/bash

width=$(identify -format %w $1)
height=$(identify -format %h $1)
step=5
filetemp="/tmp/${1%%.*}-${2%%.*}.png"

convert $1 $2 +append $filetemp

for (( pos=0; pos<=$width; pos=$pos+$step ))
do
    convert $filetemp -roll +$pos+0 -extent ${width}x${height} png:-
done | ffmpeg -f image2pipe -i - ${1%%.*}-${2%%.*}.gif

 

 

Deja una respuesta

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