首頁 > 軟體

Python實現Gif圖片分解的範例程式碼

2022-08-16 18:01:18

在前面做過一個Gif圖片合成的小工具,老朋友應該有所印象。但是,近段時間有人反映合成了的Gif圖片該如何進行分解呢?

於是,再次瞭解了一下PIL模組的Image,果真是可以做動圖分解的。

1、模組安裝

使用PIL庫,實際上是來源於pillow庫的相容,因此需要安裝pillow非標準庫。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow

2、模組匯入

安裝好pillow非標準庫之後,將PIL模組中Image影象處理模組匯入到程式碼塊中即可。

from PIL import Image

同時,將os系統操作模組匯入進來用於對資料夾或檔案來進行操作。

import os

匯入一個紀錄檔模組loguru來記錄紀錄檔列印,在之前的文章中也介紹過,由於這個模組匯入即用比較方便我們這裡直接使用它來列印紀錄檔。

from loguru import logger

3、分解動圖

這裡,我們的目的是將一個Gif圖片直接分解成png格式的多個圖片。首先對單張動態圖片完成分解。

建立一個函數sptGif,來實現對單張Gif圖片分解的過程。

def spt_gif_one(gif_path, tar_dir, format="png"):
    '''
    分解單張Gif圖片
    :param gif_path: Gif 圖片路徑
    :param tar_dir: 分解後的儲存路徑
    :param format: 分解成的圖片格式,預設為PNG格式的圖片
    :return:
    '''
    gif_file_name = os.path.basename(gif_path)
    logger.info("當前gif動態圖片路徑:{}".format(gif_file_name))
    base_name = str(gif_file_name).split('.')[0]
    image = Image.open(gif_path)
    for n in range(image.n_frames):
        gen_file_name = base_name + '_' + str(n)
        image.seek(n)
        image_new = Image.new("RGBA", image.size)
        image_new.paste(image)
        image_new.save(os.path.join(tar_dir, "%s.%s" % (gen_file_name, format)))
        logger.info('檔名稱:{}已生成!'.format(gen_file_name))

4、批次分解

若是在gif圖片比較到的情況下,則可以選擇批次分解的方式來進行分解。

一般選擇將所有需要分解的gif圖片直接放在統一的資料夾下面來完成批次分解。實現思路是通過遍歷該資料夾下面的所有的gif圖片挨個對其完成分解。

def spt_gif_batch(gif_dir, tar_dir):
    '''
    批次分解Gif動態圖片
    :param gif_dir:
    :param tar_dir:
    :return:
    '''
    if os.path.isdir(gif_dir):
        files = os.listdir(gif_dir)
        for file in files:
            gif_path = os.path.join(gif_dir, file)
            if os.path.splitext(gif_path)[1] in '.gif':
                spt_gif_one(gif_path, tar_dir)
            else:
                logger.info('{} 檔案格式檢查不正確!'.format(gif_path))
    else:
        logger.info('{} 資料夾不存在!'.format(gif_dir))

5、生成效果

我呼叫批次生成的函數spt_gif_batch進行了效果測試。

從Google上面直接下載一張Gif的動態圖片,原圖是這樣的效果。

隨後,對其進行了批次分解的執行,os.getcwd()表示生成的圖片放在當前的路徑下面。

spt_gif_batch(os.getcwd(), os.getcwd())

控制檯這時也按照預期列印出了紀錄檔,紀錄檔還是比較漂亮的,哈哈~

完成後,總共生成了25張png格式的圖片,我下面跳了其中的幾張展示出來。

到此這篇關於Python實現Gif圖片分解的範例程式碼的文章就介紹到這了,更多相關Python Gif圖片分解內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com