jheadコマンドを使った簡易ギャラリー

jhead はデジカメなどで撮影した画像などに含まれる EXIF 情報を表示してくれるコマンド。debian 系 OS でのインストールは以下のようにする。数百キロバイト程度なのですぐ終わる。

$ sudo aptitude install jhead

使い方はとても簡単。下記のようにファイルを指定するだけだ。

$ jhead DSC01977.JPG
File name    : DSC01977.JPG
File size    : 4653056 bytes
File date    : 2010:10:27 10:58:31
Camera make  : SONY
Camera model : DSLR-A330
Date/Time    : 2010:10:16 17:25:25
Resolution   : 3872 x 2592
Flash used   : No
Focal length : 18.0mm  (35mm equivalent: 27mm)
Exposure time: 0.0080 s  (1/125)
Aperture     : f/10.0
ISO equiv.   : 100
Whitebalance : Auto
Metering Mode: matrix
Exposure     : program (auto)

はてなフォトライフがなかなか残念な具合なので、ImageMagick の convert コマンドを使ってサムネイルでも吐かせ、EXIF 情報付きのギャラリーHTMLを吐かせようかと思った。しかし、便利なコトにサムネイル生成機能が jhead にも含まれていた。ものぐさなので、そのままこちらを使う。

# thumb ディレクトリに同名でサムネイルを吐く。
$ jhead -st "./thumb/&i" DSC01977.JPG

これらを踏まえ、以下のようなスクリプトを書いた。

#!/usr/bin/perl
$srcdir = "./src";
$thumbdir = "./thumb";
print "Content-type:text/html\n\n";
print '<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">';
print <<EOT;
<table
    align="center"
    cellpadding="0"
    cellspacing="5"
    border="0"
    style="font-size:9pt;"
>
 <tr>
EOT
$i = 0;
foreach $file (`ls $srcdir`){
chomp($file);
@d = `jhead $srcdir/$file`;
$d[9] =~ s/time:/time :/gi;
foreach $line (@d){
( $key, $val ) = split(/ +: +/, $line);
$dt{$key} = $val;
chomp($dt{$key});
}
$dt{"Focal length"} =~ s/ equivalent: (.+mm)/判換算で$1/gi;
$dt{"Exposure time"} =~ s/.*\((.*)\)/$1/gi;
unless ( -e "$thumbdir/$file" ){
`jhead -st "$thumbdir/$file" $srcdir/$file`;
}
print " </tr>\n <tr>\n" unless ($i%2);
print <<EOT;
  <td>
   <a href="$srcdir/$file">
    <img src="$thumbdir/$file" border="0" height="100%">
   </a>
  </td>
  <td valign="center" style="border-bottom:1px;">
   ファイル:$file ($dt{"File size"})<br>
   画素数:$dt{Resolution}<br>
   撮影日:$dt{"Date/Time"}<br>
   カメラ:$dt{"Camera make"} $dt{"Camera model"}<br>
   焦点距離:$dt{"Focal length"}<br>
   シャッター速度:$dt{"Exposure time"} / 絞り値:$dt{"Aperture"}<br>
   ISO 感度:$dt{"ISO equiv."} / ホワイトバランス:$dt{"Whitebalance"}<br>
  </td>
EOT
$i++;
}
print " </tr>\n</table>\n";
exit;

$srcdir に画像ファイルを突っこんでおけば、サムネイルを生成して、当記事の小画像のようなギャラリーHTMLを吐く。セキュリティどころかページング機能、縦方向画像の回転など、ギャラリーに必要最低限のものすら付いてないけど気にしない。

ちなみにIS01の画面には、横スクロールせずにぴったり収まるレイアウト。

投稿者:

dyama

システムエンジニアです。佐世保に住んでいます。

コメントを残す

メールアドレスが公開されることはありません。