Вы можете сделать это с помощью GIFsicle , используя следующие параметры:
gifsicle -U --disposal=previous --transparent="#ffffff" -O2 anim.gif > anim_trans.gif
где anim.gif
и anim_trans.gif
- исходные и конечные имена файлов, а #ffffff
также шестнадцатеричный код цвета, который вы хотите сделать прозрачным (здесь чисто белый).
(Здесь важными параметрами являются -U
/ --unoptimize
и --disposal=previous
, которые вместе преобразуют анимацию в «режим флипбука», где каждый кадр полностью стирается перед рисованием следующего. Это позволяет добавить дополнительную прозрачность к кадрам, не позволяя более ранним кадрам показываться через прозрачные части. Этот -O2
параметр не является строго обязательным, но он может уменьшить размер файла получаемой анимации путем оптимизации кадров, чтобы избежать ненужного повторного рисования статических частей анимации.)
Для демонстрации приведем анимацию фермента человеческой глиоксазы I (GLO1) из Wikimedia Commons (слева) и ту же анимацию с прозрачностью, добавленной с помощью метода, показанного выше (справа):
Оригинальная анимация пользователя Wikimedia Commons WillowW , используемая по лицензии CC-By 3.0 .
Стоит отметить одну деталь: если команда GIFsicle, кажется, не имеет никакого эффекта, вы должны проверить, что цвет фона действительно правильный. Например, для анимации, показанной выше, фактический цвет фона оказался #fdfffc
(то есть очень слегка желто-зеленовато-белым), а не #ffffff
(чисто белым). Вы не можете увидеть разницу на глаз (или, по крайней мере, я не могу сделать это на этом экране), но этого достаточно, чтобы GIFsicle рассматривал два цвета по-разному.
Также обратите внимание, что файлы GIF поддерживают только 1-битную прозрачность, что означает, что края прозрачных областей не будут сглаживаться. Это нормально, если фон, на котором вы отображаете анимацию, не слишком далеко от исходного цвета фона, но если это так, вы можете обнаружить, что по краям анимации появятся какие-то уродливые цвета . К сожалению, с этим ничего не поделаешь, кроме выбора более подходящего фона или повторного рендеринга анимации.