Pythonで画像を一括処理する方法|初心者向けに画像サイズをまとめて変更

Pythonは、計算やデータ処理だけでなく、画像をまとめて処理する作業にも利用できます。

例えば、

  • 画像のサイズをまとめて変更する
  • 画像形式をまとめて変換する
  • 大量の画像を別のフォルダーに整理する
  • 画像に同じ処理をまとめて行う

といった作業を自動化できます。

今回は、Pythonの画像処理ライブラリである**Pillow(ピロー)**を使って、複数の画像をまとめて縮小する方法を紹介します。

プログラミング初心者でも理解しやすいように、Pillowのインストールからプログラムの実行まで、一つずつ解説していきます。


Pythonで画像を一括処理すると何が便利?

画像が数枚しかない場合は、手作業でサイズを変更してもそれほど大変ではありません。

しかし、画像が数十枚、数百枚と増えてくると、1枚ずつ処理するのは面倒です。

例えば、

「このフォルダーにある画像を全部1200×1200ピクセル以内に縮小したい」

という作業なら、Pythonを使ってまとめて処理できます。

一度プログラムを作ってしまえば、同じ作業を繰り返すときにも利用できます。

これがPythonによる作業の自動化の面白いところです。


今回はPillowを使って画像を処理する

Pythonには、画像を扱うための便利なライブラリがいくつもあります。

今回は、その中でも初心者でも使いやすいPillowを利用します。

Pillowを使うと、Pythonから画像を読み込んだり、サイズを変更したり、保存したりできます。

ただし、PillowはPythonに最初から入っている標準ライブラリではありません。

そのため、プログラムを実行する前にPillowをインストールする必要があります。


今回の解説は Windows に Python がインストールされていることを前提にしています。

Python のインストールがまだの場合はこちらの記事を参考にしてインストールを先に済ませてください。

参考記事
・WindowsにPythonをインストールする方法【初心者向け】

Pillowをインストールする

まず、Pillowをインストールしましょう。

Windowsの場合は、コマンドプロンプトやPowerShellなどを開きます。

そして、次のコマンドを入力します。

pip install Pillow

入力したらEnterキーを押します。

しばらく待って、

Successfully installed Pillow

のような表示が出れば、インストールは完了です。


pipでエラーが出る場合

環境によっては、

pip install Pillow

を実行しても、pipが見つからないなどのエラーが出る場合があります。

その場合は、次のコマンドを試してください。

python -m pip install Pillow

Windowsでは、こちらも利用できます。

py -m pip install Pillow

Pythonの環境によって使用できるコマンドが異なる場合があります。

まずは、

pip install Pillow

を試して、うまくいかなければ、

python -m pip install Pillow

を試すとよいでしょう。


Pillowがインストールされたか確認する

インストールが終わったら、Pillowが正しく使えるか確認してみましょう。

次のプログラムを実行します。

from PIL import Image

print("Pillowを利用できます!")

エラーが出ず、

Pillowを利用できます!

と表示されればOKです。

これで画像処理の準備ができました。


「PillowなのにPIL」と書く理由

ここで少し不思議に感じるかもしれません。

インストールするときは、

pip install Pillow

なのに、Pythonのプログラムでは、

from PIL import Image

と書きます。

「Pillowをインストールしたのに、なぜPILなの?」

と思いますよね。

これは、Pillowがもともとの**PIL(Python Imaging Library)**を引き継いだライブラリだからです。

そのため、インストールするときは「Pillow」、Pythonのコードでは「PIL」と書きます。

この違いは少し紛らわしいですが、間違いではありません。


今回作るプログラム

今回は、次のような処理を行います。

  1. 「images」フォルダーから画像を探す
  2. 画像を1枚ずつ読み込む
  3. 最大サイズを1200×1200ピクセルにする
  4. 「resized」フォルダーに保存する

元の画像は変更せず、処理後の画像を別フォルダーに保存します。

まず、次のようなフォルダーを作ります。

画像処理
├─ images
│   ├─ photo01.jpg
│   ├─ photo02.jpg
│   └─ photo03.jpg
│
└─ image_resize.py

imagesフォルダーの中に、処理したいJPG画像を入れておきます。


画像を一括処理するプログラム

準備ができたら、次のプログラムを実行してみましょう。

from pathlib import Path
from PIL import Image

input_folder = Path("images")
output_folder = Path("resized")

