2009-06-03 8 views
5

Ich habe einen Algorithmus für Ritters Touren auf Schachbrettern verschiedener Größen (große Größen, wie 100x100) und ich möchte das Ergebnis animieren. Jedes Mal, wenn sich der Springer zu einem neuen Quadrat bewegt, ändert ein entsprechendes Pixel in der (quadratischen) Leinwand die Farben, bis schließlich die gesamte Leinwand eingefärbt ist. Die resultierenden Filme können auf einer Webseite über den Algorithmus betrachtet werden.Was ist der beste Weg, um ein animiertes GIF mit einem Algorithmus zu erstellen?

Animierte GIFs scheinen die beste Methode zu sein, wenn ich eine breite Browserunterstützung möchte (obwohl andere Vorschläge willkommen sind). Was ist das beste Werkzeug oder die beste Bibliothek? Ich bin froh, alles verwenden zu können, was auf einem Linux- oder Mac-Computer frei verfügbar ist.

Der eigentliche Algorithmus ist zu lang, um hier ein nützliches Beispiel zu machen (siehe this paper wenn Sie wirklich neugierig sind), aber hier ist Pseudo-Code für einen (langweilig) Tour des Königs auf einem 8x8-Brett:

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") 

Extra-Kredit-Frage: können wir die speziellen Funktionen dieses Films nutzen, um die Dateigröße zu reduzieren? Die Wikipedia article schlägt vor, dass wir das vielleicht können, wenn wir nur einige der Pixel ändern - tatsächlich ändern wir nur eine pro Bild!

+0

Verwenden Sie keine animierten Gifs. Konvertieren Sie es stattdessen in ein Filmformat, die Komprimierung wird viel höher –

+0

Welches Format schlagen Sie vor, und welches Werkzeug, um es zu schaffen? –

+0

Komprimierungsstufen hängen von vielen Dingen ab. Für einfache Bilder werden GIFs gut funktionieren. Außerdem ist die Größe vielleicht nicht so wichtig wie die Einfachheit. Animierte Gifs sind keine wundervolle Technologie, aber sie werden gut unterstützt. – Naaff

Antwort

4

Sie können dazu giflib verwenden. Dokumentation befindet sich im Download.

Als Beispiel enthält this page animierte Gifs, die mit giflib und Quellcode erstellt wurden, um das Programm zum Generieren der Animationen zu verwenden. Könnte hilfreich sein, um zu sehen, wie giflib für Animationen verwendet wird.

Edit: Eine weitere Alternative, wenn Sie nicht etwas Nachbearbeitung nichts ausmachen, ist, einfach Ausgabe Ihres Rahmen ein einfaches Format (such as PPM) und dann make the animated gif using ImageMagick.

Wie für Ihre zusätzliche Kredit-Frage: ImageMagick kann sogar frame comparisons für Sie, um die Größe der Ausgabe zu reduzieren.

+1

Danke dafür. Ich denke über die zweite Möglichkeit nach: Verwenden Sie Python Image Library, um eine Sammlung von .gifs zu zeichnen, und ImageMagick, um sie zu einer (optimierten) Animation zusammenzufassen. –

0

Als Antwort auf Ihre Frage zum zusätzlichen Guthaben können Sie diese Verbesserung selbst vornehmen, indem Sie nur den geänderten Teil des Bildes auf die neuen Rahmen zeichnen und den Rest transparent einstellen.

+0

Verstanden. Scheint wie ImageMagick wird den Vergleich und die Optimierung für mich tun, aber ich kann es manuell tun, wenn das nicht zu funktionieren scheint. –