Я следую вместе с демонстрацией Image Viewer и адаптировал код, как показано ниже
from PIL import Image,ImageTk
import requests
import PySimpleGUI as sg
import io
def get_img_data(f, maxsize=(800, 640), first=False):
"""Generate image data using PIL
"""
img = Image.open(f)
img.thumbnail(maxsize)
if first: # tkinter is inactive the first time
bio = io.BytesIO()
img.save(bio, format="PNG")
del img
print(bio.getvalue())
return bio.getvalue()
return ImageTk.PhotoImage(img)
url = 'https://upload.wikimedia.org/wikipedia/commons/c/c5/JPEG_example_down.jpg'
response = requests.get(url,stream=True)
image_data = get_img_data(response.raw,first=True)
image_elem = sg.Image(data=image_data)
layout = [
[image_elem],
]
window = sg.Window("Image",layout=layout)
while True:
event,response = window.read()
image_elem.update(data=get_img_data(response.raw, first=True))
Я получаю эту ошибку
TclError: couldn't recognize image data
Не имеет значения, является ли get_img_data верным или false в случае l oop. Оба генерируют либо эту ошибку для меня, либо ошибку, которая говорит
'Too early to create image'
Я думаю, что проблема может быть в том, что URL-адрес является JPG, но приведенный ниже код работает нормально и показывает файл PNG.
from PIL import Image
import requests
url = 'https://upload.wikimedia.org/wikipedia/commons/c/c5/JPEG_example_down.jpg'
response = requests.get(url,stream=True)
img = Image.open(response.raw)
img.show()
Любое понимание этого будет оценено. Спасибо