PySimpleGUI 显示 URL .JPG
PySimpleGUI displaying a URL .JPG
我正在使用 PySimpleGui。我想要一个本地占位符 image.jpg,直到按下按钮以加载基于 URL 的 JPG。
通过四处搜索,我看到有人说要使用 PIL 导入,但是目前我有点不清楚如何根据我的要求实现这一点。
我也在使用 Cloudscraper,因为每当我发出 URL 请求时,我都会因 403 错误而被阻止。
这里是测试代码:
import PySimpleGUI as sg
from PIL import ImageTk, Image
from PySimpleGUI.PySimpleGUI import Column, HorizontalSeparator, In, VSeperator
from io import BytesIO
import io
import os
import cloudscraper
url = "https://cdnb.artstation.com/p/users/avatars/000/149/439/large/fe2b0699a4a2db62eb2814d44c81a0cf.jpg"
scrapper = cloudscraper.create_scraper(browser={'browser': 'firefox','platform': 'windows','mobile': False}).get(url).content
im = Image.open(scrapper)
print(im.format, im.size, im.mode)
imgViewer = [
[sg.Image(Image.open(""), key="-ArtistAvatarIMG-")],
[sg.Button("Get Cover Image", key="Clicky")]
]
layout = [
[
sg.Column(imgViewer)
],
]
window = sg.Window("Testing", layout)
def main():
while True:
event, values = window.read()
if event == "EXIT" or event == sg.WIN_CLOSED:
break
if event == "Clicky":
window['-ArtistAvatarIMG-'].Update(im)
window.close()
if __name__ == "__main__":
cDir = os.getcwd()
main()
sg.Image
仅支持 PNG 和 GIF 格式,由于图像是 jpg 你必须将它转换为 png,为此你可以使用 PIL:
import io
import os
import PySimpleGUI as sg
from PySimpleGUI.PySimpleGUI import Column, HorizontalSeparator, In, VSeperator
from PIL import Image
import cloudscraper
url = "https://cdnb.artstation.com/p/users/avatars/000/149/439/large/fe2b0699a4a2db62eb2814d44c81a0cf.jpg"
jpg_data = (
cloudscraper.create_scraper(
browser={"browser": "firefox", "platform": "windows", "mobile": False}
)
.get(url)
.content
)
pil_image = Image.open(io.BytesIO(jpg_data))
png_bio = io.BytesIO()
pil_image.save(png_bio, format="PNG")
png_data = png_bio.getvalue()
imgViewer = [
[sg.Image(data=png_data, key="-ArtistAvatarIMG-")],
[sg.Button("Get Cover Image", key="Clicky")],
]
# ...
我正在使用 PySimpleGui。我想要一个本地占位符 image.jpg,直到按下按钮以加载基于 URL 的 JPG。
通过四处搜索,我看到有人说要使用 PIL 导入,但是目前我有点不清楚如何根据我的要求实现这一点。
我也在使用 Cloudscraper,因为每当我发出 URL 请求时,我都会因 403 错误而被阻止。
这里是测试代码:
import PySimpleGUI as sg
from PIL import ImageTk, Image
from PySimpleGUI.PySimpleGUI import Column, HorizontalSeparator, In, VSeperator
from io import BytesIO
import io
import os
import cloudscraper
url = "https://cdnb.artstation.com/p/users/avatars/000/149/439/large/fe2b0699a4a2db62eb2814d44c81a0cf.jpg"
scrapper = cloudscraper.create_scraper(browser={'browser': 'firefox','platform': 'windows','mobile': False}).get(url).content
im = Image.open(scrapper)
print(im.format, im.size, im.mode)
imgViewer = [
[sg.Image(Image.open(""), key="-ArtistAvatarIMG-")],
[sg.Button("Get Cover Image", key="Clicky")]
]
layout = [
[
sg.Column(imgViewer)
],
]
window = sg.Window("Testing", layout)
def main():
while True:
event, values = window.read()
if event == "EXIT" or event == sg.WIN_CLOSED:
break
if event == "Clicky":
window['-ArtistAvatarIMG-'].Update(im)
window.close()
if __name__ == "__main__":
cDir = os.getcwd()
main()
sg.Image
仅支持 PNG 和 GIF 格式,由于图像是 jpg 你必须将它转换为 png,为此你可以使用 PIL:
import io
import os
import PySimpleGUI as sg
from PySimpleGUI.PySimpleGUI import Column, HorizontalSeparator, In, VSeperator
from PIL import Image
import cloudscraper
url = "https://cdnb.artstation.com/p/users/avatars/000/149/439/large/fe2b0699a4a2db62eb2814d44c81a0cf.jpg"
jpg_data = (
cloudscraper.create_scraper(
browser={"browser": "firefox", "platform": "windows", "mobile": False}
)
.get(url)
.content
)
pil_image = Image.open(io.BytesIO(jpg_data))
png_bio = io.BytesIO()
pil_image.save(png_bio, format="PNG")
png_data = png_bio.getvalue()
imgViewer = [
[sg.Image(data=png_data, key="-ArtistAvatarIMG-")],
[sg.Button("Get Cover Image", key="Clicky")],
]
# ...