1. 程式人生 > >python圖片生成gif方法彙總

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