output_folder.mkdir(exist_ok=True)

for file in input_folder.glob("*.jpg"):
    with Image.open(file) as image:
        image.thumbnail((1200, 1200))
        image.save(output_folder / file.name)

print("画像の処理が完了しました!")

プログラムを実行すると、「resized」というフォルダーが自動的に作られます。

画像処理
├─ images
│   ├─ photo01.jpg
│   ├─ photo02.jpg
│   └─ photo03.jpg
│
├─ resized
│   ├─ photo01.jpg
│   ├─ photo02.jpg
│   └─ photo03.jpg
│
└─ image_resize.py

これで、imagesフォルダーに入っていた画像が縮小され、resizedフォルダーに保存されます。


画像の容量が元のサイズから縮小されている。

                     ↓

プログラムを一つずつ見てみよう

ここからは、プログラムの内容を一つずつ確認していきます。

Pathを読み込む

from pathlib import Path

これは、Pythonでファイルやフォルダーを扱いやすくするための機能です。

今回のプログラムでは、画像が入っているフォルダーや保存先のフォルダーを指定するために使います。


PillowからImageを読み込む

from PIL import Image

ここで、先ほどインストールしたPillowを利用します。

Imageを使うことで、Pythonから画像を開いたり、加工したり、保存したりできます。

もし、

ModuleNotFoundError: No module named 'PIL'

というエラーが表示された場合は、Pillowがインストールされていない可能性があります。

その場合は、もう一度、

pip install Pillow

を実行してみてください。


入力するフォルダーを指定する

次のコードを見てみましょう。

input_folder = Path("images")

ここでは、処理する画像が入っているimagesフォルダーを指定しています。

つまり、

input_folder
↓
images

という関係です。


保存先のフォルダーを指定する

次に、

output_folder = Path("resized")

としています。

こちらは、処理した画像を保存する場所です。

今回は、

resized

というフォルダーを指定しています。


mkdir()で保存先フォルダーを作る

次のコードです。

output_folder.mkdir(exist_ok=True)

これは、resizedフォルダーを作る処理です。

まだフォルダーが存在しなければ、自動的に作成します。

exist_ok=True

としているため、すでにフォルダーが存在していてもエラーになりません。


glob()で画像を探す

次の部分を見てみましょう。

for file in input_folder.glob("*.jpg"):

ここでは、imagesフォルダーの中にある「.jpg」の画像を探しています。

*.jpgの「*」は、

「どんなファイル名でもよい」

という意味です。

例えば、

photo01.jpg
photo02.jpg
cat.jpg
landscape.jpg

などが対象になります。


for文で画像を1枚ずつ処理する

for file in input_folder.glob("*.jpg"):

のforは、繰り返し処理を行うためのものです。

例えば3枚の画像が入っていた場合、

photo01.jpg
↓
処理

photo02.jpg
↓
処理

photo03.jpg
↓
処理

というように、画像を1枚ずつ処理します。

画像が100枚あったとしても、同じ仕組みで処理できます。


Image.open()で画像を開く

画像を見つけたら、

with Image.open(file) as image:

で画像を開きます。

Image.open()を使うことで、画像をPythonから扱えるようになります。

例えば、

photo01.jpg

を読み込むと、Pythonからその画像のサイズ変更などができるようになります。


thumbnail()で画像を縮小する

今回の中心となる処理がこちらです。

image.thumbnail((1200, 1200))

これは、画像を1200×1200ピクセル以内に縮小する処理です。

例えば、

4000 × 3000

の画像なら、

1200 × 900

のように縮小されます。

縦横比は維持されるため、画像が不自然に引き伸ばされることはありません。

また、もともと1200×1200ピクセル以内の画像は、無理に拡大されません。


save()で画像を保存する

最後に、

image.save(output_folder / file.name)

で画像を保存します。

ここで、

output_folder

は、

resized

です。

そして、

file.name

は元のファイル名です。

例えば、

photo01.jpg

なら、

resized/photo01.jpg

として保存されます。

そのため、元の画像を残したまま、縮小した画像を別のフォルダーに作ることができます。


今回のプログラムの流れ

今回の処理を図にすると、次のようになります。

imagesフォルダー
       ↓
jpg画像を探す
       ↓
画像を1枚読み込む
       ↓
1200×1200以内に縮小
       ↓
resizedフォルダーに保存
       ↓
