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 を用いるよりも良いかもしれません。
読んで頂き、ありがとうございます。
この記事が誰かにとって、一つの参考となれば幸いです。
新たな知識や技術を習得し続けていきたいです。
コメント