2009-06-03 14 views
5

Ho un algoritmo per i tour dei cavalieri su scacchiere di varie dimensioni (grandi dimensioni, come 100x100) e mi piacerebbe animare il risultato. Ogni volta che il cavaliere si sposta in un nuovo quadrato, un pixel corrispondente nella tela (quadrata) cambierà i colori, fino a quando tutta la tela sarà colorata. I filmati risultanti saranno disponibili per la visualizzazione su una pagina Web relativa all'algoritmo.Qual è il modo migliore per creare una GIF animata utilizzando un algoritmo?

Le GIF animate sembrano il metodo migliore se desidero un ampio supporto per il browser (sebbene altri suggerimenti siano benvenuti). Qual è il miglior strumento o libreria con cui fare questo? Sono felice di usare tutto ciò che è liberamente disponibile su un computer Linux o Mac.

L'algoritmo attuale è troppo lungo per fare un esempio utile qui (vedi this paper se siete veramente curiosi) ma ecco pseudocodice per giro un (noioso) del re su una scheda 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") 

Domanda extra credito: possiamo usufruire delle funzionalità speciali di questo film per ridurre le dimensioni del file? Il Wikipedia article suggerisce che potremmo essere in grado di farlo, se cambiamo solo alcuni dei pixel - in effetti ne cambiamo solo uno per fotogramma!

+0

Non utilizzare gif animate. Converti invece in un formato film, la compressione sarà molto più alta –

+0

Che formato suggerisci e con quale strumento creo? –

+0

I livelli di compressione dipendono da molte cose. Per le immagini semplici le gif andranno bene. Inoltre, la dimensione potrebbe non essere tanto preoccupante quanto la semplicità. Le gif animate non sono una tecnologia meravigliosa, ma sono ben supportate. – Naaff

risposta

4

È possibile utilizzare giflib per ottenere ciò. La documentazione è nel download.

Ad esempio, this page contiene gif animate create con giflib e codice sorgente nel programma utilizzato per generare le animazioni. Potrebbe essere utile vedere come usare giflib per le animazioni.

Edit: Un'altra alternativa, se non ti dispiace un po 'di post-elaborazione, è semplicemente uscita i fotogrammi utilizzando un formato semplice (such as PPM) e poi make the animated gif using ImageMagick.

Come per la domanda di credito extra: ImageMagick può anche fare frame comparisons per ridurre la dimensione dell'output.

+1

Grazie per questo. Sto pensando di prendere la tua seconda opzione: usare Python Image Library per disegnare una collezione di .gifs e poi ImageMagick per metterli insieme in un'animazione (ottimizzata). –

0

In risposta alla domanda di credito extra, è possibile eseguire personalmente questo miglioramento, semplicemente disegnando la parte modificata dell'immagine sui nuovi fotogrammi e impostando il resto in modo che sia trasparente.

+0

Capito. Sembra che ImageMagick faccia il confronto e l'ottimizzazione per me, ma posso farlo manualmente se non sembra funzionare. –

Problemi correlati