【发布时间】:2013-10-22 16:54:54
【问题描述】:
如何在不先解压缩的情况下打开 zip 存档中的文件?
我正在使用 pygame。为了节省磁盘空间,我将所有图像都压缩了。
是否可以直接从 zip 文件加载给定的图像?
例如:
pygame.image.load('zipFile/img_01')
【问题讨论】:
-
什么样的图片文件? GIF、JPEG 和 PNG 已被压缩。
如何在不先解压缩的情况下打开 zip 存档中的文件?
我正在使用 pygame。为了节省磁盘空间,我将所有图像都压缩了。
是否可以直接从 zip 文件加载给定的图像?
例如:
pygame.image.load('zipFile/img_01')
【问题讨论】:
理论上,是的,这只是插入东西的问题。Zipfile 可以为您在 zip 存档中的文件提供一个类似文件的对象,而 image.load 将接受一个类似文件的对象。所以这样的事情应该可以工作:
import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgfile = archive.open('img_01.png')
try:
image = pygame.image.load(imgfile, 'img_01.png')
finally:
imgfile.close()
【讨论】:
Vincent Povirk 的回答不会完全奏效;
import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgfile = archive.open('img_01.png')
...
你必须改变它:
import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgdata = archive.read('img_01.png')
...
有关详细信息,请阅读ZipFile 文档here。
【讨论】:
import io, pygame, zipfile
archive = zipfile.ZipFile('images.zip', 'r')
# read bytes from archive
img_data = archive.read('img_01.png')
# create a pygame-compatible file-like object from the bytes
bytes_io = io.BytesIO(img_data)
img = pygame.image.load(bytes_io)
我刚刚试图自己解决这个问题,并认为这对将来遇到这个问题的任何人都有用。
【讨论】: