Puoi farlo con GIFsicle , usando le seguenti opzioni:
gifsicle -U --disposal=previous --transparent="#ffffff" -O2 anim.gif > anim_trans.gif
dove anim.gif
e anim_trans.gif
sono i nomi dei file di origine e destinazione, ed #ffffff
è il codice esadecimale del colore che si desidera rendere trasparente (qui, bianco puro).
(Le opzioni importanti qui sono -U
/ --unoptimize
e --disposal=previous
, che insieme convertono l'animazione in "modalità flipbook", in cui ogni fotogramma viene completamente cancellato prima di disegnare quello successivo. Ciò consente di aggiungere ulteriore trasparenza ai fotogrammi senza lasciare che i fotogrammi precedenti vengano visualizzati attraverso parti trasparenti. L' -O2
opzione non è strettamente necessaria, ma è probabile che riduca le dimensioni del file dell'animazione risultante ottimizzando i frame per evitare di ridisegnare inutilmente parti statiche dell'animazione.)
Per una dimostrazione, ecco un'animazione dell'enzima gliossalasi umana (GLO1) da Wikimedia Commons (a sinistra) e la stessa animazione con trasparenza aggiunta usando il metodo mostrato sopra (a destra):
Animazione originale dell'utente WillowW di Wikimedia Commons , utilizzata con licenza CC-By 3.0 .
Un dettaglio degno di nota è che, se il comando GIFsicle non sembra avere alcun effetto, è necessario verificare che il colore di sfondo sia davvero corretto. Ad esempio, per l'animazione mostrato sopra, il colore di sfondo reale si è rivelata #fdfffc
(cioè molto leggermente giallo-verdastro bianco) anziché #ffffff
(bianco puro). In realtà non puoi dire la differenza a occhio (o, almeno, non posso farlo su questo schermo), ma è sufficiente per fare in modo che GIFsicle consideri i due colori diversi.
Si noti inoltre che i file GIF supportano solo la trasparenza a 1 bit, il che significa che i bordi delle aree trasparenti non saranno anti-alias. Questo va bene fino a quando lo sfondo su cui stai mostrando l'animazione non è troppo lontano dal colore di sfondo originale, ma se lo è, potresti scoprire che ci sarà un brutto colore sfrangiato attorno ai bordi dell'animazione. Sfortunatamente, non c'è molto che puoi fare al riguardo, tranne per scegliere uno sfondo più adatto o per eseguire nuovamente il rendering dell'animazione.