2013-05-29 20 views
0

短缺问题使用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格式)。

回答

0

很高兴你把它整理出来。无论如何,open()方法确实是一个惰性操作 - 如documentation中所述,确保图像将被加载,请使用pixels = image.load()