簡體   English   中英

zip文件中包含的Python 2.7顯示jpeg圖像

[英]Python 2.7 display jpeg image contained in zip file

我在zip存檔中有一組jpeg文件。 我想在Tkinter小部件中顯示成員jpeg圖像。

我在創建Image對象時遇到了麻煩。 我嘗試將ZipFile.open()和ZipFile.read()的輸出提供給Image()和PhotoImage(),所有這些都導致相同的錯誤消息:“ UnsupportedOperation:seek”。 Image.open()的文檔指出,如果將文件對象作為參數給出,則該文件對象必須支持read,seek和tell方法。 顯然,ZipFile.open()返回的“類似文件的對象”不符合要求。

zfile = zipfile.ZipFile(filename,'r')
...
filelikeobject = zfile.open(membername,'r')
image = Image.open(filelikeobject)

File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1967, in open
fp.seek(0)
UnsupportedOperation: seek

我找不到有關壓縮jpeg文件的任何相關文章。 我知道我的zip格式正確,因為我可以在Java和Perl中使用相同的文件執行此操作(我正在用Python / Tk重寫大型Java應用程序)。

蠻力方法是將成員文件提取到磁盤,然后簡單地調用Image(pathname),但是我寧願在內存中做所有事情。

請幫忙。

我能夠從(不可搜索的)ZipFile對象創建可搜索的內存文件,如下所示:

from io import BytesIO
import zipfile
from PIL import Image, ImageTk
...
zfile = zipfile.ZipFile(filename,'r')  # non-seekable
memberlist = zfile.namelist()
...
zfiledata = BytesIO(zfile.read(membername)) # seekable
image = Image.open(zfiledata)  # image.show() will display
photo = ImageTk.PhotoImage(image)

然后,照片可以在任何帶有圖像對象的Tk小部件中使用(例如,Canvas,Label等)

在上述代碼的第一次嘗試中,我收到有關丟失文件的錯誤消息。 顯然ImageTk不是標准2.7安裝的一部分。 我在SO 帖子中找到了安裝說明。

暫無
暫無

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

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