💨

Pythonでgifアニメを作成してみた

2023/04/30に公開

前置き

本記事は4月12日開催のオトナの機械学習入門@XOSSPOINT.にて発表したLT資料を加筆、修正したものになります。

はじめに

  • 春なので、植物の画像をgifアニメにすると伸び具合が分かって面白そうだったから
  • 今回はモウセンゴケのgifアニメを作ってみました(←!?)
  • 注)モウセンゴケは食虫植物

準備

成果物

Pythonコード

from PIL import Image
import os

# 画像ファイルの名前を格納するリストを用意
list_file_name = []

# 画像データを格納するリストを用意
list_images = []

# 画像ファイルとPythonプログラムは同じ場所に置いたのでカレントディレクトリを指定
dir = './'
for file_name in os.listdir(dir):
    # ファイル名の最後がJPGのものをリストに追加
    if file_name.endswith('JPG'):
        list_file_name.append(file_name)

# 念のため画像ファイル名の順番をソート
list_file_name.sort()

# 倍率0.25倍を指定
ratio = 0.25
for i in list_file_name:
    img = Image.open(i)
    # 画像のリサイズ
    resized_img = img.resize((int(img.width * ratio), int(img.height * ratio)))
    # 画像の回転
    rotated_resized_img = resized_img.rotate(270)
    list_images.append(rotated_resized_img)
list_images[0].save('mousengoke.gif',save_all=True, append_images=list_images[1:],
optimize=True, duration=200, loop=0)

gifアニメ

撮影位置を固定しなかったため生長がわかりづらい。よく見るとつるみたいなものが伸びている。

学び

sort()とsorted()の違い

Pillowによる画像の扱い方

  • PillowとはPythonの画像処理ライブラリ

  • 画像のリサイズ
    • 画像.resize(幅, 高さ)でリサイズが可能
resized_img = img.resize((int(img.width * ratio), int(img.height * ratio)))

  • 画像の回転(以下のコードは左に270度回転)
    • 縦の写真でgifアニメを出力すると横向き(90度左向き)になってしまうので、以下のコードを追加して上向きになるようにした
rotated_resized_img = resized_img.rotate(270)
  • gifアニメの出力
    • 元画像がたくさんあればdurationの数値を100など小さくすることで滑らかなgifアニメが出力できると思う
list_images[0].save('mousengoke.gif',save_all=True, append_images=list_images[1:],
optimize=True, duration=200, loop=0)

最後に

コロナ禍になってから初めてのオフライン勉強会に参加しました。
今の仕事では機械学習は全く縁がないのでハンズオンが体験できて良かったです。

Discussion