URL 목록이 있고 각 URL에는 하나의 이미지 만 포함되어 있으며 Python을 사용하여 단일 tkinter 캔버스에 모든 이미지를 표시하고 싶습니다. 또한 목록에는 이미지를 포함하지 않는 일부 URL이 포함되어 있습니다. tkinter는 해당 URL을 무시해야합니다.
한 번에 하나의 이미지 만 표시하는 코드를 만들었습니다.
import io
import base64
try:
# Python2
import Tkinter as tk
from urllib2 import urlopen
except ImportError:
# Python3
import tkinter as tk
from urllib.request import urlopen
root = tk.Tk()
root.title("display a website image")
w = 800
h = 600
x = 200
y = 300
root.geometry("%dx%d+%d+%d" % (w, h, x, y))
image_url = "http://www.okclipart.com/img2/yrdulrdklckodbfcqsuy.png"
image_byt = urlopen(image_url).read()
image_b64 = base64.encodestring(image_byt)
photo = tk.PhotoImage(data=image_b64)
cv = tk.Canvas(bg='white')
cv.pack(side='top', fill='both', expand='yes')
cv.create_image(10, 10, image=photo, anchor='nw')
root.mainloop()
이미지 URL 샘플 목록
urllist =['https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/NoCopyright.png/600px-NoCopyright.png','http://www.okclipart.com/img16/kjlhjznjvkokwqpalupl.png'
,'http://www.okclipart.com/img16/qcmwejvtwuufltxsibbn.png',
'http://www.okclipart.com/img2/yrdulrdklckodbfcqsuy.png']
또한 목록에 이미지가 포함되지 않은 URL이 있으므로 해당 URL을 무시합니다.
try ... except urllib2.HTTPError
도움이 될 것입니다.urllist
각 이미지를로드합니다. 성공하면 캔버스에 그립니다.#from urllib.request import HTTPError #py3
#from urllib2 import HTTPError #py2
#...
def load_image_to_base64(image_url):
""" Load an image from a web url and return its data base64 encoded"""
image_byt = urlopen(image_url).read()
image_b64 = base64.encodestring(image_byt)
return image_b64
# load photos to photos list
urllist = ['http://www.okclipart.com/img16/kjlhjznjvkokwqpalupl.png',
'invalidurltest',
'http://www.okclipart.com/YouWontFindThisImage.png']
photos = []
for i, url in enumerate(urllist):
print(i,"loading",url)
try:
photo = tk.PhotoImage(data=load_image_to_base64(url))
photos.append(photo)
print("done")
except HTTPError as err:
print("image not found, http error code:", err.code)
except ValueError:
print("invalid url", url)
# iterate through photos and put them onto the canvas
for photo in photos:
cv.create_image(10*i, 10*i, image=photo, anchor='nw')
root.mainloop()
#...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다