尽可能快地复制 PIL 图像

Copying a PIL image as quickly as I can open it

我发现在 PIL 中,我可以比复制图像更快地从磁盘加载图像。有没有比调用 image.copy() 更快的复制图像的方法? (这怎么可能?)

示例代码:

import os, PIL.Image, timeit

test_filepath = os.path.expanduser("~/Test images/C.jpg")
load_image_cmd = "PIL.Image.open('{}')".format(test_filepath)

print((PIL.Image.open(test_filepath)).__class__)
print(min(timeit.repeat(load_image_cmd, setup='import PIL.Image', number=10000)))
print(min(timeit.repeat("img.copy()", setup='import PIL.Image; img = {}'.format(load_image_cmd), number=10000)))

生产:

PIL.JpegImagePlugin.JpegImageFile
0.916192054749
1.85366988182

gc.enable 添加到 timeit 的设置中并没有太大改变。

根据 PIL 文档,open() 是一个惰性操作,这意味着它还没有真正完成使用图像的所有工作。

然而,要执行 copy(),它几乎肯定必须读取整个内容并进行处理。

编辑:

要测试这是否属实,您应该访问每个图像中的一个像素作为您的 timeit 的一部分。

编辑 2:

再看一眼文档表明 open() 之后的 load() 应该可以完成所有工作。