尽可能快地复制PIL图像

时间:2015-08-04 01:39:31

标签: python performance time python-imaging-library

我发现在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的设置中并没有太大改变。

1 个答案:

答案 0 :(得分:3)

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

要做copy()但是,它几乎肯定必须阅读整个内容并进行处理。

编辑:

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

编辑2:

另一眼文档显示load()之后的open()应该完成所有工作。