2017-11-18 5 views
1

Tkinterウィンドウに画像を表示しようとしています。私は単色画像、灰色の陰影を除いて色のない画像にのみ起こることに気づいた。PythonのTkinterは、ある種の(モノクロの)画像が乱されていることを示しています。

Here's the result window.

底一方(雨)でないながら上側画像(月)が誤って表示されています。 MS Paint(左)とPhoto Viewer(Win10)(右)で見た画像です。 Here's the image viewed in MS Paint (left) and Photo viewer on Win10 (right).

私はイメージの欠陥を見ることができないので、この問題の原因はわかりません。

私はYahoo Weatherからこれらを取り出したので、ここではa link to the "faulty" moon imageです。ここにはa link to the "correct" rain imageです。

最後に、ここに私のコードです:

import tkinter 
from PIL import Image, ImageTk 

window = tkinter.Tk() 

# This part doesn't work as intended 
display = ImageTk.PhotoImage(Image.open('moon.png')) 
label = tkinter.Label(window, image=display) 
label.pack() 

# This part does 
display2 = ImageTk.PhotoImage(Image.open('rain.png')) 
label2 = tkinter.Label(window, image=display2) 
label2.pack() 

window.mainloop() 

注:あなたは私の図助けることはできPillow

:私はPILフォーク(私はPILが唯一のPython 2上で動作理解として)を使用していますこれは?

+0

誰:)何ファイル内の透明な背景を削除した場合はどうしますか? – furas

+0

イメージを.jpgと.gifとして保存してから正しく表示しますが、透過性が必要です。 – Phil

答えて

2

この例では、ImageTkがグレースケール画像をうまく扱えないことが示されています。しかし、画像を正しく表示するには少なくとも2つの回避策があります。

最初はImageTkを使用しないでください。

import tkinter 

window = tkinter.Tk() 
display = tkinter.PhotoImage(file='moon.png') 
label = tkinter.Label(window, image=display) 
label.pack() 

window.mainloop() 

しかし、あなたは絶対にImageTkを使用する必要がある場合、あなたはRGBAへの画像のモードを変更することができます:確かに、Tkの8.6以来、PhotoImageはPNG画像を読み込むことができません完璧な

import tkinter 
from PIL import Image, ImageTk 

window = tkinter.Tk() 

moon = Image.open('moon.png') 
moon.mode = 'RGBA' # force mode to RGBA 
display = ImageTk.PhotoImage(moon) 
label = tkinter.Label(window, image=display) 
label.pack() 

window.mainloop() 
関連する問題