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の画面には、横スクロールせずにぴったり収まるレイアウト。

※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください