短い質問
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 ファイルはもちろん空白の画像で、最大の jpg ファイルはランダム画像です。これは本当に意味がありません。
注 1: プログラムを複数回実行すると、ほぼ同じ結果が得られます。結果はばかげていますが、安定しています。;-)
注 2: すべての画像は同じサイズ (幅 x 高さ) です。
編集
jpeg の代わりに png 画像を試してみたところ、すべてが期待どおりに動作するようになりました。涼しい!約 50 枚の画像を複雑さで並べ替えただけですが、ますます「複雑」に見えます。私は記事をチェックしました (ちなみに、これは 2013 年 4 月の「Pour la Science」の Jean-Paul Delahaye による記事です): 著者は、ロスレス圧縮アルゴリズムのみを使用したと実際に述べています。したがって、答えは画像を解凍することだと思いますが、損失のopen
ないアルゴリズムのみで圧縮された画像を使用する必要があったため、プログラムは機能しませんでした(png、jpegではありません)。