从URL读取图像,调整其大小并应用抗锯齿

时间:2017-11-22 18:58:51

标签: python tkinter python-imaging-library image-resizing antialiasing

我试图调整大小并将抗锯齿应用于我之前在Tkinter中显示的图像。我是从网址上阅读的。问题是,我用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()

如果有一种完全不同的方式我可以做到这一点,我想听听它。

2 个答案:

答案 0 :(得分:2)

好的,首先使用PIL,然后使用PIL的TKinter格式将其转换为TKinter图像。我的系统上没有urllib因此我使用了请求,但该部分应该是可交换的。

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

答案 1 :(得分:0)

我编辑了@ 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()