从 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()