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

本記事では、Pythonで画像サイズを一括で変更するプログラムについて解説していきます。

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

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

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

縦横比保持のロジックも実装しているので、その点においても参考にしていただけると幸いです。

なお、理系の大学・大学院生は「」による機械学習スキルの習得がおすすめです。カリキュラムから学習支援、就活のサポートまで全て無料で受講できるため、お得に市場価値の高いスキルを身につけてキャリア形成に役立てていきましょう。

目次

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))

横幅は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で画像サイズを一括で変更するプログラムを紹介して、実行方法まで解説しました。

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

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

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

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

スポンサーリンク

目次