Puede hacer esto con GIFsicle , utilizando las siguientes opciones:
gifsicle -U --disposal=previous --transparent="#ffffff" -O2 anim.gif > anim_trans.gif
donde anim.gif
y anim_trans.gif
son los nombres de los archivos de origen y destino, y #ffffff
es el código hexadecimal del color que desea hacer transparente (aquí, blanco puro).
(Las opciones importantes aquí son -U
/ --unoptimize
y --disposal=previous
, que juntas convierten la animación en "modo flipbook", donde cada cuadro se borra por completo antes de dibujar el siguiente. Esto permite agregar transparencia adicional a los cuadros sin permitir que los cuadros anteriores se muestren a través del partes transparentes. La -O2
opción no es estrictamente necesaria, pero es probable que reduzca el tamaño del archivo de la animación resultante al optimizar los cuadros para evitar volver a dibujar innecesariamente partes estáticas de la animación).
Para una demostración, aquí hay una animación de la enzima glicoxalasa I humana (GLO1) de Wikimedia Commons (izquierda), y la misma animación con transparencia agregada usando el método que se muestra arriba (derecha):
Animación original del usuario de Wikimedia Commons WillowW , utilizada bajo la licencia CC-By 3.0 .
Un detalle que vale la pena señalar es que, si el comando GIFsicle no parece tener ningún efecto, debe verificar que el color de fondo sea realmente correcto. Por ejemplo, para la animación se muestra arriba, el color de fondo real resultó ser #fdfffc
(es decir, muy ligeramente amarillo-verdoso blanco) en lugar de #ffffff
(blanco puro). En realidad, no puede distinguir la diferencia a simple vista (o, al menos, no puedo hacer eso en esta pantalla), pero es suficiente para hacer que GIFsicle considere los dos colores diferentes.
También tenga en cuenta que los archivos GIF solo admiten una transparencia de 1 bit, lo que significa que los bordes de las regiones transparentes no se suavizarán. Esto está bien siempre que el fondo en el que se muestra la animación no esté demasiado alejado del color de fondo original, pero si lo es, es posible que haya un color feo que se borde alrededor de los bordes de la animación. Desafortunadamente, no hay mucho que pueda hacer al respecto, excepto elegir un fondo más adecuado o volver a renderizar la animación.