web-dev-qa-db-ja.com

PILで画像を全画面モードで表示できますか?

Python Imaging Libraryで画像を全画面表示する方法は?

from PIL import Image

img1 = Image.open ('colagem3.png');
img1.show ();

全画面モードで表示!

6
Sóstenes Melo

問題の核心

PILには、画像を全画面で開くネイティブの方法はありません。そして、それができないのは理にかなっています。 PILが行うことは、デフォルトでファイルを開くだけです.bmpファイル表示プログラム(通常、Windows上のWindows Photos [これはWindowsのバージョンに依存します])。そのプログラムを全画面で開くためには、PILはプログラムを送信するための引数を知る必要があります。そのための標準的な構文はありません。したがって、それは不可能です。

しかし、それは画像をフルスクリーンで開くための解決策がないということではありません。 PythonのネイティブライブラリTkinterを使用することで、画像を表示するフルスクリーンで表示する独自のウィンドウを作成できます。

互換性

システムに依存しないようにするため(.dllおよび.exeファイルを直接呼び出す)。これはTkinterで実現できます。 Tkinterは表示ライブラリです。このコードは、Python 2または3を実行するすべてのコンピューターで完全に機能します。


私たちの機能

import sys
if sys.version_info[0] == 2:  # the tkinter library changed it's name from Python 2 to 3.
    import Tkinter
    tkinter = Tkinter #I decided to use a library reference to avoid potential naming conflicts with people's programs.
else:
    import tkinter
from PIL import Image, ImageTk

def showPIL(pilImage):
    root = tkinter.Tk()
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()
    root.overrideredirect(1)
    root.geometry("%dx%d+0+0" % (w, h))
    root.focus_set()    
    root.bind("<Escape>", lambda e: (e.widget.withdraw(), e.widget.quit()))
    canvas = tkinter.Canvas(root,width=w,height=h)
    canvas.pack()
    canvas.configure(background='black')
    imgWidth, imgHeight = pilImage.size
    if imgWidth > w or imgHeight > h:
        ratio = min(w/imgWidth, h/imgHeight)
        imgWidth = int(imgWidth*ratio)
        imgHeight = int(imgHeight*ratio)
        pilImage = pilImage.resize((imgWidth,imgHeight), Image.ANTIALIAS)
    image = ImageTk.PhotoImage(pilImage)
    imagesprite = canvas.create_image(w/2,h/2,image=image)
    root.mainloop()

使用法

pilImage = Image.open("colagem3.png")
showPIL(pilImage)

出力

それはあなたのイメージが黒いキャンバスを中心にして全画面ウィンドウを作成します。必要に応じて、画像のサイズが変更されます。ここにそれのビジュアルがあります:

enter image description here

注:エスケープを使用して全画面を閉じます

12
Neil