大量の画像を一括で3M以下にリサイズするPythonコード手順

🚨 緊急のお知らせとお願い 🚨

いつもKotaro Studioをご覧いただき、心より感謝申し上げます。
今回、私たちの活動をさらに広げるため、音楽家人生をかけたクラウドファンディングをスタートしました。
ヒーリング音楽の世界で、より多くの人々に癒しと希望を届けるための挑戦です。皆様のお力添えがあれば、この夢を現実にすることができます。
ご支援をいただける方はもちろん、サイトをシェアしていただくだけでも大きな励みになります。また、応援の声をSNSでシェアしていただければ、私たちの士気も大きく高まります。
短い期間ではありますが、11月30日までに目標を達成し、皆様に素晴らしい音楽をお届けできるよう全力を尽くします。どうか応援をよろしくお願いいたします。

詳しく見る Xで応援 Instagramで応援
NEW

面倒な処理一位の称号を与えてもいいのが、画像のリサイズではないでしょうか?

小さすぎてもダメ、大きすぎてもアップできないプラットフォームが多い。
リサイズしたら画質が落ちる。

Macの場合だと右クリックから簡単にリサイズする方法もありますが、数が多いと面倒です。

本記事では、Pythonを使用して指定フォルダ内のすべての画像を3MB以下にリサイズする方法を紹介します。

Pythonで画像リサイズを行うメリット

Pythonには強力な画像処理ライブラリであるPillow(PIL)があり、画像のリサイズや形式変換をシンプルに実行できます。Pillowを使った画像リサイズのメリットは以下の通りです。

  • 操作が簡単:Pillowのインターフェースは分かりやすく、数行のコードでリサイズが可能。
  • 品質保持:圧縮後も画像の品質をある程度保つことが可能。
  • 処理が高速:複数画像を一括処理するための効率的な方法が提供されている。

Pillowライブラリのインストールと概要

まず、Pillowをインストールします。Pythonの標準ライブラリにはないため、pipを使用してインストールします。

pip install Pillow
メソッド 機能 使用例
Image.open() 画像ファイルを開く img = Image.open("path/to/image.jpg")
img.resize() 画像サイズを指定した倍率でリサイズ img = img.resize((width, height), Image.LANCZOS)
img.save() 画像を指定フォルダに保存し最適化 img.save("path/to/image.jpg", optimize=True, quality=80)
img.close() 画像ファイルを閉じる img.close()
Image.LANCZOS 高品質のリサンプリングフィルター リサイズ時に指定: img.resize((width, height), Image.LANCZOS)

Pythonコードで一括画像リサイズを実装

次に、指定フォルダ内の画像を一括でリサイズし、サイズを3MB以下にするPythonコードを紹介します。

コードはPillowのメソッドを使い、画像の品質を下げすぎないように最適化しながら目標サイズを達成します。

# 必要なライブラリをインポート
from PIL import Image
import os

# 画像リサイズ関数の定義
def resize_images(folder_path, target_size_kb=3000):
    """
    指定フォルダ内のすべての画像を3MB以下にリサイズし、元ファイルを上書きします。

    Parameters:
    folder_path (str): 画像が保存されているフォルダの絶対パス
    target_size_kb (int): 目標サイズ(KB単位、デフォルトは3000KB=3MB)

    Returns:
    None
    """
    # フォルダ内のすべてのファイルを走査
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            # 画像を開く
            img = Image.open(file_path)

            # リサイズ処理
            quality = 95  # JPEGの画質設定
            while os.path.getsize(file_path) > target_size_kb * 1024:
                # リサイズ処理:画像サイズが3MB以下になるまで徐々に縮小
                img = img.resize((int(img.width * 0.9), int(img.height * 0.9)), Image.LANCZOS)
                # 上書き保存
                img.save(file_path, optimize=True, quality=quality)
                quality -= 5  # 画質を少しずつ下げる

                # 画質が落ちすぎないように制限
                if quality < 30:
                    break

            img.close()
            print(f"{filename}をリサイズし、元データを上書きしました。")

# 使用例
folder_path = "あなたのパス"  # フォルダの絶対パス
resize_images(folder_path)

リサイズコードの解説

上記のコードでは、以下のプロセスで画像をリサイズしています。

  1. フォルダ内の画像の検索と開く
    os.listdir()Image.open()を使い、指定フォルダ内の画像を順に取得して開きます。
  2. リサイズと圧縮の実行
    img.resize()メソッドを使用し、サイズを10%ずつ小さくしながら圧縮します。また、JPEG形式の場合、qualityを少しずつ下げて圧縮率を上げ、目標サイズに近づけます。
  3. 品質を保ちながらファイルサイズを縮小
    Pillowのoptimize=Trueオプションを使用して最適化し、最小限の画質劣化で目標ファイルサイズを達成します。

まとめ

Pillowを使ったPythonによる画像リサイズは、効率的かつ高品質な結果を実現します。

本記事で紹介したコードは、一括で画像サイズを3MB以下にリサイズできるため、大量の画像データを扱う際にも便利です。

Pythonでの画像処理の際に、このようなテクニックをぜひ活用してください。

特にQRコードの生成などは、何かと便利に使えそうですが、QRコードは別のライブラリを使用し、Pillowは補助的に利用するのが最適です。

この記事だけでOK!PythonでQRコードを扱う完全ガイド【保存版】

アイディア 説明
一括画像リサイズ 指定フォルダ内の画像を一括でリサイズし、サイズや解像度を最適化。Webサイトやアプリに適したサイズに変更可能。
画像フォーマットの変換 JPEG、PNG、GIFなど異なる画像形式を相互に変換。圧縮率の変更や形式の統一に役立つ。
サムネイル生成 指定した比率で画像のサムネイルを自動生成。リスト表示などに最適なサイズで保存。
ウォーターマークの追加 画像に著作権保護やブランドロゴの追加。透明度や位置を調整して追加可能。
画像のトリミング 不要な余白や特定部分をカットして保存。画像の特定エリアのみを表示したいときに便利。
フィルターの適用 ぼかし、シャープ、輪郭抽出などのエフェクトを画像に適用し、視覚効果を追加。
テキストの追加 画像上にテキストを描画。フォント、色、位置、サイズを指定してタイトルやキャプションを追加。
カラー変換 グレースケール、セピア、モノクロなどに変換し、印象を変えるフィルタリングが可能。
画像の結合 複数の画像を横や縦に結合し、モンタージュやコラージュを作成。比較画像やビフォーアフター表示に活用。
QRコードやバーコード生成 Pillowと他のライブラリを組み合わせてQRコードやバーコードの生成・保存が可能。商品の管理やリンク埋め込みに使用。