Pythonで画像サイズを一括で変更するプログラム【縦横比保持】

悩む人

Pythonで画像サイズを一括で変更するプログラムを作りたい…。
できれば縦横比も保持したままで作成したいです…。

そういった悩みを解決します。

本記事の内容
  • Pythonで画像サイズを一括で変更するプログラムを解説
  • 実際にプログラムを実行するまでの手順

最近Pythonを勉強しており、そのアウトプットとして本記事をまとめていきます。

結論から述べると、10行程度の超簡単なプログラムでできるので、非エンジニアの方でも簡単に作れます。

上記ツイートのように、ブロガーの方で自動化したい方はぜひチャレンジしてみてください。

本記事を書いている人
  • 22歳国立理系大学生(機械学習をテーマに研究)
  • Web系のプログラミング言語を勉強→ITベンチャーで長期インターン
  • Twitterのフォロワー数は1500名ほど
  • 現在は法人の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フォルダにリサイズしたい画像を用意します。

imgフォルダにリサイズしたい画像を用意
imgフォルダにリサイズしたい画像を用意

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

cd 任意のディレクトリ
ターミナルで任意のディレクトリに移動
ターミナルで任意のディレクトリに移動

僕は先ほど紹介したとおり、適当に「画像サイズ変更フォルダ」にまとめているので、そこに移動していきます。

最後に、resize.pyを実行してあげましょう。

resize.pyをターミナル上で実行
resize.pyをターミナル上で実行

その際のコマンドは以下の通りです。

python resize.py

プログラムを実行後、resizeフォルダに入ってみると、リサイズされた画像があることがわかります。

resizeフォルダにリサイズされた画像
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で画像サイズを一括で変更するプログラムを紹介して、実行方法まで解説しました。

探せばいくらでも画像サイズを一括変更してくれるアプリやウェブサービスはあるかもですが、自分の手で何かを自動化することは面白いので、記事にしてみました。

ぜひお試しください(*`・ω・)ゞ

というわけで今回は以上とします。最後まで読んでいただきありがとうございました。

Thank you for sharing my post !!
  • URLをコピーしました!
目次