如何在Python Tkinter中调整网络URL图片的大小?
如何在Tkinter中调整网络URL图片的大小
要调整网络图片的尺寸,核心是借助PIL库将获取到的图片二进制数据转为可编辑的Image对象,调整大小后再转为Tkinter兼容的格式。以下是修改后的完整代码:
from urllib.request import urlopen from tkinter import * from PIL import ImageTk, Image from io import BytesIO # 用于包装二进制图片数据 screen = Tk() screen.title("Top Movies of The Week") screen.config(padx=50, pady=50, bg="red") image_url = "https://m.media-amazon.com/imag/MV5BYTRiNDQwYzAtMzVlZS00NTI5LWJjYjUtMzkwNTUzMWMxZTllXkEyXkFqcGdeQXVyNDIzMzcwNjc@._V1_.jpg" u = urlopen(image_url) raw_data = u.read() # 将二进制数据转为PIL Image对象 img = Image.open(BytesIO(raw_data)) # 方法1:固定尺寸调整(示例为200x300,可按需修改) # resized_img = img.resize((200, 300), Image.Resampling.LANCZOS) # 方法2:保持宽高比调整(限制最大宽度为200) max_width = 200 ratio = max_width / img.width new_height = int(img.height * ratio) resized_img = img.resize((max_width, new_height), Image.Resampling.LANCZOS) # 转为Tkinter可用的PhotoImage photo = ImageTk.PhotoImage(resized_img) label = Label(image=photo) label.pack() screen.mainloop()
关键步骤说明
- 导入BytesIO:把网络获取的二进制图片数据包装成PIL能识别的类文件对象,这样才能用
Image.open()读取。 - 调整尺寸:
- 固定尺寸直接传入目标宽高元组
(width, height)。 - 保持宽高比则先计算比例,再推导对应高度,避免图片变形。
- 固定尺寸直接传入目标宽高元组
- 插值方法:使用
Image.Resampling.LANCZOS(PIL 9.1.0+版本),低版本PIL替换为Image.LANCZOS,该方法能让调整后的图片保持较高清晰度。
内容的提问来源于stack exchange,提问作者Clay
相关产品推荐
相关产品推荐

