Python實現Gif圖片分解的示例代碼
在前面做過一個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圖片分解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 總結歸納python os庫常用方法
- Python基於mediainfo批量重命名圖片文件
- 詳解python os.walk()方法的使用
- python批量壓縮圖像的完整步驟
- Python文件目錄操作常用模塊的使用詳解