見出し画像

「Pythonでフォルダ内画像を全て一度にリサイズするGUIアプリ」を作ってみました。

今回はVS CodeでPythonのライブラリ [PySimpleGUI][Pillow]使って、
windows用デスクトップアプリを作ってみたいと思います。

完成したGUIアプリはこんな感じです。

▼ボタンひと押しで選択したフォルダ内の画像が全てリサイズされます。


Pillowとは

PillowとはPIL(Python Imaging Library)という画像ライブラリの後継です
OpenCVのようにコンピュータービジョン系の高度な画像処理(顔検出やオプティカルフローなど)はできないが、リサイズ(拡大・縮小)や回転、トリミング(部分切り出し)のような単純な処理が簡単にできる。

必要に応じて、インストールします

pip install Pillow

公式ドキュメント↓

from PIL import Image, ImageFilter

今回はImageモジュールのthumbnailを利用します
Image.thumbnail(size,resample=Resampling.BICUBIC, reducing_gap=2.0)
アスペクト比を維持しながら、指定したサイズ以下の画像に縮小させる。拡大はできないと思います

Imageモジュールの画像をリサイズ(拡大・縮小)するメソッドresize()を利用することもできます

ファイルとして保存したい場合はImage.saveを使います。

resized_img.save('resized.png')

PySimpleGUIとは


近年、開発されたデスクトップアプリを作るためのライブラリです。
Tkinterよりも簡単にGUIアプリが作れるということで使ってみたいと思います。
簡単な理由は、Pythonのリストを用いて画面レイアウトを表現できることのようです

■PySimpleGUIのインストール

pip install PySimpleGUI


PyInstllerでpythonファイルをexe化

pip install PyInstaller

pyinstallerを、pythonファイル名を指定して実行することで、exeファイルを作成できます

pyinstaller -wF pythonファイル

作成したexeファイルをダブルクリックするだけでアプリケーションを実行することができるようになります。


VScodeでコードを書いていきます。

◤出来上がったソースコードはこんな感じです。

import PySimpleGUI as sg
import sys
import os
import glob
from PIL import Image

if len(sys.argv) == 1:
   event, values = sg.Window('画像サイズ変更',
                   [
                   [sg.Text('指定ピクセル(横長は幅、縦長は高さ)',
                            size=(30, 1)),sg.InputText('',size=(10, 1))],
                   [sg.InputText(), sg.FolderBrowse("フォルダ参照")],
                   [sg.Text('参照フォルダ内の画像⇒保存先フォルダ【変換後files】', size=(50, 1))],
                   [sg.Open('サイズ変更実行')]
                   ]).read(close=True)
   img_size = values[0]
   fname = values[1]
else:
   fname = sys.argv[1]

if not fname:
   sg.popup("Cancel", "No filename supplied")
   raise SystemExit("Cancelling: no filename supplied")

else:
   # 配列「files」をforでフォルダ内の画像すべて(/jpg/.png)をOPEN
   files = glob.glob(fname + '/*')
   for f in files:
      img = Image.open(f)
      #リサイズは縮小のみ
      img.thumbnail((int(img_size),int(img_size)), Image.ANTIALIAS)
      ftitle, fext = os.path.splitext(f)
      a1,a2 = os.path.split(f)

      #ファイル名に「r_」を付けて、縮小した画像をフォルダ「変換後files」保存する
      dst_dir = a1+'/変換後files'
      os.makedirs(dst_dir, exist_ok=True)
      img.save(dst_dir + '/r_' + a2)
   sg.popup('OK!')


初めてPySimpleGUIでアプリを作ってみました。
確かにTkinterよりも簡単に作れるように感じました。
まだ詳しい使い方が分かっていませんが、思いついたアイデアが使える形になりました。

また、Pythonで何か作っていきたいと思います。



有料部分にはexeファイルだけがあります。


PythonをインストールしていないPCでも利用できるデスクトップアプリです。
※Windowsのみでご使用いただけます。MACではお使いいただけません。

もしよろしければ、
私にコーヒー一杯分をお恵みいただけましたら、この上ない幸せです。

ここから先は

0字 / 1ファイル

¥ 100

もしよろしければ、私にコーヒー一杯分をお恵みいただけましたら、この上ない幸せです。今後も皆様の100円ライター(便利なもの)となれますよう頑張ります。