Python
 Computer >> コンピューター >  >> プログラミング >> Python

TkinterとImageTk.PhotoImageを使った画像のリサイズ方法

PythonでGUIアプリケーションを開発する際、Tkinterアプリケーション内で画像を扱うには、PIL(Pillow)ライブラリが便利です。Pillowを使えば、画像ファイルを開き、サイズを変更し、その結果をウィンドウ上に表示することができます。画像のリサイズには image.resize((width, height)) メソッドを使用し、リサイズ後の画像はラベル(Label)ウィジェットを通じて画面に表示できます。

サンプルコード

以下は、画像を読み込んで指定したサイズにリサイズし、ラベルウィジェットでウィンドウに表示する例です。

# 必要なライブラリをインポート
from tkinter import *
from PIL import Image, ImageTk

# tkinterのフレーム(ウィンドウ)のインスタンスを作成
win=Tk()

# ウィンドウのサイズを設定
win.geometry("700x350")

# 画像を読み込む
image=Image.open('download.png')

# 指定した(幅, 高さ)にリサイズ
img=image.resize((450, 350))

# 画像をTkinter用のPhotoImageオブジェクトに変換
my_img=ImageTk.PhotoImage(img)

# ラベルで画像を表示
label=Label(win, image=my_img)
label.pack()

win.mainloop()

実行結果

上記のコードを実行すると、450×350ピクセルにリサイズされた画像がウィンドウ内に表示されます。

TkinterとImageTk.PhotoImageを使った画像のリサイズ方法

ポイントと注意点

実際に利用する際には、以下の点に注意するとトラブルを防げます。

1. PhotoImageオブジェクトへの参照を保持する
ImageTk.PhotoImage オブジェクトは、Pythonのガベージコレクションによって破棄されると画像が表示されなくなります。関数内で作成する場合は、グローバル変数やインスタンス変数などに参照を保持しておきましょう。

2. リサンプリングフィルタを指定できる
resize() メソッドでは、縮小時の品質を向上させるために img=image.resize((450, 350), Image.LANCZOS) のようにフィルタを指定することも可能です。特に縮小処理では、既定値よりも LANCZOS を使った方が滑らかな仕上がりになります。

3. アスペクト比を維持したい場合
元の画像の縦横比を保ちたい場合は、image.thumbnail((width, height)) メソッドを使うと、比率を崩さずに指定サイズ以内へ収めることができます。

  1. PythonのPygameで画像を表示する方法

    Pygameは、Pythonでゲームやマルチメディアアプリケーションを開発するための定番マルチメディアライブラリです。本記事では、pygameモジュールを使用して、画像のサイズ(高さ・幅)やウィンドウ内での表示位置を考慮しながら、画面に画像を描画する方法を解説します。 画像表示の基本的な流れ 以下のサンプルプログラムでは、まずpygameモジュールを初期化し、ウィンドウのサイズとキャプション(タイトルバーの文字列)を設定します。その後、画像ファイルを読み込み、表示する座標を指定します。screen.blit()関数が実際に画面へ画像を描画し、whileループがウィンドウを閉じる操作(QUITイ

  2. Pythonで画像を操作する方法|Pillowライブラリの基本から実践まで

    Pythonで画像処理を行う際に、最も人気があり事実上の標準とされているライブラリがPillowです。Pillowは旧Python Image Library(PIL)の後継バージョンであり、シンプルな操作から高度な画像加工まで幅広い機能を提供しています。また、SciPyやMatplotlibなど他のPythonライブラリにおける簡易的な画像サポートの基盤としても利用されています。Pillowのインストール方法作業を始める前に、PythonとPillowが必要です。Linux環境では、Fedora、Debian/Ubuntu、ArchLinuxなどの主要ディストリビューションにおいて、以前はP