python PIL 長方形の画像に余白を追加して正方形にリサイズする
はじめに
カメラで撮影した画像を正方形に加工して 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」なら上書き。
※ファイルの数が多いとき何度も実行して、毎回上書きするのは無駄な気がするので、処理済みのファイルを上書きしないようにできるパラメータを足しておきました。