¿Cómo convertir una tira PNG a un GIF?

12

Entonces, hice esta animación en un programa, sin embargo, no parece admitir la exportación como una secuencia PNG para poder convertirla en un GIF. La animación tiene más de 100 cuadros, por lo que guardar cada imagen una por una llevará años. Sin embargo, admite la exportación como una "tira", que es como una película de cine. Cada imagen en la animación tiene las mismas dimensiones. Así es como funciona la función de "tira" del programa.

Las imágenes en la animación se apilan horizontalmente, el primer cuadro es el extremo izquierdo mientras que el último cuadro es el extremo derecho. No hay espacios entre los cuadros, y el nombre del archivo generalmente es "name_stripX.png" si la animación tiene X cuadros. Si cada cuadro fuera de 32 por 32 y la animación tuviera 8 cuadros, este archivo tendría un ancho de 256 y una altura de 32.

Aquí hay un ejemplo de salida, cada color se llena en un cuadro:

Salida de ejemplo

Además, para aclarar un poco más las cosas, el programa se llama "Game Maker 8.0".

usuario245115
fuente

Respuestas:

16

Puede usar ImageMagick para convertir imágenes de diferentes maneras, y debería poder hacerlo con bastante facilidad. Primero puede dividirse en partes ( original.pngsiendo la imagen de origen, y en este caso de 32x32 píxeles de tamaño):

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

Luego puedes convertirlo en una animación (úsala -loop 1si no quieres que se repita):

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

Resultando en:

Los PNG de salida del primer comando tienen un desplazamiento incluido en ellos, por lo que sin la -page +0+0opción la animación termina como:

Hay otras opciones que puede incluir (principalmente en el segundo comando), como -delayetc., también puede optimizar la animación para que sea más pequeña (y más rápida de cargar / renderizar), por ejemplo, prestada desde aquí :

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

o usando gifsicle

gifsicle -O output.gif -o optimised.gif

EDITAR: si los marcos son transparentes, puede configurar los marcos para reemplazarlos agregando la
-dispose Backgroundopción, de modo que cuando se elimine un marco cuando se cargue el siguiente:


Ejemplo anterior hecho sin la pageopción para que se vea claramente

El problema con esto es que probablemente no pueda optimizar mucho la imagen resultante, por lo que otra forma puede ser hacer que los cuadros sean opacos para que el siguiente cuadro cubra el anterior.

Wilf
fuente
La imagen tiene transparencia, y básicamente solo está dibujando el siguiente fotograma sobre el anterior, ¿hay alguna forma de que pueda hacerlo para que dibuje el siguiente fotograma en blanco?
user245115
Eliminar la transparencia de la imagen de origen es el método más fácil. Pero se puede hacer con más parámetros.
david6
@ user245115 - reemplace los marcos en lugar de superponer - vea editar.
Wilf