Come convertire una striscia PNG in GIF?


12

Quindi, ho creato questa animazione in un programma, tuttavia, non sembra supportare l'esportazione come sequenza PNG, quindi potrei convertirla in GIF. L'animazione è di oltre 100 fotogrammi, quindi il salvataggio di ogni immagine una per una richiederà anni. Tuttavia, supporta l'esportazione come "striscia", che è come un film. Ogni immagine nell'animazione ha le stesse dimensioni. Ecco come funziona la funzione "strip" del programma.

Le immagini nell'animazione sono impilate orizzontalmente, il primo fotogramma è all'estrema sinistra mentre l'ultimo fotogramma è all'estrema destra. Non ci sono spazi vuoti tra i frame e il nome del file di solito è "name_stripX.png" se l'animazione ha X frame. Se ogni fotogramma fosse 32 per 32 e l'animazione avesse 8 fotogrammi, questo file avrebbe una larghezza di 256 e un'altezza di 32.

Ecco un esempio di output, ogni colore si riempie in un frame:

Esempio di output

Inoltre, solo per chiarire un po 'di più le cose, il programma si chiama "Game Maker 8.0".

Risposte:


16

È possibile utilizzare ImageMagick per convertire le immagini in vari modi e dovrebbe essere in grado di farlo abbastanza facilmente. Per prima cosa puoi dividere in parti ( original.pngessendo l'immagine sorgente, e in questo caso dimensioni 32x32 pixel):

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

È quindi possibile convertirlo in un'animazione (utilizzare -loop 1se non si desidera che il ciclo):

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

Con il risultato di:

I PNG di output del primo comando hanno un offset incluso in essi, quindi senza l' -page +0+0opzione l'animazione finisce come:

Esistono diverse altre opzioni che puoi includere (principalmente nel secondo comando), come ad esempio -delayecc. Puoi anche ottimizzare l'animazione in modo che sia più piccola (e più veloce da caricare / renderizzare) - ad esempio, presa in prestito da qui :

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

o usando gifsicle

gifsicle -O output.gif -o optimised.gif

EDIT: Se i frame sono trasparenti, è possibile impostare i frame da sostituire aggiungendo l'
-dispose Backgroundopzione, quindi quando un frame viene eliminato quando viene caricato il successivo:


Esempio sopra fatto senza l' pageopzione, quindi mostra chiaramente

Il problema è che probabilmente non puoi ottimizzare molto l'immagine risultante, quindi un altro modo potrebbe essere quello di rendere opachi i fotogrammi in modo che il fotogramma successivo copra quello precedente.


L'immagine ha trasparenza, e in pratica sta solo disegnando il fotogramma successivo su quello precedente, c'è un modo in cui posso farlo in modo da disegnare il fotogramma successivo su uno spazio vuoto?
user245115

Rimuovere la trasparenza dall'immagine sorgente è il metodo più semplice. Ma può essere fatto con più parametri.
david6

@ user245115 - sostituisci i frame invece di sovrapporre - vedi modifica.
Wilf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.