Почему я не могу сделать GIF из файлов PIL.Image.Image, а могу с помощью PIL.PngImagePlugin.PngImageFile? - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь сделать GIF из нескольких файлов изображений, следуя этой теме .

Ответ Криса отлично работает, когда я открываю физический файл из каталога, используя Image.open(), а затем добавьте список, чтобы сделать GIF.

imgs = [Image.open(f) for f in os.listdir(os.getcwd())]
imgs[0].save('{}.gif'.format(img_filename),
                              format='GIF',
                              append_images=imgs[1:],
                              save_all=True,
                              duration=args.duration,
                              loop=0)

Это прекрасно работает, и выходной GIF является фактически анимированным. Я заметил, что список glitched_imgs состоит из PIL.PngImagePlugin.PngImageFile объектов в этом случае.

Однако всякий раз, когда я пытаюсь использовать объект Image, возвращаемый функцией, созданный GIF-файл полностью сохраняется c.

imgs = [get_randomized_image() for _ in range(args.frames)]
imgs[0].save('{}.gif'.format(img_filename),
                              format='GIF',
                              append_images=imgs[1:],
                              save_all=True,
                              duration=args.duration,
                              loop=0)

Где get_randomized_image() возвращает случайный Image объект, в частности, из массива numpy.

    # Inside `get_glitched_image()`
    return Image.fromarray(outputarr, img_mode)

Я хочу напрямую создать GIF со списком объектов Вернувшись из этой функции, как мне этого добиться?

Примечание. Файлы, которые я открываю в первом (рабочем) методе, - это файлы, которые я сохранил до использования get_randomized_images(), поэтому я могу заверить вас, что это именно то же самое.

...