python - 如何在 tkinter 中显示创建的缩略图而不先保存它?
问题描述
我正在尝试通过将图像保存在内存中来在 tkinter 中显示缩略图io.BytesIO()
。我得到_tkinter.TclError: format error in bitmap data
。BitmapImage
支持X11 位图图像。所以我的问题是如何在将图像xbm
传递给BitmapImage
方法之前将其转换为?
from PIL import Image, ImageTk
import tkinter.scrolledtext as tkst
import tkinter as tk
import os, os.path
import io
class Example(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
img = Image.open("1.jpg")
image_size = 256, 256
img.thumbnail(image_size,Image.ANTIALIAS)
b = io.BytesIO()
img.save(b, 'gif')
p = b.getvalue()
photo = tk.BitmapImage(data=p)
self.photo = photo
self.imageview = tk.Label(self, image = self.photo, background="black")
self.imageview.grid(row=0, column=0, rowspan=2, sticky="nsew")
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.geometry("800x400")
root.mainloop()
上次,我使用此代码解决了问题,但有时图像的高度会被截断。
image = Image.open("1.jpg")
basewidth = 900
wpercent = (basewidth/float(image.size[0]))
hsize = int((float(image.size[1])*float(wpercent)))
image = image.resize((basewidth,hsize),Image.ANTIALIAS)
self.photo = ImageTk.PhotoImage(image)
self.imageview.configure(image=self.photo)
解决方案
推荐阅读
- regex - RegExp 从管道分隔的字符串中提取值
- ios - React Native 中“将一个原始像素扩展到多个像素”是什么意思?
- javascript - jQuery 仅在 div 不为空时追加
- pycharm - 是否有在 PyCharm 中插入 {%%} 的快捷方式?
- c# - Visual Studio 推荐使用命令简化
- android - 在按钮上调用键盘删除/退格操作?
- php - 将变量传递给 CURL 对象 (POST)
- assembly - 当一段代码被编译和运行时,计算机内部会发生什么
- javascript - 点击 JavaScript 获取类名值
- html - 使用 flexbox 定位网格