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」なら上書き。

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

Python関連記事











これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]