【Python】Pillowを使ったリサイズ方法をご紹介!アスペクト比を保持する方法も併せて説明!

本ページには、プロモーションが含まれています。

本記事ではPythonの画像処理ライブラリを使ってリサイズする方法をご紹介していきます。

ソースコード

gist45da4b1962745245d73224f352d1ddb3

ソースコードの説明

ここからはソースコードの具体的な説明をしていきます。

変数

変数については基本コメントにある通りです。

import_fileとexport_fileは、入力・出力したいフォルダのパスを入力するものとなっています。

もし【Desktop/Sample】上のファイルを設定したい場合は、【'Desktop','Sample'】という書き方になります。

def resize(img)について

この関数で画像のリサイズ処理を行っています。

ここをもっと簡略化すると

【image.resize( ( リサイズ後のW , リサイズ後のH ) ) 】

のみとなり本記事の内容が終了となります。

しかしこれで全く味気が無いため、アスペクト比を保持した状態でもリサイズできるようにしています。

まず下記の

 resize_y = RESIZE_X / image.width * image.height if isASPECT == True else RESIZE_Y

ですが、こちらはPython 3.8からの新機能である代入式を使っています。

詳細は下記の記事

qiita.com

簡単に言えば変数へ代入するものを条件によって変更するというもの。

本記事では【isASPECT】が条件になっており、変化は下記の通り。

True(真):縦幅に比率で処理したものを代入

False(偽):縦幅に指定された数値を代入

 

また、このアスペクト比を維持した処理を入れることにより、【resize_y】の型がfloat型になります。

これをint型に戻すためimage.resizeの中身に【int()】を付けています。

 

※resize_x は計算を行っていないため、int()を付ける必要も変数を宣言する必要もありません。

ただ、縦幅を基準に横幅を変更したい場合は計算が必要になる、かつコードの可視性のため追加しているだけです。

そのため、【resize_x】は実質いらないため、コピーしても使わないと判断した場合は消して変数【RESIZE_X】を入れても問題ありません。

for文の中

最後にfor文の中身ですが、【import_file】の中にあるPNG画像を全てリサイズ、その後同じ名前で【export_file】に保存するものとなっています。

Pythonを触っていればよく見る形なので、説明は割愛させていただきます。

使い方

一応本記事に掲載したソースコードの使い方として、どこかに加工前フォルダと加工後フォルダを作成してください。

そして、2つのフォルダのパスを【import_file】と【export_file】に記載。

その後【RESIZE_X】と【RESIZE_Y】にリザイスしたいサイズを代入し、アスペクト比を保存したい場合は【isASPECT】をTrueに、保存しない場合はFalseに設定。

最後に加工前フォルダにリサイズしたいPNG画像を入れて、プログラムを実行すると加工後フォルダにリサイズされたPNG画像が出力された状態になります。

これで使い方は終了です。


本記事の内容は以上となります。

画像のリサイズは非常に簡単なので1文程度で完了しますが、周りの処理などを含めていくとちょっとしたプログラムになるため、忘れた時用に確認してみてください。

本記事は以上です。お疲れさまでした。