Как правильно получить полные кадры для разностных GIF-файлов с помощью Python Imageio?

GIF-файлы - это изображения, которые можно анимировать, т. Е. Состоящие из последовательности кадров. В мире существует два типа GIF-файлов: тип A хранит каждый кадр отдельно, а тип B вместо этого сохраняет различия между последующими GIF-файлами.

Я загружаю файлы GIF, используя imageio, который отлично работает для типа A, но возвращает различия только для типа B. Как я могу вместо этого легко получить полные кадры?

Вот как я получаю изображения:

reader = imageio.get_reader(filename)
for _ in range(reader.get_length()):
    PIL.Image.fromarray(reader.get_next_data().copy()).convert('RGBA')

И вот результат, когда я использую GIF типа A (слева, хорошо) по сравнению с типом B (справа, плохо) для моего алгоритма объятия с изображением:

введите здесь описание изображения  введите описание изображения здесь

Входы:

введите здесь описание изображения  введите описание изображения здесь


person xjcl    schedule 19.01.2020    source источник
comment
Я думаю, что, возможно, составление последующих кадров с использованием чего-то вроде alpha_composite может сработать, но (A) должен быть более простой способ и (B) я не знаю, как определить, основан ли GIF на различиях: /   -  person xjcl    schedule 19.01.2020
comment
GIF, основанный на различиях, имеет метаданные 'extension': (b'ImageMagick', 822), может быть, это указывает на то, что он основан на различиях?   -  person xjcl    schedule 19.01.2020
comment
Соответствующий pil-is-show-all-the-previous -frames-in-the-gif   -  person stovfl    schedule 19.01.2020