Pythonでフォルダの画像を取得し webp に変換する処理

Python を使って、フォルダの画像を取得し webp に変換する処理について記述します。

 

今回の処理概要は以下の通りです。

・あるフォルダに存在する PNG イメージファイルを取得

・更新日を確認し、指定した日付よりも新しい更新日であれば webp ファイルを用意する

 

コード

コードはシンプルです。

簡単なので、コードをそのまま見た方が分かりやすいかと思います。

#!/usr/bin/env python
# coding: utf_8

import datetime
import glob
import os
from PIL import Image

# 関数化すれば、この日付を引数にすればタイミングを指定できる
target_date = '2020-06-26'

# windows フォルダの場合
folder_path =  'C:\\workspace\\ss\\'
# Linux フォルダの場合
# folder_path = '/home/workspace/ss/'

# ※1 ファイル検索
files = glob.glob(folder_path + '*.png')
for file in files:
    # ※2 更新日取得し、比較用にフォーマット
    dt = datetime.datetime.fromtimestamp(os.stat(file).st_mtime)
    update_date = dt.strftime('%Y-%m-%d')
    if target_date <= update_date:
        # ※3 対象日付より新しかったら Webp 保存
        img = Image.open(file)
        img.save(file + '.webp', "WEBP")

これだけで対処可能です。

ソース内の※1~3について、補足します。

※1 ファイル検索

glog だとファイル検索が容易なため、glog を使用しました。

glog を用いての検索方法は以下が分かりやすいです。

外部リンク:Pythonで条件を満たすパスの一覧を再帰的に取得するglobの使い方

※2 更新日取得し、比較用にフォーマット

os を用いて取得したファイル名を用いて、更新日を取得します。

Macの場合は、異なるようなので注意が必要です。以下のリンクを参照。

外部リンク:Pythonでファイルの作成・更新日時を取得する

 

更新日を取得しても、数字データでくるので比較のため datetime を用いて、フォーマットします。

※3 対象日付より新しかったら Webp 保存

対象日付より新しい場合のみに webp 変換します。

元のデータは残しておきます。Safari ブラウザで webp を使えないためです。

なので、もととなるPNGデータは残したまま、webp 画像を作成しています。

 

実際に上記コードを実行すると以下のようになります。サイズが少ないのが確認できます。実際にブラウザで表示されるのも確認出来ています。

 

まとめ

特に pip install せずに、デフォルトで入っている機能だけで可能なはずです。

私の環境がずっと使ってる Python 環境なので、過去に何か pip install していたかもしれません。

実行してみて、足りなければ、install してください。

 

WordPressなどで、Plugin を使わずに Python で自作しても良いと思います。

Cron などで設定してしまえば、自動で動かすことも可能です。

余計な Plugin を用いるよりも良いかもしれません。

 

 


読んで頂き、ありがとうございます。
この記事が誰かにとって、一つの参考となれば幸いです。

新たな知識や技術を習得し続けていきたいです。

 

 

 

コメント