使用 python 将自定义调色板和自定义帧率放入动画 gif 中
Put a custom palette and custom framerate in animated gif using python
我正在尝试编写一系列 numpy 数组作为动画 gif。我需要严格控制颜色图或调色板(哪种颜色与数组中的每个整数值相关联),以便它与数组中的索引相匹配
我找到了 imageio.mimwrite
。它有设置帧率和使用压缩的能力,这看起来很棒。
imageio.mimwrite('test.gif', ims, duration=0.2, subrectangles=True)
但我还没有找到设置自定义调色板的方法,只有颜色数量似乎可以设置...
我知道我可以将图像写入磁盘,然后写入 imageio,但我宁愿不必这样做。
使用 pillow,我可以用自定义调色板保存 gif:
im = Image.fromarray(...)
im.putpalette(...)
for i in im_list: i.putpalette(...)
im.save(filename, save_all=True, append_images=[image_list])
但我还没有找到同时设置调色板和帧率的方法...
有什么想法吗?
谢谢!
如果它可以帮助某人,这里有一段代码使用 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()
)
我正在尝试编写一系列 numpy 数组作为动画 gif。我需要严格控制颜色图或调色板(哪种颜色与数组中的每个整数值相关联),以便它与数组中的索引相匹配
我找到了 imageio.mimwrite
。它有设置帧率和使用压缩的能力,这看起来很棒。
imageio.mimwrite('test.gif', ims, duration=0.2, subrectangles=True)
但我还没有找到设置自定义调色板的方法,只有颜色数量似乎可以设置... 我知道我可以将图像写入磁盘,然后写入 imageio,但我宁愿不必这样做。
使用 pillow,我可以用自定义调色板保存 gif:
im = Image.fromarray(...)
im.putpalette(...)
for i in im_list: i.putpalette(...)
im.save(filename, save_all=True, append_images=[image_list])
但我还没有找到同时设置调色板和帧率的方法...
有什么想法吗?
谢谢!
如果它可以帮助某人,这里有一段代码使用 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()
)