python图片生成gif方法汇总

一、使用 PIL 和 images2gif 库

    第一种方法主要是采用PIL和imagegif库,由于版本的原因,可能有的imagegif对图片进行处理的时候,以下语句会报错
writeGif(outfilename , frames , duration = 0.1 , subRectangles = False)
python 3.5环境错误为: TypeError: a bytes-like object is required, not 'str'
解决方法是去这个网站https://github.com/isaacgerg/images2gif下载相应的image2gif.py,然后替代原来包里面对应的文件

以下是实现的代码
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
这个方法可以将彩色图也转化成GIF图片,不会像下面的方法一样。

二、使用 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 黑白
参考:
https://blog.csdn.net/ginynu/article/details/54990249
https://www.cnblogs.com/dcb3688/p/4608048.html




你可能感兴趣的:(python)