Конвертировать лист спрайта в анимацию - PullRequest
2 голосов
/ 08 мая 2019

Кадры идут в порядке слева направо, сверху вниз, анимации идут последовательно, все кадры одинакового размера.

1234
5612
345

Мне нужна команда, которая будет принимать размер кадра, координатыпервого кадра и количество кадров в качестве входных данных и дать анимированный GIF в качестве вывода.Желательно без генерации промежуточных файлов.

Я мог бы сделать это, используя язык программирования, но разве нет способа сделать это проще с помощью инструмента командной строки, такого как ImageMagick или GraphicsMagick?Мне кажется, что это должно быть обычной задачей, но я нашел только вопросы о том, как конвертировать gif в спрайт, а не наоборот.

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

С помощью ImageMagick вы извлекаете каждое подизображение кадра с помощью -crop WxH +adjoin +repage, а затем анимируете кадры вместе.

Например, при заданном спрайте из 300x289 подизображений, как показано ниже ...

sprite

convert sprite.png -crop 300x289 +adjoin +repage -adjoin -loop 0 -delay 1 output.gif

output

См. Основы анимации , и Модификации анимации для других примеров.

1 голос
/ 09 мая 2019

Если вы установите переменные в вашей оболочке для ширины и высоты отдельного спрайта, смещений X и Y для начального спрайта и количества используемых спрайтов, команда ImageMagick, подобная этой, извлечет запрошенные спрайты излист и превратить их в анимированный GIF.

Это в синтаксисе Windows CMD ...

set WIDE=100
set HIGH=100

set XCOORD=100
set YCOORD=300

set FRAMES=5

convert spritesheet.png ^
   -set option:distort:viewport %[fx:%FRAMES%*%WIDE%]x%HIGH% ^
   -set option:slider %[fx:%YCOORD%*(w/%WIDE%)+%XCOORD%] ^
   -crop %WIDE%x%HIGH% +append +repage ^
   -distort affine "%[slider],0 0,0" ^
   -crop %WIDE%x%HIGH% +repage ^
   -set delay 50 -loop 0 result.gif

Переменные% WIDE% и% HIGH% являются размерами отдельного спрайта.

Переменные% XCOORD% и% YCOORD% - это смещения первого необходимого спрайта слева и сверху листа.

Переменная% FRAMES% - это общее количество спрайтов дляизвлечение.

Команда начинается с чтения входного листа.Он использует размеры входного изображения и предоставленные вами переменные, чтобы определить некоторые настройки для IM, которые будут использоваться позже.Во-первых, это размеры области просмотра, необходимой для выделения запрошенного числа спрайтов.Во-вторых, он вычисляет смещение, в котором первый спрайт будет после , когда лист будет обрезан на отдельные спрайты и добавлен в один горизонтальный ряд.

Затем он "-crop" помещает изображение вотдельные спрайты и "+ добавьте" их в один горизонтальный ряд.

Затем он использует "-distort affine" для перемещения целого ряда спрайтов на требуемое расстояние - "% [slider]" - влевонекоторое количество выходит из области просмотра, если необходимо, и уменьшает область просмотра, чтобы просто показать правильное количество спрайтов.

После этого оно снова обрезает это изображение в отдельные спрайты, устанавливает задержку для анимации и записываетoutput GIF.

Для сценария Windows BAT вам необходимо удвоить знак процента «%%» для переменных IM и выражений FX, но не для переменных оболочки, таких как% WIDE%.

Для * nix оболочки или скрипта вам нужно установить эти переменные и получить к ним доступ по-разному.Также вам нужно заменить символы продолжения строки «^» на обратную косую черту «\».

Для ImageMagick версии 7 запустите команду с «magick» вместо «convert».

Beforeзаписывая выходной GIF, вы захотите установить требуемый метод удаления, задержку и, возможно, «-loop 0».

...