Поместите пользовательскую палитру и пользовательскую частоту кадров в анимированный GIF с помощью Python - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь написать серию массивов в виде анимированного GIF.Мне нужно строго контролировать цветовую карту или палитру (какой цвет связан с каждым целочисленным значением в массиве), чтобы он совпадал с индексами в массивах

Я нашел imageio.mimwrite.У него есть возможность установить частоту кадров и использовать сжатие, которое кажется великолепным.

imageio.mimwrite('test.gif', ims, duration=0.2, subrectangles=True)

, но я не нашел способа установить пользовательскую палитру, кажется, что можно установить только количество цветов... Я знаю, что могу записать образ на диск, а затем imageio, но я бы предпочел не делать этого.

Используя подушку, я могу сохранить рисунок с помощью собственной палитры:

im = Image.fromarray(...)
im.putpalette(...)
for i in im_list: i.putpalette(...)
im.save(filename, save_all=True, append_images=[image_list])

Но я не нашел способ настроить палитру и частоту кадров ...

Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

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

from PIL import Image
# image_list: list of numpy 2d uint8 array
# duration is a list of duration for each individual frame
# loop, 0 for infinite
# colormap_np : n by 3 uint8 array
pil_ims = [Image.fromarray(i, mode='P') for i in image_list]
pil_ims[0].save(
    filename='test.gif',
    save_all=True,
    append_images=pil_ims[1:],
    duration=duration,
    loop=0,
    palette=colormap.tobytes()
)
...