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.