tkinterで画像を表示させる

Python




tkinterで画像を表示させる

今回の記事は、「tkinterでpngやjpgなどのgif以外の画像を表示させる方法」です。

結論から言います。
解決方法は、PILImageImageTkを使うことです。

それでは、画像を表示させていきましょう。

追加:TkinterはPNGに対応しました。
  :jpegは対応していません。

TkinterはPNGに対応した

Tkのバージョン8.6から、PNGが対応しました。

PhotoImage for images in PGM, PPM, GIF and PNG formats. The latter is supported starting with Tk 8.6.
tkinterのリファレンスより引用

残念ながら、jpegは対応していません。
jpegを使う場合は、次章の”Tkinterは標準でjpgなどに対応していない”を参照してください。

バージョンの確認

Tkinterのバージョンを確認してください。

PNGを使用するには、Tkinterのバージョンが8.6以上である必要があります。

画像を表示させる

import tkinter as tk

# ウィンドウ作成
root = tk.Tk()
root.title("榛名")
root.minsize(796, 816)

# 画像表示
#fileに適当なpng画像を指定してください。
haruna = tk.PhotoImage(file="haruna_kankore.png")

canvas = tk.Canvas(bg="black", width=796, height=816)
canvas.place(x=0, y=0)
canvas.create_image(0, 0, image=haruna, anchor=tk.NW)

# メインループ
root.mainloop()

Pythonでアニメ画像の顔検出

Tkinterは標準でjpgなどに対応していない

pngやjpgの画像が表示できない

という問題がありました。

Tkは標準でGIFやPPM/PGM形式の画像ファイルを扱うことができます。
お気楽Python/Tkinter入門

tkinterでは、標準でpngやjpgといったイメージファイル形式には対応していません

そこで、ここではtkinterの標準の画像表示でない方法を使って解決します。
これで、pngやjpgなどの画像が表示できるようになります。


PILで画像を表示する

PILのImageImageTkを使います。

tkinterで画像を表示することが出来るようになります。

import tkinter as tk
from PIL import Image, ImageTk


画像の開き方

Imageのopenを使って画像を開きます。
リサイズなど画像の処理をする場合、下のコードの指定の場所に記述してください。

まず、Imageで画像を開き、Imageの形で、画像の加工をします。
そのあとに、Tkinter用に変換をかけるといった処理手順を踏んでいます。

img = Image.open(open('test.jpg', 'rb'))
'''
リサイズなどの処理をする
'''
img = ImageTk.PhotoImage(img) 


画像の表示

画像の表示では、サムネイルにある画像と同じものを実行するソースコードを記載します。
[web上にある画像を保存します]の部分がそれに当たります。

import tkinter as tk
from PIL import Image, ImageTk
import urllib.request as req

'''
web上にある画像を保存します
'''
url = "http://imgcc.naver.jp/kaze/mission/USER/20180519/35/3012705/157/500x718xedab7ba7e203cd7576d12004.jpg"
req.urlretrieve(url, "test.jpg")

'''
tkinterのメイン
'''
root = tk.Tk()

root.geometry('800x560')
root.title('IMG')

canvas = tk.Canvas(
    root, # 親要素をメインウィンドウに設定
    width=500,  # 幅を設定
    height=500 # 高さを設定
    #relief=tk.RIDGE  # 枠線を表示
    # 枠線の幅を設定
)

canvas.place(x=0, y=0)  # メインウィンドウ上に配置

#PILでjpgを使用
img1 = Image.open(open('test.jpg', 'rb'))
img1.thumbnail((500, 500), Image.ANTIALIAS)
img1 = ImageTk.PhotoImage(img1)  # 表示するイメージを用意

canvas.create_image(  # キャンバス上にイメージを配置
    0,  # x座標
    0,  # y座標
    image=img1,  # 配置するイメージオブジェクトを指定
    tag="illust",  # タグで引数を追加する。
    anchor=tk.NW  # 配置の起点となる位置を左上隅に指定
)

root.mainloop()

Pythonで顔検出


まとめ

tkinterでは、標準でGIFやPPM/PGM形式の画像ファイルを扱うことが出来る。
しかし、一般的な画像形式である、pngやjpgは標準で対応していません。

そこで、PILのImageとImageTkを利用した表示方法を紹介しました。


参考



12歳からはじめる ゼロからの Pythonゲームプログラミング教室

タイトルとURLをコピーしました