dcdiary - Web 写真日記用スクリプト -

細川 達己
Tatsumi Hosokawa
<hosokawa@FromTo.Cc>

最新版の入手

この dcdiary の最新版は、以下の場所から入手可能です。
http://FromTo.Cc/hosokawa/software/dcdiary/latest.html

dcdiary とは?

dcdiary は、デジカメで撮った写真を日毎にまとめ、あとはコメントを入れる だけの HTML 形式にしてくれるスクリプトです。 また、dcdiary 0.2 からは、 サンヨーの DSC-X110 などの、 音声、動画機能にも対応しました (この機能のドキュメントは、 まだ不十分です)。 0.3 からは DCF に対応しています。

dcdiary による日記サンプル

このdcdiary によるデジカメ日記

動作環境

このプログラムの動作環境は、UNIX システムです。筆者は FreeBSD 5.0-CURRENT で使用しています。デジカメは Sanyo DSC-SX560 を使用していますが、 おそらく DCF 対応の他のデジカメにも使用することができるでしょう。

デジカメは以下の条件を満たす必要があります。

  1. コンパクトフラッシュ、あるいはスマートメディアに記録し、それが UNIX から読み取り可能なフォーマット (現状では FAT16 であることがほとん どでしょう) で記録されている。あるいは、デジカメから Windows などで、 UNIX から読み取り可能なディスク領域 (これも FAT16 あるいは FAT32 であ ることがほとんどでしょう) に記録されている。
  2. メディアへの格納法は DCF フォーマットに準拠している。
  3. 撮影時の時刻が、ファイルのタイムスタンプとして記録される。

これ以外のデジカメの場合は、プログラムの書き換えが必要となるでしょう。 もしパッチを作られた方は、ぜひ作者 (hosokawa@FromTo.Cc) の 方まで送ってください。

dcdiary の機能

このプログラムには以下の機能があります。

  1. 写真の取得 (get 機能)
  2. 写真の変換 (conv 機能)
  3. 写真の補正 (adj 機能)
  4. 写真の消去 (clean 機能)
  5. ページの複製 (dup 機能)

写真の取得 (get 機能)

デジカメで撮ったデータの入ったコンパクトフラッシュ、あるいはスマートメ ディアからハードディスクにコピーをする。この際、ファイル名を、デジカメ のつけたファイル名から、撮影時刻を含んだ独自のファイル名に変換します。

a1106213424.jpg というファイル名の場合
a1998 年を起点として、a, b, c, d, ... と、年を意味する
110611 月 6 日
21342421 時 34 分 24 秒

なお、このファイル名のポリシには 1 秒の精度しかありません。もしかした ら、非常に高速撮影が可能なデジカメで撮影した場合、1 秒に複数枚の撮影が できてしまうかもしれません。そのような場合は、上記ファイル名の basename (.jpg を省いた部分) の末尾に、元のファイル名を ASCII コードで 昇順ソートした順番に -?? (?? は 2 桁の数字) がつきます。これで、1 秒に 100 枚までの高速撮影にも対応できます。

この機能を利用するには、(正しく設定されていさえすれば)

% dcdiary get

と実行するだけです。もし、フラッシュメモリを自分のユーザでマウントでき ない場合は、sudo を使ってマウントします。sudo の設定がきちんとされてい れば、パスワードを訊いてきますので、ここで自分のパスワードを打つと自動 的にフラッシュメモリがマウントされ、get の処理がなされたあとでアンマウ ントされます。

なお、タイムゾーンをディレクトリ内の TZ というファイルで設定できます。 カメラの時刻は自分の本拠地のローカルタイムに固定した状態にしてください。 TZ ファイルに「+08」や「-10」のように書き込むことで、 自動的に日付の判別にタイムゾーンを考慮してくれます。

写真の変更 (conv 機能)

get 機能でとってきたファイルを、HTML ファイルと画像ファイル群、サムネー ル画像ファイル群に変換します。この画質や画像の大きさは、設定ファイルで 変更できます。その際、ターゲットのディレクトリは以下のフォーマットを満 たしている必要があります。

ディレクトリ名 "yyyymmdd-title" の持つ意味
yyyy年 (必ず数字 4 桁)
mm月 (必ず数字 2 桁)
dd日 (必ず数字 2 桁)
titleタイトル (何桁でも良い)

なお、デフォルトの設定では、title の末尾についた数字は、HTML 作成時に は無視されます。これは、一日が複数ページに跨る際、dcdiary.conf での $titles パラメータによる自動的 タイトル変換機能を実用的にするためです。この機能は、dcdiary.conf の $strip_digits パラメータで抑制で きます。

たとえば、1998 年 11 月 6 日 の日記で home がタイトルなら、

% mkdir 19981106-home
% dcdiary conv 19981106-home

