【Python】フォルダ内の画像を自動でリサイズする方法

今回は、業務効率化するために指定したフォルダに入っている「画像の解像度を指定した解像度に変更するプログラム」を作成したいと思います。

今回のプログラムの使用例

例えば、スマートフォンで撮影した写真を「Instagram・Webサイト」両方で使用したい場合、Instagramはそのまま写真をアップロードすれば良いですが、Webサイトに載せる場合、解像度が大きすぎると、データ量が多くなり、結果としてページの読み込みが遅くなる可能性があります。

写真を複数枚Webサイトに掲載したい場合1枚、1枚解像度を変更するのには手間がかかります。

今回のプログラムは、指定したフォルダ内にある画像全てをリサイズし、リサイズした画像を別のフォルダに保存するプログラムになります。

Pythonプログラム

今回は、’Pillow’ライブラリを使用して以下のようなPythonスクリプトを書いていきます。
まず、’Pillow’がインストールされていない場合は、以下のコマンドを実行してインストールしてください。

python -m pip install pillow

‘Pillow’がインストールされているか確認する場合は、コマンドプロンプトで以下のコマンドを実行してください。

pip list

‘Pillow’がインストールされている場合は、リストの中に’Pillow’があります。

‘Pipllow’がインストールされているのが確認出来たら実際にPythonを使ってプログラミングしていきます。

from PIL import Image
import os

from PIL import Image は、 Pillow ライブラリの Image モジュールをインポートしています。このモジュールには、画像を開いたり、画像に対して様々な操作(リサイズ、回転、色変更など)を行うための関数やクラスが含まれています。

Image モジュールをインポートすることで、プログラム内で画像ファイルを扱うための多くの機能にアクセスできるようになります。例えば、Image.open() 関数を使って画像ファイルを開いたり、save() メソッドを使って変更を加えた画像を保存したりすることができます。

from PIL import Image
import os
def resize_images_in_folder(source_folder, output_folder, size=(500, 500)):

source_folder = 'img'  # リサイズする画像が格納されているフォルダのパス
output_folder = 'newimg'  # リサイズ後の画像を保存するフォルダのパス

resize_images_in_folder(source_folder, output_folder)

今回は、サイズを500*500にリサイズしたいのでresize_images_in_folder 関数を使い、フォルダ内の画像ファイル全てを特定のサイズにリサイズし別のフォルダに保存します。

  • source_folder: リサイズしたい画像が格納されているフォルダのパスを指定します。
  • output_folder: リサイズ後の画像を保存するフォルダのパスを指定します。
  • size: リサイズ後の画像のサイズをタプルで指定します。デフォルト値は (500, 500) です。

念のために、リサイズした画像を保存するフォルダがない場合、自動で作成するプログラムも追加します。

from PIL import Image
import os
def resize_images_in_folder(source_folder, output_folder, size=(500, 500)):

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
        os.makedirs(output_folder)

source_folder = 'img'  # リサイズする画像が格納されているフォルダのパス
output_folder = 'newimg'  # リサイズ後の画像を保存するフォルダのパス

resize_images_in_folder(source_folder, output_folder)

これで、’newimg’のフォルダが存在しなくても、自動で作成してくれます。

最後に、フォルダ内のフィルをループしファイル名の拡張子を確認し、画像をリサイズしリサイズした画像を保存するプログラムを書いたら完成です。

from PIL import Image
import os
def resize_images_in_folder(source_folder, output_folder, size=(500, 500)):

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
        os.makedirs(output_folder)

# ソースフォルダ内のファイルをループ
    for filename in os.listdir(source_folder):
        # ファイル名の拡張子を確認し、画像ファイルのみを対象とする
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
            img_path = os.path.join(source_folder, filename)
            with Image.open(img_path) as img:
                # 画像をリサイズ
                resized_img = img.resize(size)
                # リサイズした画像を保存
                output_path = os.path.join(output_folder, filename)
                resized_img.save(output_path)

source_folder = 'img'  # リサイズする画像が格納されているフォルダのパス
output_folder = 'newimg'  # リサイズ後の画像を保存するフォルダのパス

resize_images_in_folder(source_folder, output_folder)

今回対応する拡張子は、’.png’,’.jpg’,’.jpeg’,’.gif’に設定しました。

また、iPhoneで撮影した写真は、拡張子が’.heic’になっている場合があるので注意してください。
‘Pillow’では、’.heic’は対応していません。

実行結果

現在は、imgフォルダとPythonファイルだけがある状態です。

imgフォルダの中には、1枚の画像が入っており解像度は1920*1080です。

コマンドプロンプトで実行します。
Pythonファイルがある場所によってコマンドプロンプトで実行するコマンドは変わってきます。

実行すると、先ほどなかったnewimgフォルダが作成されておりその中にリサイズされた画像が格納されています。

newimgフォルダが作成されている
解像度が指定した解像度になっている

まとめ

Pythonでちょっとしたプログラミングをするだけで、このような自動で解像度を変更するプログラムを作成することが可能です。
一度に100枚など指定した解像度にリサイズしたい場合、このスクリプトを実行するだけで一瞬で解像度をリサイズすることが可能です。