PySimple Gui - не может отображать изображения, когда URL-адрес удален (или, возможно, когда его JPG) - PullRequest
0 голосов
/ 27 апреля 2020

Я следую вместе с демонстрацией 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()

Любое понимание этого будет оценено. Спасибо

...