目次
面倒な処理一位の称号を与えてもいいのが、画像のリサイズではないでしょうか?
小さすぎてもダメ、大きすぎてもアップできないプラットフォームが多い。
リサイズしたら画質が落ちる。
Macの場合だと右クリックから簡単にリサイズする方法もありますが、数が多いと面倒です。
本記事では、Pythonを使用して指定フォルダ内のすべての画像を3MB以下にリサイズする方法を紹介します。
Pythonで画像リサイズを行うメリット
Pythonには強力な画像処理ライブラリであるPillow(PIL)があり、画像のリサイズや形式変換をシンプルに実行できます。
Pillowを使った画像リサイズのメリットは以下の通りです。
- 操作が簡単:Pillowのインターフェースは分かりやすく、数行のコードでリサイズが可能。
- 品質保持:圧縮後も画像の品質をある程度保つことが可能。
- 処理が高速:複数画像を一括処理するための効率的な方法が提供されている。
Pillowライブラリのインストールと概要
まず、Pillowをインストールします。
Pythonの標準ライブラリにはないため、pipを使用してインストールします。
pip install PillowPythonコードで一括画像リサイズを実装
次に、指定フォルダ内の画像を一括でリサイズし、サイズを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)リサイズコードの解説
上記のコードでは、以下のプロセスで画像をリサイズしています。
- フォルダ内の画像の検索と開く os.listdir()とImage.open()を使い、指定フォルダ内の画像を順に取得して開きます。
- リサイズと圧縮の実行 img.resize()メソッドを使用し、サイズを10%ずつ小さくしながら圧縮します。
また、JPEG形式の場合、qualityを少しずつ下げて圧縮率を上げ、目標サイズに近づけます。 - 品質を保ちながらファイルサイズを縮小 Pillowのoptimize=Trueオプションを使用して最適化し、最小限の画質劣化で目標ファイルサイズを達成します。
まとめ
Pillowを使ったPythonによる画像リサイズは、効率的かつ高品質な結果を実現します。
本記事で紹介したコードは、一括で画像サイズを3MB以下にリサイズできるため、大量の画像データを扱う際にも便利です。
Pythonでの画像処理の際に、このようなテクニックをぜひ活用してください。
特にQRコードの生成などは、何かと便利に使えそうですが、QRコードは別のライブラリを使用し、Pillowは補助的に利用するのが最適です。



