Pythonではお手頃にツールを作れるので、簡単な画像表示ツールでも紹介したいと思います。
こちらは当該ディレクトリ以下の画像を読み込んで表示するだけのツールですが、
フォルダごとに画像を分けているといちいち探し出して見つけるのが大変なことがあるので、
これを使うことで全ての画像を持ってきてすぐ見られるという便利なGUIです。
GUIはTkinterを使用しています。
では作成していきましょう。
プロジェクト
今回は新規でプロジェクトを作成します。
まず何処でもいいので「ImageGallery」フォルダを新規作成してください。
その後に、VSCodeを立ち上げてフォルダを開きます。
下の画像の左上の「ファイル(F)」から「フォルダーを開く…」をクリックして先ほど作成したフォルダ「ImageGallery」を選んでください。
以下の画像で「IMAGEGALLERY」というフォルダを今開いていることが確認できると思います。
フォルダを反映出来たら次はワークスペースファイルを作成します。
以下の画像の「ファイル(F)」から「名前を付けてワークスペースを保存…」をクリックします。
名前は「image_gallery_workspace.code-workspace」にでもして下さい。
ワークスペースファイルを作成できたら、次は自前のパッケージを追加します。
前回の記事「Python | 6. Grep検索ツール」で使用したpgming_packageというフォルダをコピーして、
現在のカレントディレクトリ下に置きます。
(この記事の最後の方にプロジェクトを一括でダウンロードできますのでやらなくて問題ないです)
これで準備は完了です!
ソースコード
パッケージを追加した後に、本ソースを作成します。
以下のように追加してください。
名前は「ImageGalley.py」です。
以下がソースです。
.pyのダウンロードはセキュリティ的にアウトなのでコピーでお願いします。
importするものとしてnatsortがあるのですが、これらは標準ライブラリではないため、
pipでインストールする必要があります。
また、pgming_package内にもtqdmをインポートしているのでこれもインポートします。
まだインストールできていない方は以下のコマンドをコマンドプロンプトで打ってインストールしてください。
pip install tqdm
pip install natsort
ImageGalley.pyでは、GUIプラットフォームをTkinterとして作成しています。
まず、globで当該パス以下内を検索し、該当する画像形式のファイルパスを読み込みます。
その後にImageGalley_resizeフォルダ内のファイルを排他しています。
これは後でリサイズした画像を一時保存するための場所なので読み込まないようにしているということです。
globと一緒には排他プログラムを組み込みません。遅くなるので。
Tkinterで画像を読み込むときはキャンバスを設定してから画像を表示するのですが、
不便なことに自動で画像をリサイズして表示してはくれません。
なので、こちらで予めリサイズ処理を施すという準備をしなければなりません。
プログラムとしてはmax1200×800としてこのサイズを超える画像をリサイズしています。
最大0.999…pxの誤差は出ますが、「//」という”切り捨て除算”を使って縮小させて、
1200×800に収めるようにしてリサイズした画像をImageGalley_resizeフォルダにそのままのディレクトリ下で保存しています。
GuiApplicationクラスがFrameクラスを継承し、
UIを形作っているのですが、その中に画像ファイルリストや最大サイズの情報などを渡す感じです。
ちなみに画像ファイルリストが空の場合はキャンバスやリストボックスのウィジェットを作成しません。
テキストボックスだけが表示される形になります。
構成ファイル
構成ファイルを作成して「F5」キーですぐ実行という形にしてみましょう。
そのために、「launch.json」というファイルを作成することになります。
これは以下の手順で自動で作成できます。
1.上のメニューバーにある「実行(R)」から「構成の追加…」をクリック
2.「Python File」をクリック
3.以下の画像のように「.vscode」フォルダ内に「launch.json」が作成されます
デバッグ実行
では、実行してみましょう!
ImageGalley.pyが画面上に出ていることを確認して、「F5」キーを押します。
上の画像のようにGUIのTkinterが起動してテキストボックスが表示されています。
これはイメージ画像が見つからず表示できていないということなので、同ディレクトリ下にテスト媒体としての画像群を置きます。
ダウンロードは後述の「zipファイル」から一括でダウンロードしてください。
以下のようなディレクトリ構成になっていると思いますので、また「F5」キーで実行してください。
以下の画像のようにGUIが起動されたと思います。
リサイズのために「ImageGalley_resize」フォルダも作成されています。
「ImageGalley_resize」フォルダに保存されている「moss.jpg」が一番サイズの大きい画像ということでGUIキャンバスがその大きさに合わせて表示されているということになります。
リサイズ画像以外は原寸で表示可能です。
exe化
.pyだけでも実行できるのですが、配布するためにはexe化が必要です。
とその前にpgming_package内のrelease.pyでフラグをTrueにしてください。
これはexe化するときにインポートの仕方を切り替えるものとなっています。
# exe化フラグ
flag = True
# リリース用のインポートを行わなければパスが定まらずexeが正常に起動しない。
# デバッグ用は読み込み元プログラムでも読み込み先プログラムでも実行可能なルートパス可変制御を施している。
上記ができれば後はexe化です。
Pythonのソースをexe化するためには「PyInstaller」を用います。
ちなみに、これはコマンドプロンプトで簡単にできます。
まず、コマンドプロンプトを開いて「cd」でカレントディレクトリに移動します。
そして、以下のようにコマンドを打ってください。
pyinstaller ImageGalley.py --onefile --exclude pandas --exclude numpy
上記の「ーーonefile」(※セキュリティ上、連続したハイフンは表せないのでご容赦を)オプションはexeを一つのファイルとして生成するということで、
「ーーexclude」(※セキュリティ上、連続したハイフンは表せないのでご容赦を)オプションはインポートしないライブラリを指します。
基本的にPyInstallerは不要なものもpipでインストールしたライブラリであれば、
含めてexe化させるので、pandasやnumpyを取り込んでしまうと、
ファイルの容量が大きく、起動も遅くなるのでこのように排他します。
コマンドを打ってEnterを押したら処理が走ります。
終了するまで待ちましょう。
終了したら以下のディレクトリにexeが生成されているはずです。
C:\Users[ユーザー名]\dist
zipファイル
以下は「pgming_package」パッケージと、イメージ画像群、ImageGalley.pyをzipしたものになります。
まとめて欲しい人はここからダウンロードしてください。exeファイルは容量が大きすぎるので入っていません。
申し訳ないですが、moss.jpgだけ容量がデカいので分けてダウンロードしてください(汗)