python图片生成gif方法汇总
程序员文章站
2024-02-16 23:09:46
...
一、使用 PIL 和 images2gif 库
第一种方法主要是采用PIL和imagegif库,由于版本的原因,可能有的imagegif对图片进行处理的时候,以下语句会报错
writeGif(outfilename, frames, duration=0.1, subRectangles=False)
解决方法是去这个网站https://github.com/isaacgerg/images2gif下载相应的image2gif.py,然后替代原来包里面对应的文件以下是实现的代码这个方法可以将彩色图也转化成GIF图片,不会像下面的方法一样。from PIL import Image from images2gif import writeGif outfilename = "my.gif" # 转化的GIF图片名称 filenames = [] # 存储所需要读取的图片名称 for i in range(100): # 读取100张图片 filename = path # path是图片所在文件,最后filename的名字必须是存在的图片 filenames.append(filename) # 将使用的读取图片汇总 frames = [] for image_name in filenames: # 索引各自目录 im = Image.open(image_name) # 将图片打开,本文图片读取的结果是RGBA格式,如果直接读取的RGB则不需要下面那一步 im = im.convert("RGB") # 通过convert将RGBA格式转化为RGB格式,以便后续处理 im = np.array(im) # im还不是数组格式,通过此方法将im转化为数组 frames.append(im) # 批量化 writeGif(outfilename, frames, duration=0.1, subRectangles=False) # 生成GIF,其中durantion是延迟,这里是1ms
二、使用 imageio 库
使用imageio的方法我只在黑白图像上测试成功,在彩色图片上就一张图片来回闪烁,我还不知到是什么原因,可能我的库版本比较老旧。以下是黑白图片生成gif代码
import imageio outfilename = "my.gif" # 转化的GIF图片名称 filenames = [] for i in range(100): filename = path filenames.append(filename) frames = [] for image_name in filenames: im = imageio.read(image_name) # 读取方式上存在略微区别,由于是直接读取数据,并不需要后续处理 frames.append(im) imageio.mimsave(outfilename, frames, 'GIF', duration=0.1) # 生成方式也差不多
图1 彩色GIF
图2 黑白
参考: