【python】フォルダ内の画像を一括で圧縮する方法
画像を一括で圧縮する良い感じのツールがなく、chatgptに聞いたらpythonでできるとのことだったので作ってもらいました。
なお、プログラミングに関してはド素人です。
chatgptに聞いたコードをそのまま使ったらうまくいっただけなので、動かす場合は自己責任でお願いします。
pythonの環境構築
まずpythonを動かす環境が必要です。
私はVScodeでjupyter notebookを使っています。
詳しく書くと長くなってしまうので、具体的な解説は別の方の記事を貼っておきます。
VScodeでpythonを使う方法はこちらの記事がわかりやすかったです。
jupyter notebookは拡張機能をインストールすれば使えます。
画像を一括で圧縮するコード
あとはjupyter notebookを新しく作成して、以下のコードを実行するだけです。
import os
from PIL import Image
def compress_images_in_folder(input_folder, output_folder, quality):
"""
フォルダ内の画像を一括で圧縮する関数
:param input_folder: 入力画像フォルダのパス
:param output_folder: 出力画像フォルダのパス
:param quality: 圧縮品質(0〜100の範囲、100が最高品質)
"""
# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 入力フォルダ内のファイルを処理
for filename in os.listdir(input_folder):
if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
compress_image(input_path, output_path, quality)
def compress_image(input_path, output_path, quality):
"""
JPEG画像の容量を圧縮する関数
:param input_path: 入力画像ファイルのパス
:param output_path: 出力画像ファイルのパス
:param quality: 圧縮品質(0〜100の範囲、100が最高品質)
"""
with Image.open(input_path) as img:
img = img.convert('RGB')
output_path = os.path.join(output_folder, os.path.splitext(os.path.basename(input_path))[0] + '.jpg')
img.save(output_path, format='JPEG', quality=quality)
# 入力フォルダと出力フォルダを指定
input_folder = r'ここに画像が入ったフォルダのパス'
output_folder = r'ここに出力先のパス'
# 圧縮品質(0〜100、100が最高品質)
compression_quality = 75
# 画像を一括で圧縮して保存
compress_images_in_folder(input_folder, output_folder, compression_quality)
分かる部分の解説
・ライブラリ
こちらはosとPILというライブラリを使って画像を圧縮するコードです。
osは、ファイルやディレクトリの作成、削除、移動ができるもの。
PILは、Pythonで画像処理を行えるもの。
・img = img.convert('RGB')
画像が「RBGA」だとうまく動かなかったため、chatgptに聞いたらRGBに変換してから行うようにコードを修正してくれました。
なお、RGBAのAはアルファ値で透過機能のことです。
ですので、このコードで圧縮するとPNGの透過機能は失われます。
・自分で指定が必要な部分
フォルダと圧縮品質は自分で指定する必要があります。
圧縮品質が75でいい方はそのままでも大丈夫です。
フォルダはinput_folderに画像が入ったフォルダ、output_folderが出力先です。
「'(アポストロフィ)」の間に入力してください。
input_folder = r'C:\sample'
output_folder = r'C:\sample\resize'
なお、input・outputフォルダを同じにすると上書きされるので注意してください。
・圧縮品質
compression_qualityの数値を変えることで圧縮後の画像品質を指定できます。
デフォルトで75にしてありますが、0~100で指定可能です。
4k画像を75で処理すると以下のような感じです。
※左が圧縮前・右が圧縮後
ちなみに圧縮サイズは7.4MB→704KBと約1/10になりました。
この記事が気に入ったらサポートをしてみませんか?