简短问题
使用Python Image Library时,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
正如您所看到的,我根本没有得到预期的结果,特别是对于blank.jpg文件:它应该是具有最低“复杂性”(最快的解压缩时间)的文件。因此,无论我读到的文章是完全错误的(我真的怀疑它,这是一篇严肃的科学文章),或者PIL没有做我认为它正在做的事情。也许在实际需要的时候实际转换为位图是懒惰的?但那么为什么open
延迟会有所不同?最小的jpg文件当然是空白图像,最大的是随机图像。这真的没有意义。
注1:当多次运行程序时,我得到大致相同的结果:结果很荒谬但稳定。 ; - )
注2:所有图像的大小相同(宽x高)。
修改
我只是尝试使用png图像而不是jpeg,现在一切都按预期运行。凉!我只是按照复杂性排序了大约50张图像,而且他们做看起来越来越“复杂”。我检查了这篇文章(顺便说一句,这是Jean-Paul Delahaye撰写的一篇文章,在'Pour la Science',2013年4月):作者实际上提到他只使用了无损压缩算法。所以我想答案是open
解压缩图像,但我的程序没有用,因为我应该使用仅使用无损算法压缩的图像(png,但不是jpeg)
答案 0 :(得分:0)