デジタルフォトフレームをソフトウェア的に実装する(1) -試しにPILで特定のディレクトリの画像を順番に表示-

電車の中でデジタルフォトフレームの広告を見たとき、フォトフレームで実現している画像切り替えはソフトウェア的にどう実装できるかな、とふと考えた。
そこで、デジタルフォトフレームのように表示する画像を、ある時間間隔で切り替えるデスクトップアプリケーションを作ってみることにする。まずは動作の概略を決めよう。

  • 動作仕様のようなもの
    • 特定のディレクトリの中の画像ファイルを順番に表示する。
    • 順番をランダムにしたりとかもできればいい。
    • 動作途中で、画像ファイルを追加しても読み込んでくれる。

必要最小限の動作だけを最初は想定して、コードを少しずつ書いてみる。最終的にはwxPythonで実装するつもり。まずは、試しにPILで画像表示するコードを書く。

#!/bin/env python
#このプログラムは一度実行すると永遠にフレームを開き続けるので注意!
  
 import os
 import time
 import Image
 
 n = -1
 while True:
     ph = os.path.join(os.getcwd(), 'picts')
     fls = os.listdir(ph)
  
     n += 1
     if n >= len(fls):
         n = 0
     fph = os.path.join(os.getcwd(), 'picts', fls[n])
  
     im = Image.open(fph)
     im.show()
     time.sleep(10)

ディレクトリpictsの中に画像ファイルを入れておく。それら画像を10秒おきに読み込んで表示する。原理的にはフォトフレームの動作もこれと同じことをやればいいはず。
PILでは、im.show()の部分で画像を表示するフレームを生成するが、作られたフレームの閉じ方がないようなので(調べた限りなし!)、このコードでは永遠にフレームを開き続けてしまう。止め忘れに注意。
実行するとこんな感じになる。

次に、PILではなくてwxPythonで絵を表示してみよう。