python PIL 長方形の画像に余白を追加して正方形にリサイズする

2017.9.10

はじめに

カメラで撮影した画像を正方形に加工してWEBにアップするという作業をしています。

適当にダウンロードしてきたフリーのツールを使用していましたが、数が多くなってきたので、スクリプトで処理できるようにしたいと思います。

普段使用しているツールにスクリプト機能があれば、そちらで処理しても良いと思います。

さっそくコード。

正方形の画像を作ってリサイズした元画像を重ねるコード

コードはこんな感じです。

from PIL import Image

def resizeSquare(in_img_path, out_img_path, out_img_width, out_img_height, overwrite):

    if overwrite == 0 and os.path.exists(out_img_path):
        return

    out_img_size = out_width, out_height
    in_img = Image.open(in_img_path)
    in_img.thumbnail(out_img_size, Image.ANTIALIAS)
    blank_color = R, G, B = (255, 255, 255)
    out_img = Image.new("RGB", out_img_size, blank_color)
    in_img_width, in_img_height = in_img.size
    center = (out_width - in_img_width) // 2, (out_height - in_img_height) // 2
    out_img.paste(in_img, center)
    out_img.save(out_img_path)

使用したライブラリなど

環境はWindows7+python3.6.3です。

>python --version
Python 3.6.2

画像の加工に使用したライブラリはPILです。

from PIL import Image

使用するには、インストールが必要です。

pip install pillow

ちょっと解説

想定した使用シーンは、元データをおいておくディレクトリを用意しておき、そこに加工前の画像を入れます。

ディレクトリ内のファイル一覧を取得するスクリプトで元データのフルパス一覧を取得してループさせます。

ループ内で今回作成した関数を呼び出して、元データ、出力先、横幅、縦幅、上書きするかしないかを指定してリサイズ処理を実行します。

方法として、指定サイズのブランク画像を作成して、その中に入るように元画像をリサイズしていますので、正方形以外でも対応できます。

resizeSquare(in_img_path, out_img_path, out_img_width, out_img_height, overwrite)

関数のパラメータについて。

in_img_path・・・元画像ファイルのフルパスを渡す。

out_img_path・・・出力先画像のフルパスを渡す。

out_img_width・・・加工後の横幅。

out_img_height・・・加工後の縦幅。

overwrite・・・上書きするかどうか。「1」なら上書き。

※ファイルの数が多いとき何度も実行して、毎回上書きするのは無駄な気がするので、処理済みのファイルを上書きしないようにできるパラメータを足しておきました。

Related.