web-dev-qa-db-fra.com

Comment convertir une bande PNG en GIF?

Donc, j'ai créé cette animation dans un programme, cependant, elle ne semble pas supporter l'exportation en tant que séquence PNG afin que je puisse la convertir en GIF. L'animation compte plus de 100 images. Il faudra donc une éternité pour enregistrer chaque image une par une. Cependant, il prend en charge l'exportation en tant que "bande", ce qui ressemble à un film. Chaque image dans l'animation a les mêmes dimensions. Voici comment la fonctionnalité "strip" du programme fonctionne.

Les images de l'animation sont empilées horizontalement, la première image étant l'extrême gauche et la dernière image étant 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 contient X images. Si chaque image faisait 32 sur 32 et que l'animation comportait 8 images, ce fichier aurait une largeur de 256 et une hauteur de 32.

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

Example Output

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

11
user245115

Vous pouvez utiliser ImageMagick pour convertir les images de différentes manières, et cela devrait pouvoir se faire assez facilement. Tout d’abord, vous pouvez diviser en parties (_original.png_ étant l’image source, et dans ce cas 32 x 32 pixels):

_convert original.png -crop 32x32 parts-%02d.png
_

Vous pouvez ensuite le convertir en une animation (utilisez _-loop 1_ si vous ne voulez pas qu'il soit en boucle):

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

Résultant en:

Les fichiers PNG en sortie de la première commande ont un décalage inclus. Par conséquent, sans l'option _-page +0+0_, l'animation se termine comme suit:

Il existe diverses autres options que vous pouvez inclure (principalement dans la deuxième commande), telles que -delay etc - vous pouvez aussi optimiser l'animation pour qu'elle soit plus petite ( et plus rapide à charger/rendre) - par exemple emprunté à 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 le
_-dispose Background_ option, donc lorsqu'un cadre est supprimé lors du chargement du suivant:

 
L'exemple ci-dessus est fait sans l'option page, ce qui montre clairement

Le problème avec ceci est que vous ne pouvez probablement pas optimiser beaucoup l'image résultante. Un autre moyen peut donc être de rendre les images opaques pour que l'image suivante recouvre l'image précédente.

16
Wilf