Как преобразовать полосу PNG в GIF?

12

Итак, я сделал эту анимацию в программе, однако она не поддерживает экспорт в виде последовательности PNG, поэтому я мог преобразовать ее в GIF. Анимация состоит из более 100 кадров, поэтому сохранение каждого изображения по очереди займет много времени. Тем не менее, он поддерживает экспорт в виде «полосы», которая похожа на фильм. Каждая картинка в анимации имеет одинаковые размеры. Вот как работает функция "полосы" программы.

Изображения в анимации располагаются горизонтально, первый кадр - крайний левый, а последний - крайний правый. Между кадрами нет пропусков, а имя файла обычно равно «name_stripX.png», если анимация содержит X кадров. Если бы каждый кадр был 32 на 32, а анимация имела 8 кадров, этот файл имел бы ширину 256 и высоту 32.

Вот пример выходных данных, каждый цвет заполняет один кадр:

Пример вывода

Кроме того, чтобы немного прояснить ситуацию, программа называется «Game Maker 8.0».

user245115
источник

Ответы:

16

Вы можете использовать ImageMagick для преобразования изображений различными способами, и это должно быть достаточно легко. Сначала вы можете разделить на части ( original.pngявляясь исходным изображением, и в данном случае размером 32x32 пикселей):

convert original.png -crop 32x32 parts-%02d.png

Затем вы можете преобразовать его в анимацию (используйте, -loop 1если вы не хотите, чтобы он зацикливался):

convert -loop 0 -page +0+0 ./parts*.png output.gif

В результате чего:

Выходные PNG первой команды имеют смещение, включенное в них, поэтому без -page +0+0опции анимация заканчивается примерно так:

Существуют различные другие опции , которые могут включать в себя ( в основном во второй команде), например и -delayт.д. - вы можете также оптимизировать анимацию , так что меньше (и быстрее загрузки / визуализации) - например , заимствованные из здесь :

convert output.gif -fuzz 10% -layers Optimize optimised.gif

или используя gifsicle

gifsicle -O output.gif -o optimised.gif

РЕДАКТИРОВАТЬ: Если кадры прозрачны, вы можете установить кадры для замены, добавив
-dispose Backgroundопцию, поэтому, когда кадр удаляется при загрузке следующего:


Приведенный выше пример сделан без pageопции, поэтому он четко показывает

Проблема с этим заключается в том, что вы, вероятно, не сможете оптимизировать полученное изображение в таком случае, поэтому другим способом может быть создание непрозрачных кадров, чтобы следующий кадр покрывал предыдущий.

Уилф
источник
Изображение имеет прозрачность, и в основном оно просто рисует следующий кадр поверх предыдущего, есть ли способ, которым я могу сделать так, чтобы он рисовал следующий кадр поверх пустого?
user245115
Удалить прозрачность из исходного изображения - самый простой метод. Но это можно сделать с большим количеством параметров.
Давид6
@ user245115 - заменить кадры вместо наложения - см. редактирование.
Уилф