Какой лучший способ сделать анимированный GIF с использованием алгоритма?
У меня есть алгоритм для конных туров на шахматных досках разных размеров (больших размеров, например, 100х100), и я хотел бы оживить результат. Каждый раз, когда конь перемещается в новый квадрат, соответствующий пиксель в (квадратном) холсте будет менять цвета, пока в конечном итоге не будет окрашен весь холст. Полученные фильмы будут доступны для просмотра на веб-странице об алгоритме.
Анимированные GIF-файлы кажутся лучшим способом, если мне нужна широкая поддержка браузера (хотя другие предложения приветствуются). Какой лучший инструмент или библиотека для этого? Я счастлив использовать все, что свободно доступно на компьютере Linux или Mac.
Реальный алгоритм слишком длинный, чтобы сделать полезный пример здесь (см. Этот документ, если вам действительно любопытно), но вот псевдокод для (скучного) тура короля на доске 8x8:
movie = new Movie()
frame = new Frame()
frame.fillRectangle((1,1), 8, 8, BLUE)
for row in [1..8] {
if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] }
for col in colrange {
frame.colourPixel(row, col, RED)
movie.addFrame(frame)
}
}
movie.saveAsGIF("tour.gif")
Вопрос о дополнительном кредите: можем ли мы воспользоваться преимуществами этого фильма, чтобы уменьшить размер файла? Статья в Википедии предполагает, что мы могли бы сделать это, если мы меняем только некоторые пиксели - фактически мы меняем только один на кадр!
2 ответа
Вы можете использовать giflib для достижения этой цели. Документация находится в загрузке.
Например, эта страница содержит анимированные GIF-файлы, созданные с использованием giflib и исходного кода для программы, используемой для создания анимации. Может быть полезно увидеть, как использовать giflib для анимации.
Редактировать: Другая альтернатива, если вы не возражаете против некоторой постобработки, это просто вывести ваши кадры в простом формате ( например, PPM), а затем сделать анимированный GIF-файл с помощью ImageMagick.
Что касается вашего дополнительного вопроса о кредитоспособности: ImageMagick может даже сделать сравнение кадров для вас, чтобы уменьшить размер вывода.
В ответ на дополнительный вопрос о кредитоспособности вы могли бы сделать это улучшение самостоятельно, только нарисовав измененную часть изображения на новых кадрах и установив остальную часть прозрачной.