尽可能快地复制 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()
应该可以完成所有工作。
我发现在 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()
应该可以完成所有工作。