短缺问题使用Python图像库时,open()会立即解压缩图像文件吗?
当使用Python的图片库,并立即open()
解压缩图像文件?
详细
我想测量压缩图像(JPEG,PNG ...)的减压时间,因为我读它应该是一个形象的“复杂性”的好措施(一空白图像将被快速解压缩,纯粹随机的图像也会被解压缩,因为它根本不会被压缩,所以最“有趣”的图像应该具有最长的解压缩时间)。所以我写了下面的Python程序:
# complexity.py
from PIL import Image
from cStringIO import StringIO
import time
import sys
def mesure_complexity(image_path, iterations = 10000):
with open(image_path, "rb") as f:
data = f.read()
data_io = StringIO(data)
t1 = time.time()
for i in xrange(iterations):
data_io.seek(0)
Image.open(data_io, "r")
t2 = time.time()
return t2 - t1
def main():
for filepath in sys.argv[1:]:
print filepath, mesure_complexity(filepath)
if __name__ == '__main__':
main()
它可以像这样使用:
#python complexity.py blank.jpg blackandwhitelogo.jpg trees.jpg random.jpg
blank.jpg 1.66653203964
blackandwhitelogo.jpg 1.33399987221
trees.jpg 1.62251782417
random.jpg 0.967066049576
正如你所看到的,我不是在所有得到预期的效果,特别适用空白。 jpg文件:它应该是具有最低“复杂度”(最快解压缩时间)的文件。所以无论我读的文章是完全错误的(我真的怀疑它,这是一篇严肃的科学文章),或者PIL没有做我认为正在做的事情。实际上需要的时候,实际转换为位图可能是懒惰地完成的吗?但那么为什么open
延迟会有所不同?最小的jpg文件当然是空白图像,最大的是随机图像。这真的没有道理。注意1:当多次运行程序时,我得到的结果大致相同:结果很荒谬,但是稳定。 ;-)
注2:所有图像都有相同的尺寸(宽x高)。
编辑
我只是想用PNG图像,而不是JPEG,现在一切按预期运行。凉!我刚刚按复杂程度排序了大约50张图像,他们做看起来越来越“复杂”。我检查了这篇文章(顺便说一下,这是Jean-Paul Delahaye在2013年4月发表在“Pour la Science”上的一篇文章):作者实际上提到他只使用无损压缩算法。所以我想答案是open
确实解压缩图像,但我的程序不工作,因为我应该使用图像压缩与无损算法只(PNG,但不是JPEG格式)。