image_view.py 技術ドキュメント

プログラムの動作

image_view.py は、PythonのGUIライブラリ tkinter を使用して構築された画像ビューアアプリケーションです。このプログラムは、ユーザーが指定した画像ファイルを指定されたサイズで表示することを目的としています。

主な機能は以下の通りです。

  • 画像ファイルの表示: プログラム起動時にコマンドライン引数で画像ファイルを指定すると、その画像を指定されたサイズ(またはデフォルトサイズ)で表示します。

  • ファイル選択機能: GUI上の「Open Image」ボタンをクリックすることで、ファイルダイアログを開き、任意の画像ファイルを閲覧・選択して表示できます。

  • 表示サイズの設定: GUI上に「Width」と「Height」の入力フィールドがあり、表示する画像のサイズ(ピクセル単位)をユーザーが手動で変更できます。これらの値は、次に画像を開く際に適用されます。

  • 初期表示設定: コマンドライン引数を通じて、初期表示する画像ファイルパスと、その画像の初期表示幅・高さを設定できます。

原理

このプログラムは、以下のライブラリと技術を組み合わせて画像の読み込み、処理、表示を行っています。

  • GUIフレームワーク: Pythonの標準ライブラリである tkinter を使用して、ウィンドウ、ボタン、入力フィールドなどのユーザーインターフェース要素を構築しています。

  • 画像ファイルの読み込み:

    • Pillow (PIL) ライブラリの Image.open() 関数が、JPEG, PNG, BMPなど様々な画像形式のファイルを直接読み込むために利用されます。

    • 代替として OpenCV (cv2) ライブラリの cv2.imread() 関数も使用可能です。cv2.imread() は画像をBGR形式で読み込むため、読み込んだ画像は cv2.cvtColor(img, cv2.COLOR_BGR2RGB) によってRGB形式に変換された後、Image.fromarray() を用いてPIL形式の画像オブジェクトに変換されます。

  • 画像のリサイズ:

    • 読み込んだ画像オブジェクトは、PillowImage.resize((width, height)) メソッドを使用して、ユーザーが指定した幅と高さにリサイズされます。この処理により、元の画像のサイズに関わらず、指定された表示領域に画像をフィットさせることが可能になります。

  • 画像の表示:

    • Matplotlibによる表示 (デフォルト): プログラムは matplotlib.figure.Figure を用いて描画領域を作成し、ax.imshow(img_resized) でリサイズされた画像をプロットします。軸の表示は ax.axis('off') で無効化されます。このMatplotlibのFigureは、matplotlib.backends.backend_tkagg.FigureCanvasTkAgg を使用してTkinterのウィジェットとしてウィンドウ内に埋め込まれ、表示されます。

    • Tkinter Canvasによる表示 (コメントアウト): 代替として、PillowImageTk.PhotoImage を使用してPIL画像をTkinterが扱える形式に変換し、tk.Canvas.create_image() メソッドでキャンバスに描画することも可能です。この方法は、コード内でコメントアウトされています。

これらの連携により、画像ファイルの読み込みからリサイズ、そしてGUI上での表示までの一連の処理が実現されています。

必要な非標準ライブラリとインストール方法

image_view.py を実行するには、以下の非標準ライブラリが必要です。

  • Pillow: 画像ファイルの読み込み、リサイズ、およびTkinter表示用の画像変換に使用されます。

  • opencv-python: オプションで画像ファイルの読み込みに使用されます(コード内でコメントアウトされたread_image_cv2関数が有効化された場合)。

  • matplotlib: 画像の表示に使用されます(デフォルトの表示方法)。

これらのライブラリは pip コマンドでインストールできます。

pip install Pillow opencv-python matplotlib

必要な入力ファイル

本プログラムは、表示する画像ファイルを必要とします。

  • ファイル形式: Pillow および OpenCV がサポートする一般的な画像ファイル形式(例: JPEG (.jpg, .jpeg)、PNG (.png)、BMP (.bmp)、GIF (.gif) など)に対応しています。

  • データ構造: 特別なデータ構造は必要ありません。標準的な画像ファイルであれば問題なく処理されます。

  • ファイルパス: ファイルは、絶対パスまたはプログラム実行ディレクトリからの相対パスで指定できます。GUIの「Open Image」ボタンを使用する場合は、ファイルダイアログで任意の場所からファイルを選択できます。

生成される出力ファイル

image_view.py は、画像を画面に表示するGUIアプリケーションであり、ディスク上に新たなファイルを生成したり保存したりすることはありません。プログラムの主な目的は、ユーザーが指定した画像をインタラクティブに閲覧することです。

コマンドラインでの使用例 (Usage)

image_view.py は、以下の形式でコマンドラインから実行できます。

python image_view.py [画像ファイルパス] [] [高さ]
  • [画像ファイルパス]: プログラム起動時に表示する初期画像ファイルのパスを指定します。この引数はオプションです。

  • [幅]: 表示する画像の初期幅をピクセル単位で指定します。整数値である必要があります。この引数はオプションで、省略した場合はデフォルト値の800が使用されます。

  • [高さ]: 表示する画像の初期高さをピクセル単位で指定します。整数値である必要があります。この引数はオプションで、省略した場合はデフォルト値の800が使用されます。

引数を指定しない場合、幅800x高さ800の空のビューアウィンドウが開きます。

コマンドラインでの具体的な使用例

例1: 引数なしで実行

python image_view.py

実行結果: 初期画像なしで、幅800ピクセル、高さ800ピクセルの画像ビューアウィンドウが開きます。ウィンドウ内には「Open Image」ボタンがあり、これをクリックすることで任意の画像ファイルを選択して表示できます。幅と高さの入力フィールドはそれぞれ 800 に設定されています。

例2: 特定の画像ファイルのみを指定して実行

sample.jpg という画像ファイルがプログラムと同じディレクトリにあると仮定します。

python image_view.py sample.jpg

実行結果: sample.jpg が幅800ピクセル、高さ800ピクセルにリサイズされて表示される画像ビューアウィンドウが開きます。幅と高さの入力フィールドはそれぞれ 800 に設定されています。

例3: 画像ファイルと表示サイズを指定して実行

my_image.png という画像ファイルがプログラムと同じディレクトリにあり、これを幅1024ピクセル、高さ768ピクセルで表示したい場合。

python image_view.py my_image.png 1024 768

実行結果: my_image.png が幅1024ピクセル、高さ768ピクセルにリサイズされて表示される画像ビューアウィンドウが開きます。幅と高さの入力フィールドはそれぞれ 1024768 に設定されています。