簡體   English   中英

將圖像從BytesIO對象加載到Tk小部件

[英]Load image from BytesIO object to Tk widget

我想為此將圖像從BytesIO對象渲染到畫布上:

from io import BytesIO
from Tkinter import *
from PIL import Image as ImageModule
f = open("test.png","rb")
bdata = BytesIO()
bdata.write(f.read())
bdata.seek(0)

pilImage = ImageModule.open(bdata)
canvas_width = 794
canvas_height =559

master = Tk()
canvas = Canvas(master, 
           width=canvas_width, 
           height=canvas_height)
canvas.pack()
img = PhotoImage(pilImage)
i = canvas.create_image(0,0, anchor=NW, image=img)
mainloop()

我收到了帶有畫布和標簽的錯誤消息:

File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2058, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TypeError: __str__ returned non-string (type instance)

如果您知道如何修復此代碼或通過BytesIO對象在畫布上呈現圖像的另一種方法,那將是非常不錯的。 謝謝

如錯誤消息所述,在這種情況下,pilImage是ImageModule類的類實例,並且PhotoImage期望包含文件名的字符串被打開。

pilImage = ImageModule.open(bdata)  ## returns instance of class

您應該可以按原樣使用“ test.png”

img=PhotoImage(file="/path/to/image/test.png")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM