印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
PerlWindows Picasa でつけた画像のコメントを一覧表示する

Picasa で画像につけたコメントを Perl スクリプトで表示する。Image::IPTCInfo モジュールを使う。

■ ■ ■

Picasa を使うと,画像にコメントを付けることができる。JPEG 画像であれば,コメントはその画像の IPCT 情報に保存される ( Picasa ヘルプ センター | コメントとは何ですか。)。

IrfanView による IPTC 情報表示
IrfanView による IPTC 情報表示


IPTC 情報は,他の画像ビューアでも見ることができる。IrfanView (日本語版オリジナル) であれば,「Image (画像)」→「Information (画像の情報)」→「IPTC info (IPTC 情報)」→「Caption」で表示と書き込みが可能。IrfanView では,「Image」→「Information」→「Comment」でもコメントが書き込めるようになっているが,Picasa はそこを読まない。

さて,Picasa でつけたコメントを一覧表示したいことがある。Cygwin であれば Perl が使えるので,スクリプトを書けば表示できる。

環境は,Windows XP Professional Edition, Cygwin 1.5.25, Perl 5.8.8 である。

画像の IPTC 情報は,Image::IPTCInfo モジュールで読み取りや書き込みができる。最新版は Image::IPTCInfo 1.95 である (Image::IPTCInfo - Perl extension for extracting IPTC image meta-data)。コメントは日本語でも問題なく表示される。Image::IPTCInfo では,何も変なことをしていない。Shift JIS でつけたコメントは,そのまま Shift JIS で表示される。Cygwin も Linux のように cpan コマンドが使えるのでインストールしておく。

$ cpan -i Image::IPTCInfo

Perl スクリプトは次の通り。例えば listcaption.pl などとする。

#!/usr/bin/perl

use strict;
use Image::IPTCInfo;

foreach my $file (@ARGV) {
  my $info = new Image::IPTCInfo($file);
  my $caption;

  eval { $caption = $info->Attribute('caption/abstract') };
  print "$file $caption\n";
}

コメント情報は,Attribute('caption/abstract') で取得できる。全体を eval で包んでいることに注意。これをやらずに,単に

$caption = $info->Attribute('caption/abstract');

とした場合,コメントがついている画像なら問題ないが,コメントがついていない画像に当たると,次のメッセージが表示されて死ぬ。コメントがついていない場合,new で失敗するかと思い eval をしかけてみたが,分岐できなかった。コメントがあってもなくても,new は成功する。

Can't call method "Attribute" on an undefined value at ./listcaption.pl line 10.

ディレクトリ以下すべての画像について調べたい場合は,find と併用する。ファイル名やディレクトリ名に空白が含まれている場合を想定して,find には -print0,xargs に -0 スイッチをつけてやるとよい (Manpage of XARGS)。

$ find . -name "*.jpg" -print0 | xargs -0 listcaption.pl

そういえば,最近の find は -print がデフォルトになっている。昔は -print をつけないと,検索だけして何も表示しないで終わっていた。

ところで,Picasa は,JPEG 以外の画像のときは,コメントをどこに保存しているのだろうか? (調べていない)

Posted by n at 2008-03-06 23:44 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?