O PIL não cria GIF's animados, apenas os lê.
Achei então um image2gif escrito por Almar Klein mas o script dele não cria GIF's com transparência.
Procurei formas alternativas usando o PIL como base e não achei nada, mas achei um código escrito em PHP por László Zsidi muito bom que faz exatamente o que estava procurando. Transcrevi o código pra Python e o resultado encontrasse abaixo para uso.
A classe trabalha com arquivos GIF da versão 87a e 89a. A dimensão final da imagem é baseada no primeiro frame.
GIF(frames, loops=0, dis=2, transparency=None)
- frames
- uma tupla com os frames onde o primeiro indice é o arquivo e o segundo indíce é o tempo do frame, o arquivo pode ser um open(..., 'rb'), caminho do arquivo relativo ou absoluto, ou uma string contendo o a imagem.
- loops
- Quantidade de repetições da animação, onde 0 é repetição contínua.
- dis
- Disposição de cada frame. Onde 0, 1 uma imagem é jogada em cima da outra respeitando a transparência. E 2, 3 o efeito cascata não é aplicado.
- transparency
- Cor que será considera a cor alpha da imagem, dando o efeito de transparência.
GIF.create_animation()
Retorna um buffer contendo a imagem GIF animada.Exemplo
from GIF import GIF frames = [ (open('410.gif', 'rb').read(), 40), (open('411.gif', 'rb'), 40), ('412.gif', 40), (open('413.gif', 'rb'), 40), (open('414.gif', 'rb'), 40), (open('415.gif', 'rb'), 40), (open('416.gif', 'rb'), 40), (open('417.gif', 'rb'), 40), ] gif = GIF(frames, 2, 3, (255, 0, 255)) image = gif.create_animation() # retorna o buffer da imagem open('animation.gif', 'w+b').write(image)
Download
GIF.7z (Python, 5kb)- GIF.py -- módulo
- 410.gif ~ 417.gif -- imagens de exemplo
- animationjoin.gif -- imagem de resultado final
Att, Gilson Fabiano
Nenhum comentário:
Postar um comentário