2013-05-29 32 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()