[up] [download]

archive-photos の使い方


1. 目的

このスクリプトはデジカメで撮影した画像を自動的にハードディスクに保存する目的で 作成されました。インストールは手動で行わなければなりませんが、xyzzy を使い込んで いれば特に難しいところはありません。

簡単なプログラムですが、本人は便利よく使っています。皆様もお気に召したら使ってみてください。

なぜ、このようなソフトを xyzzy LISP で書いたかというと、xyzzy はファイル操作のコマンドが充実 しているので、ほかの言語で書くより簡単に書けるからです。

2. 使用方法

2.1. 準備

2.1.1 xyzzy のカスタマイズ

  1. まず、archive-photos.l を/xyzzy/site-lisp/ にコピーしてバイトコンパイルします。
    (byte-compile-file "./site-lisp/archive-photos.l")
  2. ".xyzzy" を以下のように編集します。
    1. import するシンボルに *photo-parent-dir*, *photo-removal-media*, *photo-viewer*, *photo-file-type*, 及び archive-photos を加えます。
      (import '(ed::archive-photos ed::*photo-parent-dir*

      ed::*photo-removal-media* ed::*photo-viewer* ed::*photo-file-type*))

    2. archive-photos が自動的にロードされるようにします。
      (autoload 'archive-photos "archive-photos" t)
    3. *photo-parent-dir*, *photo-removal-media*, *photo-parent-directory*, *photo-viewer*, 及び *photo-file-type* を自分の PC にあわせて変更します。
    まとめると、(もし、すでにインポートされているシンボルがなければ、)".xyzzy" に自分のシステム にあわせて以下のように記述して下さい。また、ソースコードを直接変更してもかまいません。

     (import '(ed::archive-photos ed::*photo-parent-dir* ed::*photo-removal-media*
               ed::*photo-viewer* ed::*photo-file-type*))
     (setq  *photo-parent-dir*        "C:/doc/"
            *photo-removal-media*     "G:/"
            *photo-viewer*            "C:/linar160/linar.exe"
            *photo-file-type*         '("*.bmp" "*.jpg" "*.jpeg" "*.tiff" "*.png" "*.gif" "*.avi"))
     (autoload 'archive-photos "archive-photos" t)
    
  3. 最後に、ダンプファイルを削除して、xyzzy を立ち上げます。

2.1.2 バッチファイルとショートカットの作成

xyzzy の実行ファイルが "C:\xyzzy" にあるとすると、

C:\xyzzy\xyzzycli.exe -f archive-photos
と記述したバッチファイルを作成し、それを(パスの通っている)ディレクトリに保存します。 ("C:\xyzzy" の部分は各自のシステムに合わせて適宜変えて下さい。) ディスクトップ上にそのバッチファイルのショートカットを作り、実行時の大きさが最小 になるように設定します。(アイコンを右クリック->プロパティ->実行時の大きさ-> 最小化) また、写真の保存らしいアイコンに変更します。 (アイコンを右クリック->プロパティ->アイコンの変更) 終了すると右図のような状態になります。

2.2 実行

画像が入っているメディアをドライバーに挿入して、"写真保存アイコン" をダブルクリックします。 すると、メディアに保存されている画像ファイルが自動的にハードディスクに移動します。 進行状況は xyzzy のメッセージウィンドウ(左下の小さな部分)に表示されます。

準備は多少めんどくさいのですが、実行はとっても簡単です。

3. 仕様

3.1. 概説

ハードディスクにある画像を上書きしないようにするため、 また、確実にコピーされたことを確認するために以下の動作をします。
  1. リムーバルメディアのディレクトリのなかから、 画像データのあるディレクトリを選び出し、そのリストを作ります (以下 dirs-from とします)
  2. *photo-parent-dir* で定義されたディレクトリの下に実行時の日付の年ー月の名前のディレクトリを探し、 なければ作成します。 例えば、2004 年 8 月 ?? 日に実行された場合、"*photo-parent-dir*\04-08\" というディレクトリを探すか作成するかします。(以下 dir-root とします)
  3. dir-root の下に photoNN (N= 0--9) の名前のディレクトリがあるか探し、 NN の最大値 (NN-max) を求めます。
  4. リスト dirs-from の中のディレクトリ (以下 d-from) それぞれについて、以下のことを行います。
    1. "photo(1 + NN-max)" (以下 d-to) という名前のディレクトリを作成し、 d-from の中の画像ファイルを d-to にコピーします。
    2. d-from と d-to にあるファイルを比較して全て等しければ d-from にあるファイルを削除します。
  5. 全ての d-from について 4. が修了したら、dirs-from の最初のディレクトリ を引数としてイメージビュアーを立ち上げます。

3.2. 例

以下 *photo-parent-dir* = "d:/doc/", 保存日 2004 年 8 月 ?? 日とします。 すると、dir-root は "d:/doc/04-08/" となります。 リムーバルメディアのなかの画像ファイルのあるディレクトリを /imag-1, /imag-2, /imag-3 とし、 "d:/doc/04-08/" の中にはすでに /photo1, /photo2, /photo3, /photo4, /photo5 のディレクトリが存在するとします。 このとき、スクリプトの動作は、
  1. image-1 に対して /photo6 を作成し、コピー、チェック、メディアのファイルの削除を行います。
  2. image-2 に対しては、/photo7 を作成し、以下同様の操作を行います。
  3. image-3 には /photo8 を作成し、以下同様。
  4. 最後に /photo6 を引数としてビュウアーを立ち上げます。

4. まとめ

以上に述べたように設定は少し込み入っていますが、 特に難しいところはありません。一度、設定してしまえば便利この上なく使えます。 私はビュウアーには Linar を使っていますが、 高機能でかつ使いやすいフリーのビュウアーです。もし、お気に入りのビュアーがディレクトリを引数 にとれなければ *photo-viewer* は nil にセットして下さい。(この場合ファイルの移動のみを行い、 ビュアーは立ち上がりません

もし、お気に入ったら使ってみてください。 不具合、要望などはお気軽に紫藤にご連絡ください。