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