如何从圆形遮罩图像制作gif?

5

下载带有图片的Zip包

我有一个带有圆形蒙版PNG图片的文件夹:

在这里输入图片描述 在这里输入图片描述 在这里输入图片描述

通常,我使用以下代码制作GIF:

import imageio
import os

imglist = []
images = []
path = ('\\').join(__file__.split('\\')[:-1]) + '\\' + 'images\\'
for r, _, f in os.walk(path):
    for i in f:
        imglist.append(r + i)

for filename in imglist:
    if filename.endswith('.png'):
        images.append(imageio.imread(filename))

frames_per_second = 24
gifpath = ('\\').join(__file__.split('\\')[:-1]) + '\\' + 'GIF.gif'
imageio.mimsave(gifpath, images, duration = 1/frames_per_second)

对于普通图像,这样做效果很好,但它似乎忽略了掩蔽图像。 gif 看起来像这样:

enter image description here

有什么办法可以做出圆形的 gif 吗?


我相信Python Wand可以创建带有透明度的动态GIF。它是基于Imagemagick构建的。但请注意,GIF仅支持二进制透明度(完全不透明或完全透明)。 - fmw42
1个回答

1
你的png文件使用了透明度,虽然GIF也支持透明度,但imageio库却不支持。
如果遮罩区域为白色,你可以在循环中进行替换。只需更改:
for filename in imglist:
if filename.endswith('.png'):
    images.append(imageio.imread(filename))

带有:
for filename in imglist:
if filename.endswith('.png'):
    tmp_image = imageio.imread(filename)
    mask = (tmp_image[:,:,3] == 0) #where transparency channel is 0
    tmp_image[mask] = [255,255,255,255] #Set those pixels to white (other color if you prefer)
    images.append(tmp_image)

GIF透明度有些特殊,您需要将其中一种颜色设置为透明渲染。如果您想在Python中实现此操作,请参考this thread

我还建议学习一下如何使用ffmpeg直接制作gif。起初可能有点难以理解,但这是所有视频/gif库背后使用的技术。

祝好, R.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接