Qual é a melhor maneira de fazer um GIF animado usando um algoritmo?
Pergunta
Eu tenho um algoritmo para passeios de cavaleiro em tabuleiros de vários tamanhos (tamanhos grandes, como 100x100) e eu gostaria de animar o resultado. Cada vez que o cavaleiro se move para uma nova casa, um pixel correspondente na tela (quadrado) vai mudar as cores, até que finalmente toda a tela é colorida. Os filmes resultantes estarão disponíveis para visualização em uma página da web sobre o algoritmo.
GIFs animados parece ser o melhor método se eu quiser um amplo apoio navegador (embora outras sugestões são bem-vindos). Qual é a melhor ferramenta ou biblioteca para fazer isso com? Estou feliz de usar qualquer coisa que está disponível gratuitamente em um computador Linux ou Mac.
O algoritmo real é muito tempo para fazer um exemplo útil aqui (veja este papel se você estiver realmente curioso), mas pseudocódigo está aqui para um (chato) do rei visita em uma placa 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")
questão Extra-crédito: podemos tirar proveito das características especiais deste filme para reduzir o tamanho do arquivo? O artigo href="http://en.wikipedia.org/wiki/Graphics_Interchange_Format#Animated_.gif" rel="noreferrer"> Wikipedia sugere que pode ser capaz de fazer isso, se estamos apenas mudando alguns dos pixels - na verdade estamos apenas mudando um por quadro
Solução
Você pode usar giflib para alcançar este objetivo. Documentação está no download.
gifsComo exemplo, desta página contém animados criado usando giflib e código-fonte para o programa usado para gerar as animações. Pode ser útil para ver como usar giflib para animações.
Editar: Outra alternativa, se você não se importa um pouco de pós-processamento, é simplesmente saída de seus quadros usando um formato simples ( como o PPM ) e, em seguida, fazer o gif animado usando ImageMagick .
Quanto à sua pergunta crédito extra: ImageMagick pode até fazer quadro comparações para -lo a reduzir o tamanho da saída.
Outras dicas
Em resposta à sua pergunta de crédito extra, você poderia fazer isso melhora-se apenas por desenhar a parte alterada da imagem sobre os novos quadros e definir o resto para ser transparente.