Pythonでたった8行のコードで画像をリサイズするプログラム

今日は、たった8行のコードで画像をリサイズするプログラムを紹介します。
たくさんの画像を、すばやく、簡単にリサイズしたいときがあると思います。
そんなとき、とても便利なプログラムです。
興味のある方は参考にしてください。
本プログラムの特徴
- コードは8行(超シンプル)
- 好きなフォルダ内の全画像を一括読み込み
- 指定フォルダ内にリサイズ画像を一括保存
プログラム
以下のコードをみてください。
import glob
import PySimpleGUI as sg
from PIL import Image
fname = sg.popup_get_folder('画像が入ったフォルダーを選択してください')
save_path = sg.popup_get_folder('リサイズした画像の保存先フォルダを指定してください')
for i, f in enumerate(glob.glob(fname + '/*')):
w, h = Image.open(f).size
Image.open(f).resize((w//2, h//2), Image.LANCZOS).save(save_path + '/' + str(w//2) + 'x' + str(h//2) + '_' +str(i) + '.jpg')
ポイント解説
1.PySimpleGUIでポップアップ画面を表示しフォルダ指定
以下の sg.popup_get_folder( ) のコードでポップアップ画面を表示しフォルダ指定ができるようになります。
fname = sg.popup_get_folder('画像が入ったフォルダーを選択してください')
save_path = sg.popup_get_folder('リサイズした画像の保存先フォルダを指定してください')
2.enumerate( ) のカッコ内に直接 glob.glob( ) を入れておく
fname には、先ほど指定したフォルダのパスが代入されています。
その fname をglob.glob( ) のカッコに入れ + ’/*’ とすることで、フォルダ内の全拡張子の画像ファイルのパスを読み込むことができます。
つまり、glob.glob( ) はフォルダ内の全拡張子の画像ファイルのパスが入ったリストと同じものになります。
なので、直接 enumerate( ) のカッコ内に入れることができます。
3.Image.open(f) と size を直接つないで画像サイズを取得
通常、Image.open( ) は カッコ内の画像パスを開いてImage画像を取得するのに使用します。
ですが、Image.open( ) を「 . 」でsizeと直接つなぐことで、画像の縦横サイズが一気に取得できるようになります。
4.Image.open( ) . resize( ) . save( ) のようにつなぐこともできる
先ほどの応用で、「 . 」で Image.open( ) と resize( ) と save( ) をつなぐことができます。
つまり、最初に画像を開き、リサイズして、保存する処理をコード一行で記載することができます。
5.リサイズ画像のサイズ変更、拡張子変更
save( ) の中で、str( w//2 ) や str( h//2 ) と記載している部分があります。w は画像の横ピクセル数、h は画像の縦ピクセル数になります。w // 2 は、横ピクセル数を2で割って(半分にする)あまりは切り捨てるという意味です。
// の記号は切捨除算と言うもので、計算結果は必ず整数( int )になります。注意したいのは、/ の記号を使った場合です。これは、除算になるので計算結果が浮動小数( float )になる場合があります。画像サイズは整数値でないとエラーがでるので、// を使用しています。もし、三分の一にしたいときは、w // 3 としてください。
また、画像の拡張子指定は、save( ) のカッコ内で ' . jpg ' と記載している部分になります。この部分を、’ . png ' とすれば png 画像として保存されます。
まとめ
- PySimpleGUIでポップアップ画面を表示し、フォルダ指定することができる。
- enumerate( ) のカッコ内に直接 glob.glob( ) を入れることができる。
- Image.open( ) と size を「. 」で直接つないで画像サイズを取得することができる。
- さらに、Image.open( ) . resize( ) . save( ) のようにつなぐこともできる。
参考図書
今日紹介した、// と / の演算子処理の違いについて詳しく解説されています。Pythonの基本文法を理解したい方に最適だと思います。
以下の本は、上級者向けになります。今回紹介した「 . 」でつなぐテクニックなど、コード改善に役立つ情報が満載です。私も持っており、11.7項を参考にしています。
ディスカッション
コメント一覧
まだ、コメントがありません