ライブカメラの静止画像管理スクリプト

ライブカメラの設定では静止画で撮影できるまでの方法を紹介しましたが、今度はそれを Web ページに表示してみます。単に「現在の様子」だけでなく、 PHP を使って数時間前の画像も表示できるようにしてしまいましょう!

現在の様子を表示するには

.webcamrc の archive で出力ファイルに時間などを含めずに固定にしておけば、現在の画像だけを表示するのは簡単です。しかし、屋外にカメラを設置した場合、場所にもよるのでしょうが、現在の画像だけを載せたのでは夜間真っ暗になってしまうこともあるでしょう。

過去の画像も表示するには

夜間でも昼間の様子を見ることができればおもしろいと思いませんか?当サイトでは出力ファイル名に日付と時間を含めて、それをもとに過去の画像も表示できるようにしました。言語は何でもよいと思うのですが、手軽に使える PHP で簡単に作ってみました。このスクリプトは webcam の設定で紹介した .webcamrc の通りに設定した場合のみ使用可能です。つまり、ファイル名のフォーマットを live_%Y%m%d%H%M%S.jpg 、画像の保存間隔を 10 秒にする必要があります。

10 秒間隔で撮影されているので、現在の時間をもとにそこから 1 秒ごとに数字を引き、ファイルが存在した時点で表示するというものです。 10 回 (10 秒分) 繰り返してファイルが存在しなかった場合、撮影されていないとみなしてメッセージを出力します。

<?php
function put_camera_image($gap) {
  $time = time() - $gap * 3600;
  for ($i = 0; $i < 11; $i++) {
    $time--;
    //↑これを末ではなく頭につけるのは "ちょうど撮影したばかりの画像"を表示するのを
    // 防ぐためです。画像の保存中に表示した場合、画像がとぎれることがあるからです。
    $date = date("YmdHis", $time);
    if (file_exists("画像までのパス/live_$date.jpg")) {
      print '<img src="画像までのパス/live_' . $date . '.jpg"';
      print ' width="320" height="240" alt="" /><br />';
      print date("Y-m-d H:i:s", $time) . "\n";
      break;
    } elseif ($i == 10) {
      print "<p>ファイルの読み込みに失敗しました。
             この時間は撮影できていないようです。</p>\n";
    }
  }
}

put_camera_image(0); //←現在の画像を表示するにはこのように呼び出します。
put_camera_image(5); //← 5 時間前画像を表示するにはこのように呼び出します。
?>

古い画像の削除

出力ファイルが固定ならそれにどんどん上書きされますが、 live_%Y%m%d%H%M%S.jpg のように日付や時刻を含めた場合、どんどんたまってきます。そこで、 1 日より前のファイルを自動で削除できるようにします。次のコマンドを定期的に cron で実行するだけです。

find 画像格納ディレクトリ -mmin +1440 -exec rm {} \;

find -mmin +1440 で 1140 分よりも前に更新されたファイルを割り出し、 -exec オプションにて rm を実行し、削除しています。 -mtime +0 でも同様です。詳細は man find 。


公開: 2004-01-10, 更新: 2004-08-22
Copyright © 2004 Kendomo.net.