Você pode fazer isso com o GIFsicle , usando as seguintes opções:
gifsicle -U --disposal=previous --transparent="#ffffff" -O2 anim.gif > anim_trans.gif
onde anim.gif
e anim_trans.gif
são os nomes dos arquivos de origem e de destino e #ffffff
é o código hexadecimal da cor que você deseja tornar transparente (aqui, branco puro).
(As opções importantes aqui são -U
/ --unoptimize
e --disposal=previous
, que juntas convertem a animação no "modo flipbook", onde cada quadro é totalmente apagado antes de desenhar o próximo. Isso permite que mais transparência seja adicionada aos quadros sem permitir que os quadros anteriores apareçam no A -O2
opção não é estritamente necessária, mas é provável que diminua o tamanho do arquivo da animação resultante, otimizando os quadros para evitar redesenhar desnecessariamente partes estáticas da animação.)
Para uma demonstração, aqui está uma animação da enzima glioxalase I humana (GLO1) do Wikimedia Commons (à esquerda) e a mesma animação com transparência adicionada usando o método mostrado acima (à direita):
Animação original do usuário do Wikimedia Commons WillowW , usada sob a licença CC-By 3.0 .
Um detalhe digno de nota é que, se o comando GIFsicle não parece ter nenhum efeito, verifique se a cor do plano de fundo está realmente correta. Por exemplo, para a animação mostrado acima, a cor do fundo real acabou por ser #fdfffc
(ou seja, muito ligeiramente amarelo-esverdeado branco) em vez de #ffffff
(branco puro). Você não pode realmente dizer a diferença a olho nu (ou, pelo menos, não posso fazer isso nesta tela), mas é suficiente para fazer o GIFsicle considerar as duas cores diferentes.
Observe também que os arquivos GIF suportam apenas transparência de 1 bit, o que significa que as bordas das regiões transparentes não terão suavização de borda. Tudo bem, desde que o plano de fundo em que você está mostrando a animação não esteja muito longe da cor original do plano de fundo, mas, se estiver, você pode achar que haverá uma cor feia nas bordas da animação. Infelizmente, não há muito o que fazer sobre isso, exceto para escolher um plano de fundo mais adequado ou para renderizar novamente a animação.