Оператор ImageMagick «-rotate» увеличивает выходные размеры, поэтому все входное изображение по-прежнему вписывается в выходные данные. Это дает результаты с различными размерами для разных углов поворота. Использование плюсовой формы "+ distort SRT" будет иметь тот же эффект.
И "-distort SRT" будет вращать изображение по центру внутри его входных размеров, но это будет срезать углы, когда они вращаются за пределами исходного кадра.
Существует способ несколько раз повернуть изображение, поворачивая его по центральной точке и в окне просмотра, в котором размещается все изображение, даже когда оно повернуто.
Устанавливая имя входного изображения «$ image», количество кадров «$ f» и задержку на кадр «$ d», команда, подобная этой, может делать все, что делает цикл «для», исключая при этом запись и чтение временных файлов. Это выглядит сложнее, чем есть на самом деле ...
image=input.jpg
f=20
d=50
convert -delay $d -dispose previous "$image" -background none -virtual-pixel none \
-duplicate $f +delete -set option:distort:viewport "%[fx:hypot(w,h)]x%[fx:hypot(w,h)]" \
-distort SRT "%[fx:w/2],%[fx:h/2] 1 %[fx:360/n*t] %[fx:hypot(w,h)/2],%[fx:hypot(w,h)/2]" \
out.gif
Эта команда будет читать входные данные "$ image", дублировать их, чтобы создать в общей сложности кадры "$ f", установить задержку на "$ d", повернуть каждое изображение на 360 / $ f "градусов больше, чем предыдущее и выведите окончательный результат в виде анимированного GIF-файла.