Comment convertir une bande PNG en GIF?

12

Donc, j'ai fait cette animation dans un programme, cependant, il ne semble pas prendre en charge l'exportation en tant que séquence PNG afin que je puisse la convertir en GIF. L'animation comprend plus de 100 images, donc l'enregistrement de chaque image une par une prendra des années. Cependant, il prend en charge l'exportation en tant que «bande», ce qui est comme un film de cinéma. Chaque image de l'animation a les mêmes dimensions. Voici comment fonctionne la fonction "strip" du programme.

Les images de l'animation sont empilées horizontalement, la première image étant à l'extrême gauche tandis que la dernière image est à l'extrême droite. Il n'y a pas d'espace entre les images et le nom du fichier est généralement "name_stripX.png" si l'animation comporte X images. Si chaque image était de 32 par 32 et que l'animation avait 8 images, ce fichier aurait une largeur de 256 et une hauteur de 32.

Voici un exemple de sortie, chaque couleur remplit une image:

Exemple de sortie

Aussi, juste pour clarifier un peu les choses, le programme s'appelle "Game Maker 8.0".

user245115
la source

Réponses:

16

Vous pouvez utiliser ImageMagick pour convertir des images de différentes manières, et il devrait pouvoir le faire assez facilement. D'abord, vous pouvez diviser en parties (en original.pngétant l'image source, et dans ce cas en taille 32x32pixels):

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

Vous pouvez ensuite le convertir en animation (à utiliser -loop 1si vous ne voulez pas qu'il boucle):

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

Résultant en:

Les PNG de sortie de la première commande ont un décalage inclus, donc sans l' -page +0+0option, l'animation se termine comme:

Il existe diverses autres options que vous pouvez inclure (principalement dans la deuxième commande), telles que -delayetc - vous pouvez également optimiser l'animation afin qu'elle soit plus petite (et plus rapide à charger / rendre) - par exemple empruntée à partir d' ici :

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

ou en utilisant gifsicle

gifsicle -O output.gif -o optimised.gif

EDIT: Si les cadres sont transparents, vous pouvez définir les cadres à remplacer en ajoutant l'
-dispose Backgroundoption, donc quand un cadre est éliminé lorsque le suivant est chargé:


Exemple ci-dessus fait sans l' pageoption pour qu'il apparaisse clairement

Le problème est que vous ne pouvez probablement pas optimiser l'image résultante alors - une autre façon peut être de rendre les cadres opaques afin que le cadre suivant recouvre le précédent.

Wilf
la source
L'image a de la transparence, et en gros, il s'agit simplement de tracer l'image suivante sur la précédente, est-il possible de la faire pour qu'elle dessine l'image suivante sur un blanc?
user245115
Supprimer la transparence de l'image source est la méthode la plus simple. Mais cela peut être fait avec plus de paramètres.
david6
@ user245115 - remplacez les cadres au lieu de les superposer - voir modifier.
Wilf