
Pythonで画像サイズを一括で変更するプログラムを作りたい…。
できれば縦横比も保持したままで作成したいです…。
そういった悩みを解決します。
- Pythonで画像サイズを一括で変更するプログラムを解説
- 実際にプログラムを実行するまでの手順
最近Pythonを勉強しており、そのアウトプットとして本記事をまとめていきます。
結論から述べると、10行程度の超簡単なプログラムでできるので、非エンジニアの方でも簡単に作れます。
上記ツイートのように、ブロガーの方で自動化したい方もぜひチャレンジしてみてください。
- 22歳国立理系大学生(機械学習をテーマに研究)
- Web系のプログラミング言語を勉強→ITベンチャーで長期インターン
- SWELL利用歴2年(ブログ運営、コーポレートサイト制作)
- 現在は法人のWebマーケティングの仕事を受けています
Pythonで画像サイズを一括で変更するプログラムを解説


まずはプログラムを実行するための環境を整えていきます。
適当なフォルダの中に、以下のような「imgフォルダ」と「resizeフォルダ」を作成して、「resize.py」にプログラムを書いていきましょう。


「resize.py」に書くコードはたったのこれだけでOKです。
import os
from PIL import Image
dir_name = 'img'
new_dir_name = 'resize'
files = os.listdir(dir_name)
for file in files:
img = Image.open(os.path.join(dir_name, file))
img_resize = img.resize((1200, 1200 * img.height // img.width))
img_resize.save(os.path.join(new_dir_name, file))
横幅はSEOに良いといわれている1,200pxで、それに応じて縦幅が決まるといったプログラムにしています。
それでは順番にプログラムをみていきましょう。
import os
from PIL import Image
1, 2行目では、今回使用するライブラリをインポートしています。(詳しく知りたい方は、自分で調べてみてください)
dir_name = 'img'
new_dir_name = 'resize'
4, 5行目では、先ほど作成した「imgフォルダ」と「resizeフォルダ」を変数に格納してあげます。
files = os.listdir(dir_name)
7行目では、imgフォルダにある画像を取得して、filesというリスト変数に格納してあげます。
for file in files:
img = Image.open(os.path.join(dir_name, file)) #imgフォルダの中にある画像ファイルをimgとして変数に格納
img_resize = img.resize((1200, 1200 * img.height // img.width)) #imgをリサイズ
img_resize.save(os.path.join(new_dir_name, file)) #リサイズしたimgをresizeフォルダに保存
9〜12行目では、imgフォルダにある画像の分だけforループが繰り返され、後はコメントアウトの通りです。
1,200のところを変更すると横幅が変わり、それに応じて縦幅も変更します。
実際にプログラムを実行するまでの手順


ここからは、先ほど紹介したプログラムを実行していきましょう。
まずは、imgフォルダにリサイズしたい画像を用意します。


次に、ターミナル(Windowsならコマンドプロンプト)に入って、「imgフォルダ」「resizeフォルダ」「resize.py」のあるディレクトリに移動します。
cd 任意のディレクトリ


僕は先ほど紹介したとおり、適当に「画像サイズ変更フォルダ」にまとめているので、そこに移動していきます。
最後に、resize.pyを実行してあげましょう。


その際のコマンドは以下の通りです。
python resize.py
プログラムを実行後、resizeフォルダに入ってみると、リサイズされた画像があることがわかります。


画像を開いてみると、横幅が1,200pxになっており、縦幅はそれに応じたサイズになっていることがわかります。


Pythonで画像サイズを一括で変更するプログラムでよくあるエラー


僕が初めて上記のプログラムを実行した際は、エラーが出て実行できませんでした。
その時に出てきたエラー文は以下の通り。
PIL.UnidentifiedImageError: cannot identify image file 'img/.DS_Store'
これはMacユーザー特有のエラーでして、Macでは全てのフォルダに自動的に1つずつ「.DS_Store」という隠しファイルが作成されるみたいです。
これを解決するためには、「.DS_Store」という隠しファイルを先に消してあげましょう。
files.remove('.DS_Store')
これを7行目の後ろに入れてあげれば解決します。
最後に、このエラーが出てきた方用の全てのプログラムを載せておきますね。
import os
from PIL import Image
dir_name = 'img'
new_dir_name = 'resize'
files = os.listdir(dir_name) #imgフォルダの画像を取得
files.remove('.DS_Store') #.DS_Storeファイルを削除
for file in files:
img = Image.open(os.path.join(dir_name, file)) #imgフォルダの中にある画像ファイルをimgとして変数に格納
img_resize = img.resize((1200, 1200 * img.height // img.width)) #変数imgをリサイズ
img_resize.save(os.path.join(new_dir_name, file)) #リサイズしたimgをresizeフォルダに保存
まとめ:Pythonで画像サイズを一括で変更するプログラムを作成しよう


本記事では、Pythonで画像サイズを一括で変更するプログラムを紹介して、実行方法まで解説しました。
探せばいくらでも画像サイズを一括変更してくれるアプリやウェブサービスはあるかもですが、自分の手で何かを自動化することは面白いので、記事にしてみました。
ぜひお試しください(*`・ω・)ゞ
というわけで今回は以上とします。最後まで読んでいただきありがとうございました。