とすると、この変換が行われます。引数には処理対象のディレクトリを並べる ことができるので、

% dcdiary conv 1998110[6-9]-*

のように、複数の日の内容を一挙に変換することができます。

写真の補正 (adj 機能)

ガンマ補正による露出の補正や横長から縦長への画像の向きの変更などを、バッ チ的に一気に行うことができます。この処理の指定は、画像ファイルを参照し ている行の先頭に、特定の記号を書き込むことで行います。

conv 機能で生成された HTML ファイル中では、画像ファイルの参照は、以下 のような行で構成されています。

<A HREF="a1106225830m.jpg" CLASS=THU><IMG SRC="a1105225830t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1106225840m.jpg" CLASS=THU><IMG SRC="a1105225840t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1106225914m.jpg" CLASS=THU><IMG SRC="a1105225914t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

ここでは、3 枚の画像への参照が含まれています。ここで、最初の写真を反時 計回り (左回り) に 90 度回転し、縦長の画像に、次の写真をもう少し明るく 露出補正、最後の写真は以上二つの処理をどちらも加える場合、上の部分の行 の先頭に次のように書き加えます。

l<A HREF="a1106225830m.jpg" CLASS=THU><IMG SRC="a1105225830t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
b<A HREF="a1106225840m.jpg" CLASS=THU><IMG SRC="a1105225840t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
lb<A HREF="a1106225914m.jpg" CLASS=THU><IMG SRC="a1105225914t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

これらの記号は、当然、画像の左にすぐ表示されるので、ブラウザから再読み 込みすれば、間違った写真に指定を行っていないかどうかを、一目で確認でき ます。

こうして準備が済んだら、

% dcdiary adj 19981106-home

とすると、先ほどの画像操作が一気に加えられます。なお、デジカメから get したまま、縮小も何もしていないファイル群が、まだ dcdiary.conf$dcimagesdirで指定 したディレクトリ (デフォルトではホームディレクトリの下の images/original/) に残っている場合は、画質優先の 観点から、変換済みのファイルではなく、変換前のファイルを使用してもう一 度縮小画像を作り直します。

この <A HREF>...</A> の先頭につける文字は、正 規表現で表わせば、

(l|r|)(bb|b|d|dd|)

の文法を満たす必要があります。これらはそれぞれ以下の機能に対応します。

bb, b, d, dd でどれほどガンマ補正を行うかというパラメータは、dcdiary.conf の $bbgamma, $bgamma, $dgamma, $ddgamma で調整可能です。

なお、変換を行うと、HTML ファイルは、

<A HREF="a1106225830m.jpg" CLASS=THU><IMG SRC="a1105225830t.jpg" \
  WIDTH=60 HEIGHT=80 ALT="60x80 thumbnail image"></A>
<A HREF="a1106225840m.jpg" CLASS=THU><IMG SRC="a1105225840t.jpg" \
  WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1106225914m.jpg" CLASS=THU><IMG SRC="a1105225914t.jpg" \
  WIDTH=60 HEIGHT=80 ALT="60x80 thumbnail image"></A>

と、先頭の記号は自動的に除去されます。また、IMG 中の WIDTH, HEIGHT は、 自動的に置き換えられます。

Netscape の一部のバージョンなどでは、ここで file: で参照を行っている時 点で再読み込みを行っても、うまくサムネールのイメージを更新して表示して くれない場合があるようです。変換はうまくできているはずですので、index.html を reload したあと、画像をクリックし て大きい方の画像を表示させ、それを reload して、実際の効果を確認してく ださい。

写真の消去 (clean 機能)

conv 機能で変換を行うと、ターゲットのディレクトリに index.html という HTML ファイルが出来るので、こ れを適当なエディタで編集します。その際、画像への参照 (<A HREF="..."><IMG SRC="..."></A>) を削除すると、そ のページからは参照されていない画像ファイルになってしまうので、ディスク 容量の無駄です。clean 機能は、このような参照されていない画像ファイルを 探し出して消去します。

先ほどの日の日記を掃除したい場合は、

% dcdiary clean 19981106-home

とすることで、参照されていない画像ファイルは消去されます。

ページの複製 (dup 機能)

conv 機能の変換は、それなりに多くの時間がかかります。そこで、すでにで きたディレクトリを複製する機能がついています。たとえば、ディレクトリ 19981201-mita の内容を 19981201-mita2 に複製するには、以下のように実行 します。

% dcdiary dup 19981201-mita 19981201-mita2

なお、この複製において、各画像ファイルは、コピーではなくハードリンクで 複製されます。これによって、ディスク容量を節約することが可能で、かつシ ンボリックリンクのように clean 機能との相性に問題が生じたりすることも ありません。

インストール

FreeBSD におけるインストールは、このパッケージを展開し、できたディレク トリに移動して、

% make install

