Wie konvertiere ich einen PNG-Streifen in ein GIF?


12

Ich habe diese Animation in einem Programm erstellt, sie scheint jedoch den Export als PNG-Sequenz nicht zu unterstützen, sodass ich sie in ein GIF konvertieren kann. Die Animation umfasst mehr als 100 Bilder, sodass das Speichern jedes einzelnen Bilds einige Zeit in Anspruch nimmt. Es unterstützt jedoch den Export als "Streifen", der einem Film ähnelt. Jedes Bild in der Animation hat die gleichen Abmessungen. So funktioniert die "Strip" -Funktion des Programms.

Die Bilder in der Animation sind horizontal gestapelt, wobei das erste Bild ganz links und das letzte Bild ganz rechts ist. Es gibt keine Lücken zwischen den Frames und der Dateiname lautet normalerweise "name_stripX.png", wenn die Animation X Frames enthält. Wenn jedes Bild 32 mal 32 groß wäre und die Animation 8 Bilder hätte, hätte diese Datei eine Breite von 256 und eine Höhe von 32.

Hier ist eine Beispielausgabe, bei der jede Farbe einen Rahmen ausfüllt:

Beispielausgabe

Um die Dinge ein wenig klarer zu machen, heißt das Programm "Game Maker 8.0".

Antworten:


16

Sie können ImageMagick verwenden , um Bilder auf unterschiedliche Weise zu konvertieren, und dies sollte problemlos möglich sein. Zuerst können Sie in Teile aufteilen ( original.pngdas Quellbild und in diesem Fall 32 x 32 Pixel groß):

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

Sie können es dann in eine Animation konvertieren (verwenden -loop 1Sie es, wenn Sie nicht möchten, dass es sich wiederholt):

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

Ergebend:

In den Ausgabe-PNGs des ersten Befehls ist ein Versatz enthalten, sodass -page +0+0die Animation ohne die Option wie folgt endet:

Es gibt verschiedene andere Optionen , die Sie (vor allem im zweiten Befehl), wie einschließen -delayetc - Sie können auch die Animation optimieren , so dass es kleiner ist (und schneller Lade- / Render) - zB entlehnt von hier :

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

oder mit Gifsicle

gifsicle -O output.gif -o optimised.gif

BEARBEITEN: Wenn die Frames transparent sind, können Sie festlegen, dass die Frames ersetzt werden, indem Sie die
-dispose BackgroundOption hinzufügen. Wenn also ein Frame beim Laden des nächsten entsorgt wird:


Beispiel oben ohne die pageOption gemacht, damit es klar zeigt

Das Problem dabei ist, dass Sie das resultierende Bild dann wahrscheinlich nicht viel optimieren können. Eine andere Möglichkeit besteht darin, die Frames undurchsichtig zu machen, sodass der nächste Frame den vorherigen abdeckt.


Das Bild ist transparent und zeichnet im Grunde nur den nächsten Frame über den vorherigen. Gibt es eine Möglichkeit, wie ich es so gestalten kann, dass der nächste Frame über einen Rohling gezeichnet wird?
user245115

Das Entfernen der Transparenz aus dem Quellbild ist die einfachste Methode. Es kann aber mit mehr Parametern gemacht werden.
David6

@ user245115 - Ersetzen Sie die Frames anstatt sie zu überlagern - siehe Bearbeiten.
Wilf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.