はじめに
今回は、PythonでGif画像を分割して画像に書き出す方法について紹介します。使うライブラリはOpenCVとPillowの2つを紹介します。gifのコマを分割する場合、OpenCVのほうが断然オススメです。OpenCVをPythonにインストールする方法については下記の記事を参考にしてください。https://www.tech-tech.xyz/python-opencv-pip-install/ Pillow(PIL)だと「画像によっては変な縞が浮かびかがったり」「画像の拡張子を指定できなかったり」するのでおススメしません。
サンプルコード(OpenCV)
OpenCVの動画読み込みの機能を使ってフレームを読み込んで、フレームを書き出すというコードです。
# -*- coding: utf-8 -*-
import cv2
import os
# Gifファイルを読み込む
gif_file_name = "hoge.gif"
gif = cv2.VideoCapture(gif_file_name)
# スクリーンキャプチャを保存するディレクトリを生成
dir_name = "screen_caps"
if not os.path.exists(dir_name):
os.mkdir(dir_name)
i = 0
while True:
is_success, frame = gif.read()
# ファイルが読み込めなくなったら終了
if not is_success:
break
# 画像ファイルに書き出す
img_name = str(i) + ".jpg"
img_path = os.path.join(dir_name, img_name)
cv2.imwrite(img_path, frame)
i += 1
サンプルコード(Pillow)
PILのサンプルも紹介します。コードはOpenCVに比べてシンプルです。
import os
from PIL import Image, ImageSequence
gif_file_name = "hoge.gif"
# スクリーンキャプチャを保存するディレクトリを生成
dir_name = "screen_caps"
if not os.path.exists(dir_name):
os.mkdir(dir_name)
gif = Image.open(gif_file_name)
for i, f in enumerate(ImageSequence.Iterator(gif)):
img_name = str(i) + ".png"
img_path = os.path.join(dir_name, img_name)
f.save(img_path)
コメント