Developer's Blog

UserAction Extension でオレオレスクリプトのススメ (3)

Hatena Bookmarker がリリースされ、ブックマーク数が気になって仕事が手につきません。
謎の人です。こんにちわ。べ、べつにブクマおねだりしてるわけじゃないんだからね!
いろんな人の撮影した写真を見るのが好きです。日々、あちこちの写真ブログを徘徊しています。その時に自分で使っているオレオレスクリプトを、動作サンプルとして公開。


以下、導入手順。

  1. ActivePerl をインストール
  2. Perl モジュール「Image::ExifTool」「LWP::UserAgent」をインストール
    
    ppm install Image-ExifTool
    ppm install LWP-UserAgent
    
  3. resources/languages/default/english/ScriptEngine.ini
    に一行追記

    
    pl=PerlScript
    
  4. plugins/scripts に、nazo_showExif.pl を設置
  5. メニューエディタで「ブラウザ 画像」にわりあてて、右クリックで利用

マウスカーソル下の画像の情報 (Exif) を取得するサンプルです。
こういうのは Perl で作ったらわりと簡単にできるよ! というお話でした。
あわせてどうぞ モアイー
写真のステキさと機材のステキさは比例しません。
写真に限らず、本質を見極め、ステキな何かを生み出せるよう、日々精進したいものです。
Perl ネタもあと 1 回。次回は、UserAction Extension 関連の話題のしめくくりとして、Sleipnir.API をちょっとだけ気軽に使える方法を。。。考えておきます。
ありがとうございました。

【追記】
nazo_showExif.pl に間違いがあったので修正しました。下記 1 行追加


use Win32::OLE;

【追記:2007-12-07】

nazo_showExif.pl


use strict;
use warnings;
use Win32::OLE;
use Image::ExifTool;
use LWP::UserAgent;
my $MAX_SIZE = 1024 * 128; # 128KB
my @EXIF_KEY = qw(Make Model DateTimeOriginal ShutterSpeed Aperture FocalLength LensType ISO ExposureCompensation ImageSize);
# このあたりもちゃんとエラー処理した方がいいですね
my $s = new Win32::OLE('Sleipnir.API');
my $doc_id = $s->GetDocumentID($s->ActiveIndex);
my $img = $s->GetWindowObject($doc_id)->event->srcElement;
_alert('cannot found "img" tag.')
unless ( defined $img );
_alert('cannot found attribute "src".')
unless ( defined $img->src and $img->src =‾ m|^https?://| );
my $content = _get_content($img->src);
_alert('cannot get image.') if $content eq '';
my $info = _get_image_info($content);
_alert('cannot get image info.') if scalar(keys %$info) == 0;
_show_image_info($info);
undef $s;
undef $img;
exit;
sub _alert {
$s->MessageBox(@_);
exit;
}
sub _get_content {
my $url = shift;
my $content = '';
my $ua = LWP::UserAgent->new();
$ua->max_size($MAX_SIZE); # 128KB
my $res = $ua->get($url);
if ( $res->is_success ) {
$content = $res->content;
}
return $content;
}
sub _get_image_info {
my $content = shift;
my $info = {};
my $ret = {};
my $image = Image::ExifTool->new();
if ( $image->ExtractInfo(¥$content) ) {
$info = $image->GetInfo();
for my $key (@EXIF_KEY) {
if ( $info->{$key} ) {
(my $value = $info->{$key}) =‾ s|¥s+$||;
$ret->{$key} = $value;
}
}
}
return $ret;
}
# lightbox.js みたいにするとかっこいい
sub _show_image_info {
my $info = shift;
my @tags = ();
#    for my $key (keys %$info) {
for my $key (@EXIF_KEY) {
push @tags, $key.' : '.$info->{$key} if $info->{$key};
}
alert(join "¥n", @tags);
}
__END__

Copyright © 2019 Fenrir Inc. All rights reserved.