次の画像へ
       ↓
すべての画像が終わるまで繰り返す

人間が1枚ずつ操作する代わりに、Pythonが同じ作業を繰り返してくれます。

これがプログラムによる自動化です。


Pillowでできること

今回使用したPillowは、画像を扱うためのさまざまな機能を持っています。

例えば、

できること例
サイズ変更画像を小さくする
形式変換JPG・PNGなどを変換する
切り抜き画像の一部分を切り出す
回転画像を90度回転する
色の変更明るさなどを調整する
画像保存加工した画像を書き出す

今回のプログラムは、その中でも特に簡単な「画像サイズの変更」を利用しています。


Pythonで画像処理を自動化するメリット

画像を1枚だけ処理するなら、画像編集ソフトを使ったほうが簡単な場合もあります。

しかし、大量の画像を同じルールで処理する場合は、Pythonが便利です。

例えば、

  • 画像をまとめて縮小する
  • 大量の画像を同じ形式に変換する
  • 画像を別フォルダーに整理する
  • 同じ画像処理を何度も繰り返す

といった作業です。

特に、同じ作業を何度も繰り返す場合にPythonのメリットが出てきます。


写真をたくさん扱う人にも便利

写真をたくさん撮影している場合にも、画像処理の自動化は役立ちます。

例えば、

撮影した写真
     ↓
Pythonで一括処理
     ↓
サイズ変更
     ↓
別フォルダーへ保存

という流れを作ることができます。

1枚ずつ画像編集ソフトで処理するのではなく、

「このフォルダーにある画像を全部こう処理する」

という考え方ができます。

Pythonを覚えると、単にプログラムを書くというより、

「面倒な作業をどう自動化するか?」

という発想が身につきます。


最初は小さな自動化から始めよう

Pythonによる画像処理というと、

「難しい画像処理のプログラムを書かないといけない」

と思うかもしれません。

しかし、最初はそんなに難しいことをする必要はありません。

例えば、

  • 画像をまとめて縮小する
  • 画像形式をまとめて変換する
  • 画像を別フォルダーに整理する
  • 同じ処理を大量の画像に行う

といった簡単な作業から始めてみましょう。

重要なのは、難しいプログラムを書くことではありません。

「同じ作業を繰り返しているなら、Pythonに任せられないか?」

と考えることです。


元画像は必ずバックアップしておこう

画像を自動処理するときは、元画像を残しておくことをおすすめします。

今回のプログラムでは、元のimagesフォルダーを変更せず、resizedフォルダーに処理後の画像を保存しています。

このように、

元画像
↓
残しておく

処理後の画像
↓
別フォルダーに保存

という構成にしておくと安心です。

特に、画像を上書きするようなプログラムを作る場合は注意しましょう。


今回覚えたPythonの機能

今回のプログラムでは、いくつかのPythonの機能を使いました。

コード役割
Path()ファイルやフォルダーを扱う
mkdir()フォルダーを作る
glob()条件に合うファイルを探す
for繰り返し処理をする
Image.open()画像を開く
thumbnail()画像を縮小する
save()画像を保存する

これらを組み合わせることで、

「フォルダー内の画像を全部処理する」

というプログラムを作ることができました。


まとめ

今回は、PythonとPillowを使って画像を一括処理する方法を紹介しました。

ポイントをまとめると、

  • Pythonは画像処理にも利用できる
  • Pillowを使うと画像を扱いやすい
  • PillowはPython標準ライブラリではない
  • 画像処理の前にPillowのインストールが必要
  • glob()で大量の画像を探せる
  • for文で画像を1枚ずつ処理できる
  • thumbnail()で画像をまとめて縮小できる
  • 大量の同じ作業を自動化できる
  • 元画像を残して処理することが重要

ということです。

Pythonは、ゲームを作ったり、計算をしたりするだけのプログラミング言語ではありません。

「人間が何度も繰り返している面倒な作業を、代わりにやってもらう」

という使い方もできます。

最初は小さな作業でも構いません。

「この作業、毎回同じことをやっていて面倒だな」

と思ったら、

「これ、Pythonで自動化できないかな?」

と考えてみると、Pythonの面白さがさらに見えてきます。

関連記事
・WindowsにPythonをインストールする方法【初心者向け】
・Pythonで簡単な自動化をする方法|初心者でもできる身近な作業を自動化
タイトルとURLをコピーしました