如何使用PIL / Pillow读取zip文件中的图像

时间:2015-10-16 08:57:51

标签: python python-imaging-library zipfile pillow

我可以使用PIL / Pillow在zip中打开图像而不先将其提取到磁盘吗?

2 个答案:

答案 0 :(得分:8)

最近的Pillow版本不需要.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()))

答案 1 :(得分:2)

Pythons zipfile确实提供了一个ZipFile.open(),它为zip中的文件返回一个文件对象,PillowImage.open()可以从中打开文件对象。遗憾的是,zipfile对象不提供seek()所需的Image.open()方法。

而是将图像文件读入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)