无法从TKinter的URL加载图像

时间:2016-08-09 16:33:09

标签: python tkinter base64 python-imaging-library urllib

我的目标是使用tkinter python从URL显示JPG图像。

这是我用作参考的stackoverflow link。但是当我尝试运行代码时,我收到了一堆错误,例如:

  • KeyError:b' R0l .......
  • AttributeError:' PhotoImage'对象没有属性' _PhotoImage__photo'

有没有人能解决这个问题?

这是代码:

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

root = tk.Tk()

URL = "http://www.universeofsymbolism.com/images/ram-spirit-animal.jpg"
u = urlopen(URL)
raw_data = u.read()
u.close()


b64_data = base64.encodestring(raw_data)
photo = ImageTk.PhotoImage(b64_data)

label = tk.Label(image=photo)
label.image = photo
label.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:1)

第一个错误是未在data中指定ImageTk.PhotoImage(data=b64_data)参数。但是,我不确定为什么PhotoImage无法读取base64数据。

解决方法是使用BytesIO模块中的io。您可以将从图片中读取的原始数据传递到BytesIO,在Image中将其打开,然后将其传递到PhotoImage

我找到了从here打开图片的代码。

import tkinter as tk
from PIL import Image, ImageTk
from urllib2 import urlopen
from io import BytesIO

root = tk.Tk()

URL = "http://www.universeofsymbolism.com/images/ram-spirit-animal.jpg"
u = urlopen(URL)
raw_data = u.read()
u.close()

im = Image.open(BytesIO(raw_data))
photo = ImageTk.PhotoImage(im)

label = tk.Label(image=photo)
label.image = photo
label.pack()

root.mainloop()

如果有人对编码失败的原因有更好的答案,那么这个问题就更合适了。