我试图调整大小并将抗锯齿应用于我之前在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()
如果有一种完全不同的方式我可以做到这一点,我想听听它。
答案 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()