Como converter uma faixa PNG em um GIF?

11

Então, eu fiz essa animação em um programa, no entanto, ela não parece suportar a exportação como uma sequência PNG para que eu possa convertê-la em um GIF. A animação é de mais de 100 quadros, portanto, salvar cada imagem uma a uma levará tempo. No entanto, ele suporta a exportação como uma "tira", que é como um filme. Cada imagem na animação tem as mesmas dimensões. Veja como funciona o recurso "strip" do programa.

As imagens na animação são empilhadas horizontalmente, o primeiro quadro é a extrema esquerda enquanto o último quadro é a extrema direita. Não há intervalos entre os quadros, e o nome do arquivo geralmente é "name_stripX.png" se a animação tiver X frames. Se cada quadro fosse 32 por 32 e a animação tivesse 8 quadros, esse arquivo teria uma largura de 256 e uma altura de 32.

Aqui está um exemplo de saída, cada cor preenche um quadro:

Além disso, apenas para esclarecer um pouco mais, o programa é chamado de "Game Maker 8.0".

    
por user245115 13.06.2015 / 23:19

1 resposta

16

Você pode usar o ImageMagick para converter imagens de várias maneiras, e isso deve ser possível com bastante facilidade. Primeiro, você pode dividir em partes ( original.png sendo a imagem de origem e, neste caso, 32x32 pixels de tamanho):

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

Você pode então convertê-lo em uma animação (use -loop 1 se você não quiser que ele faça um loop):

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

Como resultado:

  

Os PNGs de saída do primeiro comando têm um deslocamento incluído neles, portanto, sem a opção -page +0+0 , a animação termina como:

  

Existem várias outras opções que você pode incluir (principalmente no segundo comando), como -delay etc - você também pode otimizar a animação , por isso é menor (e mais rápido para carregar / render) - por exemplo emprestado de aqui :

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

ou usando gifsicle

gifsicle -O output.gif -o optimised.gif

EDITAR: Se os quadros forem transparentes, você poderá definir os quadros a serem substituídos adicionando a opção -dispose Background , portanto, quando um quadro for eliminado quando o próximo for carregado:

  


Exemplo acima feito sem a opção page para que seja mostrado claramente

O problema com isso é que você provavelmente não pode otimizar a imagem resultante - então outra maneira pode ser tornar os quadros opacos, de modo que o próximo quadro cubra o anterior.

    
por Wilf 13.06.2015 / 23:53