Следующий код создает GIF из двух изображений:
# GIFs are always palette images so they would be converted later anyway
im1 = PIL.Image.open('grin-emoji-by-twitter-rgba.png').convert('P')
im2 = PIL.Image.open('grin-emoji-by-twitter-rgba-2.png').convert('P')
im1.save('output.gif', save_all=True, append_images=[im2, im1, im2], loop=0, duration=200, transparency=255)
Однако результат неожиданно неверный. Первый кадр в порядке, но последующие кадры содержат черный прямоугольник вокруг области обновления вместо прозрачности:
На мой взгляд, ошибка заключается в следующем На первом изображении мы указываем индекс 255, который будет индексом для полностью прозрачного цвета. Однако функция save
, похоже, только конвертирует индекс 255 в прозрачность в первом кадре, но пропускает этот шаг во всех остальных кадрах.
Есть ли способ обойти это?