するだけです。なお、このプログラムの動作には以下のプログラムが必要です。

dcdiary の動作に必要なプログラム
プログラムの名称FreeBSD での ports 名
netpbmgraphics/netpbm
djpeg, cjpeggraphics/jpeg
sudosecurity/sudo
Perl5lang/perl5 (注)

(注) FreeBSD 3.0 では Perl5 はシステム組み込みである。ま た、perl のパスは /usr/local/bin/perl であ る必要がある (今後のバージョンでは Perl5 のパスを簡単に設定できるよう にする予定である)。

関連ファイル

/usr/local/lib/dcdiary には、以下のファイ ルがインストールされます。

/usr/local/lib/dcdiary にインストールされるファイル
ファイル名内容
dcdiary.conf-sample設定ファイル
diary.css-sampleスタイルシートサンプル
fstab-sampleフラッシュメモリの /etc/fstab の例 (FreeBSD)

dcdiary.conf は、それぞれの環境に応じて書 き換えてください。またスタイルシートも、自分の趣味に応じて書き換えてく ださい。

また、/usr/local/doc/dcdiary にも、関連ド キュメントがインストールされます。

活用のヒント

このツールは、いわゆる WYSIWYG タイプの HTML エディタでの編集は全くサ ポートしていません。このタイプの HTML エディタで、更新が煩雑に行われる ページに手軽に対応できるような製品は見たことがありません。第一、ツール バーにフォントの種類だの大きさだののメニューが存在するというだけでも、 すでにトホホです (ツールバーは、「よく使う」ボタンを置くものですよね?)。 そもそも HTML とはそういうものではありません。

また、ページを「作る」ことはある程度考えられていても、「メンテナンス」 をきちんと考えた製品はなかなかないようです。趣味のページを数ページ作る だけであれば、あるいはお手軽かもしれませんが、毎日更新しようなどと思っ ている人にお勧めできるような類いのものではありません。HTML は、ちゃん と :-) テキストエディタで編集しましょう。

私は、このツールを、以下のディレクトリ構成で使用しています。

作者自身の使用しているディレクトリ構成
日記トップページ
index.html
diary.css
サブディレクトリ
1998/
さらにサブディレクトリ
19981101-home/
19981102-mita/

...........

年ごとにディレクトリを別ける方が、ディレクトリサイズがどんどん増殖して いくことを防ぐことが出来るので、効果的でしょう。

コメントの入れ方ですが、

<A HREF="a1103182346m.jpg"><IMG SRC="a1103182346t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
</P>
<P>

ケースに取りつけると、なかなかいい状態に。

</P>
<P>
<A HREF="a1103182800m.jpg"><IMG SRC="a1103182800t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1103183012m.jpg"><IMG SRC="a1103183012t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

のように書いてください。作者は次のような手順でやっています。

まずはコメントを挟みたい位置に、

<A HREF="a1103182346m.jpg"><IMG SRC="a1103182346t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
</P>
<P>
</P>
<P>
<A HREF="a1103182800m.jpg"><IMG SRC="a1103182800t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1103183012m.jpg"><IMG SRC="a1103183012t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

のように、

</P>
<P>

を二つ挟みます。この組合わせは、できたての index.html の上部にあります。

<P>

ここからコメント。

</P>         ←この行から 2 行分のこと!!
<P>
<A HREF="a1107125624m.jpg" CLASS=SAT><IMG SRC="a1107125624t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

ですから、この最初の行からカット&ペーストで 2 回ペーストすれば OK なわけです。また、この程度なら手で書いても大した手間ではないでしょう。 エディタのマクロを定義して出す方法もあります。

そして、この真ん中に、

<A HREF="a1103182346m.jpg"><IMG SRC="a1103182346t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
</P>
<P>

ケースに取りつけると、なかなかいい状態に。

</P>
<P>
<A HREF="a1103182800m.jpg"><IMG SRC="a1103182800t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>
<A HREF="a1103183012m.jpg"><IMG SRC="a1103183012t.jpg" \
WIDTH=80 HEIGHT=60 ALT="80x60 thumbnail image"></A>

のように、コメントを挟んでいけば、コメントが HTML 中に表示されます。 (しかも、こうすればちゃんと <P>〜</P> の組は最後まで保たれ ます。念のために言っておきますが、<P> は「改行 の印」ではありません。そうだったのははるか古代で、今は <P>〜</P> が、段落を表わすエレメントです。きちんと段落を <P>〜</P> で囲みましょう)。

スタイルシートのサンプルが /usr/local/etc/diary.css-sample にインストールさ れます。これをベースに改造すると便利でしょう。できればそのまま使わないでね :-)。


ほそかわ たつみ
<hosokawa@FromTo.Cc>

$Id: index.html,v 1.1.1.1 2006/12/14 02:07:05 hosokawa Exp $