【发布时间】:2015-08-21 09:57:54
【问题描述】:
我在 zip 存档中有一组 jpeg 文件。我想在 Tkinter 小部件中显示成员 jpeg 图像。
我在创建 Image 对象时遇到问题。我尝试将 ZipFile.open() 和 ZipFile.read() 的输出提供给 Image() 和 PhotoImage(),所有这些都会导致相同的错误消息:“UnsupportedOperation: seek”。 Documentation for Image.open() 声明如果文件对象作为参数给出,文件对象必须支持读取、查找和告诉方法。显然 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),但我宁愿在内存中做所有事情。
请帮忙。
【问题讨论】:
-
另外你应该添加python标签来拥有更多的读者......
-
Eric:我看过那个帖子;它没有帮助,但谢谢。我通过将 ZipFile.read(membername) 提供给 BytesIO 解决了我的问题,BytesIO 返回一个可查找的内存文件。 Image.open 接受它,之后的一切都很容易。我欢迎任何其他解决方案。
-
如果您找到了解决方案,那么最好将其发布为答案。
标签: python python-2.7 tkinter zip jpeg