2015-10-08 3 views
0

Я пытаюсь получить изображение с веб-сайта для отображения на виджете Label, но Tkinter принимает только формат GIF и BMP. Практически все изображения, которые я нахожу, это JPG или PNG. код у меня сейчас выглядит следующим образом:Нужна помощь в преобразовании ссылки JPG в формат GIF

from urllib import urlopen 
from Tkinter import * 
from PIL import Image 
import Tkinter as tk 

root = Tk() 

url = "http://www.wired.com/wp- 
content/uploads/2015/03/10182025tonedfull- 
660x441.jpg" 
u = urlopen(url) 
raw_data = u.read() 
u.close() 
import base64 
b64_data = base64.encodestring(raw_data) 
image = tk.PhotoImage(data=b64_data) 
label = tk.Label(image=image) 
label.pack() 

root.mainloop() 

я получаю сообщение об ошибке, говорящее, что он не может распознать изображение. Если кто-нибудь знает, как я могу это исправить, сообщите мне. Спасибо.

+0

В Tcl/tk 8.6+, PhotoImage также работает с файлами .png, но PIL или подушка все еще необходимы для чего-то еще. 8.6 поставляется с 3,4, 3,5 PSF установщиком Windows, некоторыми Linux-системами и некоторыми альтернативными установщиками Mac. –

ответ

1

Следующая должна позволить вам загрузить JPG файлы:

from PIL import Image, ImageTk 
from cStringIO import StringIO 
from urllib import urlopen 
from Tkinter import * 
from PIL import Image 
import Tkinter as tk 

root = Tk() 
url = "http://www.wired.com/wp-content/uploads/2015/03/10182025tonedfull-660x441.jpg" 
u = urlopen(url) 
raw_data = u.read() 
u.close() 

image_file = Image.open(StringIO(raw_data)) 
photo_image = ImageTk.PhotoImage(image_file) 
label = tk.Label(image=photo_image) 
label.pack() 
root.mainloop() 

Вам не нужно base64 кодирования, но вы должны использовать ImageTk, чтобы загрузить изображение. Это будет отображаться следующим образом:

enter image description here

+0

Большое вам спасибо! Да, сейчас это работает. – Spacegod87

0

Вы не можете использовать Jpg с изображением, вы должны также импортировать ImageTk

очень простой рабочий пример может быть:

import io 
    from PIL import Image, ImageTk 
    import Tkinter as tk 
    from urllib2 import urlopen 

    root = tk.Tk() 
    url = "http://www.wired.com/wp-content/uploads/2015/03/10182025tonedfull-660x441.jpg" 
    image_bytes = urlopen(url).read() 
    data_stream = io.BytesIO(image_bytes) 
    pil_image = Image.open(data_stream) 
    tk_image = ImageTk.PhotoImage(pil_image) 
    label = tk.Label(root, image=tk_image, bg='brown') 
    label.pack(padx=5, pady=5) 
    root.mainloop() 
Смежные вопросы