Создание анимированного GIF с Pillow 6.2.0, по-видимому, не добавляет все изображения и игнорирует настройку длительности. - PullRequest
2 голосов
/ 14 марта 2020

Я пытаюсь создать и сохранить GIF из набора файлов PNG.

pics=[]
for plot_path in plot_paths:
    img = Image.open(plot_path)
    pics.append(img)
pics[0].save(save_dir+'/truestrain.gif', format='gif', save_all=True, append_images=pics[1:], duration=10, loop=0)

В результате получается файл GIF с правильным именем, но только с использованием первого файла PNG и 10. секунд.

save_all=True должен побудить его использовать все изображения в append_images=pics[1:], но это, похоже, не работает.

duration=10 должно установить продолжительность между кадры как 10 мс, кажется, интерпретируются как общее время 10 с (в отличие от документации на подушке?) * Сохранение анимированного GIF в подушку ). Я также проверил это, следуя документации (https://pillow.readthedocs.io/en/3.1.x/handbook/image-file-formats.html).

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Получается, что GIF создается правильно. Ни windows Фотографии, ни VL C не смогли воспроизвести его по какой-то причине. Я скачал альтернативную программу просмотра GIF и файл, как и ожидалось.

0 голосов
/ 14 марта 2020

Ваш код работает для меня с вашей версией 6.2.0. Я только что проверил различные настройки для duration и определенно вижу разницу:

from PIL import Image
assert Image.__version__ == "6.2.0"
frames = [Image.open(f"frame_{i:0>3}.png") for i in range(44)]
for duration in [10, 100, 1000]:
    frames[0].save(f"result_{duration}.gif", format="gif", save_all=True, append_images=frames[1:], duration=duration, loop=0)

Существует ограничение на точность продолжительности самого формата GIF. Но это должна быть одна сотая секунды, поэтому ваш duration=10 должен быть в порядке.

...