可以使用PIL/Pillow打开zip文件中的图像,而不必首先将其解压缩到磁盘上?如何使用PIL/Pillow读取zip文件中的图像
1
A
回答
5
最近枕头版本不需要.seek()
:
#!/usr/bin/env python
import sys
from zipfile import ZipFile
from PIL import Image # $ pip install pillow
filename = sys.argv[1]
with ZipFile(filename) as archive:
for entry in archive.infolist():
with archive.open(entry) as file:
img = Image.open(file)
print(img.size, img.mode, len(img.getdata()))
2
蟒蛇zipfile确实提供了一个ZipFile.open()
返回一个文件对象的zip中的文件,并Pillow的Image.open()
可以采取文件对象从打开。不幸的是,zipfile对象不提供Image.open()
需要的seek()
方法。
而是读取图像文件到RAM中的字符串(如果它不是太大),并使用StringIO以获取Image.open()
文件对象:
from zipfile import ZipFile
from PIL import Image
from StringIO import StringIO
archive = ZipFile("file.zip", 'r')
image_data = archive.read("image.png")
fh = StringIO(image_data)
img = Image.open(fh)
+1
这可能是最好使用['io.BytesIO'](https://docs.python.org/2/library/io.html#io.BytesIO)代替'StringIO',虽然两者似乎在这种情况下工作。 –
相关问题
- 1. 如何使用htaccess文件从文件夹中读取图像
- 2. 如何读取asp.net中的图像文件c#使用asp:fileupload?
- 3. 如何从Zip文件读取评论?
- 4. 如何读取zip文件中的htm文件?
- 5. 如何使用R读取zip压缩文件中打包文件的大小
- 6. 如何使用ZipEntry读取位于另一个zip文件中的一个zip文件中的数据?
- 7. 如何从xml文件读取图像?
- 8. 如何使用System.IO.Compression读取/写入ZIP文件?
- 9. 从zip文件中读取的C库
- 10. 如何从“.zip”文件中读取所有“.java”文件
- 11. 如何从App Store中的Google Storage中读取zip文件?
- 12. 如何使用Python读取图像文件?
- 13. 如何使用javascript/jquery读取硬编码图像文件
- 14. 如何用DotNetZip读取zip文件内的文件夹内的单个文件?
- 15. 从Zip文件中读取CSV
- 16. 读取.dat图像文件
- 17. 如何使用Lua从zip文件中提取文件?
- 18. 从MATLAB中的文件读取图像
- 19. 在zip文件中提取图像文件
- 20. 如何使用libpng读取png图像?
- 21. 如何从ZIP文件读取文件到Java内存?
- 22. 如何从zip文件读取文件属性..?
- 23. 如何创建多个图像文件的zip文件
- 24. 如何在C#中直接读取ZIP文件中的XML文件?
- 25. 使用Perl读取和比较文件夹中的图像
- 26. 如何阅读zip文件中的文本文件?
- 27. 阅读jar文件中的zip文件
- 28. 如何从我的Java应用程序读取图像文件?
- 29. 从C++文件中读取图像
- 30. 如何读取图像文件中的红宝石
谢谢,你知道自哪个版本的Pillow? –
@TorKlingberg:它在2.7上失败。它适用于2.9+。您可以尝试在github上查找特定问题。 – jfs
Image.open的当前[documentation](http://pillow.readthedocs.org/en/3.0.x/reference/Image.html#PIL.Image.open)仍然表示“文件对象必须实现read() ,seek()和tell()方法“ –