从 URL 中读取图像,调整其大小并应用抗锯齿
Reading an image from a URL, resizing it and applying antialiasing
我正在尝试调整大小并对我之前在 Tkinter 中显示的图像应用抗锯齿。我正在从 url 中读取它。问题是,我用tkinter.PhotoImage打开图片,而我需要的resize()函数在PIL.Image里。我想知道是否有一种方法可以将一种方法转换为另一种方法,或者可以通过其他方法解决此问题。
代码如下:
import tkinter
from urllib.request import urlopen
import base64
from PIL import Image
window = tkinter.Tk()
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
b64_data = base64.encodestring(urlopen(url).read())
image = tkinter.PhotoImage(data=b64_data)
# Function I need:
#image = image.resize((100, 100), Image.ANTIALIAS)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()
如果有完全不同的方法可以实现这一点,我很想听听。
好的,那你先用PIL,然后用PIL的TKinter Format把它转成TKinter Image。我的系统上没有 urllib
,所以我使用了 Requests,但那部分应该是可以交换的。
import tkinter
import base64
from PIL import Image, ImageTk
import requests
from PIL import Image
from StringIO import StringIO
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
r = requests.get(url)
pilImage = Image.open(StringIO(r.content))
pilImage.resize((100, 100), Image.ANTIALIAS)
window = tkinter.Tk()
image = ImageTk.PhotoImage(pilImage)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()
有一整页专门介绍 PIL 和 Tkinter:http://effbot.org/tkinterbook/photoimage.htm
我编辑了@user1767754 代码,因为我遇到了一些问题,但它确实对我帮助很大。
注意:我使用了 BytesIO 而不是 StringIO。此外,我将图像模式添加到 'RGBA',因为我在显示灰度图像时遇到问题。此外,还有一些小的修复。
代码:
import tkinter
from PIL import Image, ImageTk
from io import BytesIO
import requests
window = tkinter.Tk()
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
r = requests.get(url)
pilImage = Image.open(BytesIO(r.content))
pilImage.mode = 'RGBA'
pilImage = pilImage.resize((50, 50), Image.ANTIALIAS)
image = ImageTk.PhotoImage(pilImage)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()
我正在尝试调整大小并对我之前在 Tkinter 中显示的图像应用抗锯齿。我正在从 url 中读取它。问题是,我用tkinter.PhotoImage打开图片,而我需要的resize()函数在PIL.Image里。我想知道是否有一种方法可以将一种方法转换为另一种方法,或者可以通过其他方法解决此问题。
代码如下:
import tkinter
from urllib.request import urlopen
import base64
from PIL import Image
window = tkinter.Tk()
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
b64_data = base64.encodestring(urlopen(url).read())
image = tkinter.PhotoImage(data=b64_data)
# Function I need:
#image = image.resize((100, 100), Image.ANTIALIAS)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()
如果有完全不同的方法可以实现这一点,我很想听听。
好的,那你先用PIL,然后用PIL的TKinter Format把它转成TKinter Image。我的系统上没有 urllib
,所以我使用了 Requests,但那部分应该是可以交换的。
import tkinter
import base64
from PIL import Image, ImageTk
import requests
from PIL import Image
from StringIO import StringIO
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
r = requests.get(url)
pilImage = Image.open(StringIO(r.content))
pilImage.resize((100, 100), Image.ANTIALIAS)
window = tkinter.Tk()
image = ImageTk.PhotoImage(pilImage)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()
有一整页专门介绍 PIL 和 Tkinter:http://effbot.org/tkinterbook/photoimage.htm
我编辑了@user1767754 代码,因为我遇到了一些问题,但它确实对我帮助很大。
注意:我使用了 BytesIO 而不是 StringIO。此外,我将图像模式添加到 'RGBA',因为我在显示灰度图像时遇到问题。此外,还有一些小的修复。
代码:
import tkinter
from PIL import Image, ImageTk
from io import BytesIO
import requests
window = tkinter.Tk()
url = "https://s.yimg.com/os/weather/1.0.1/shadow_icon/60x60/partly_cloudy_night@2x.png"
r = requests.get(url)
pilImage = Image.open(BytesIO(r.content))
pilImage.mode = 'RGBA'
pilImage = pilImage.resize((50, 50), Image.ANTIALIAS)
image = ImageTk.PhotoImage(pilImage)
label = tkinter.Label(image=image)
label.pack()
window.mainloop()