MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.6)
MT4.x用のJPEGファイルのEXIF情報を取得するプラグインを発作的に書き換えた。
AssetExifプラグインに刺激を受けた部分も多々ある。
コード
package MT::Plugin::GetEXIF;
use strict;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.6';
use Image::ExifTool;
use MT::Template::Context;
use lib $ENV{MT_HOME} ? "$ENV{MT_HOME}/plugins/GetEXIF/extlib" : '/plugins/GetEXIF/extlib';
my $plugin = new MT::Plugin::GetEXIF({
id => 'GetEXIF',
key => 'get_exif',
name => '<MT_TRANS phrase="PluginName">',
version => $VERSION,
description => '<MT_TRANS phrase="Description">',
author_name => '<MT_TRANS phrase="AuthorName">',
author_link => 'http://www.mtde.info/',
l10n_class => 'GetEXIF::L10N',
});
MT->add_plugin($plugin);
sub init_registry
{
my $plugin = shift;
$plugin->registry({
tags => {
function => {
'GetEXIF' => \&_hdlr_getexif,
'GetEXIFAsset' => \&_hdlr_getexif_asset,
'GetEXIFGpsPosition' => \&_hdlr_gpsposition,
},
},
});
}
# 画像の任意パスを指定して好きな情報を取得するツールモード
sub _hdlr_getexif {
my ($ctx, $args) = @_;
my $filepath = $args->{filepath};
my $exiftag = $args->{exiftag};
my $option = $args->{option};
my $exif_tool = new Image::ExifTool;
my $exif_info = $exif_tool->ImageInfo($filepath);
my ($key,$out);
#キー名を指定してひとつのデータを取得
if ('' ne $exiftag){
for $key (sort keys %$exif_info) {
if ($key eq $exiftag) {
if ('pair' eq $option){
$out = $key.":".$$exif_info{$key};
} elsif (('' eq $option) || ('value' eq $option)) {
$out = $$exif_info{$key};
} elsif ('key' eq $option) {
$out = $key;
}
return $out;
}
}
}else{
#キー名を省略して全データを取得
if ('pair' eq $option){
foreach $key (sort keys %$exif_info) {$out = $out . $key.":".$$exif_info{$key}."<br />\n";}
}elsif (('' eq $option) || ('value' eq $option)) {
foreach $key (sort keys %$exif_info) {$out = join("<br />" ,values(%$exif_info));}
}elsif ('key' eq $option) {
foreach $key (sort keys %$exif_info) {$out =join( "<br />" , keys(%$exif_info));}
}
return $out;
}
}
# Asset画像の情報を取得するモード
sub _hdlr_getexif_asset {
my ($ctx, $args) = @_;
my $asset = $ctx->stash('asset');
my $filepath = $asset->file_path;
my $exiftag = $args->{exiftag};
my $option = $args->{option};
my $exif_tool = new Image::ExifTool;
my $exif_info = $exif_tool->ImageInfo($filepath);
my ($key,$out);
my @refarray= split(/,/, $exiftag);
my $exif_tool = new Image::ExifTool;
my $exif_info = $exif_tool->ImageInfo($filepath,@refarray);
#表(tableあるいはdl)が指定されているときはデータ+表タグ整形して返す
if ('dl' eq $option){ #table
$out="<dl>";
foreach (sort keys %$exif_info){
$out = $out . "<dt>" . $_ ."</dt><dd>". $$exif_info{$_}."</dd>\n";
}
$out= $out ."</dl>";
return $out;
}
elsif ('table' eq $option){ #dlリスト
$out="<table border=\"1\">";
foreach (sort keys %$exif_info){
$out = $out . "<tr><td>" . $_ ."</td><td>". $$exif_info{$_}."</td></tr>\n";
}
$out= $out ."</table>";
return $out;
}
#表が指定されていないときは単にデータをカンマ(,)で連結して返す
foreach (sort keys %$exif_info){
$out = $out . $_ .",". $$exif_info{$_}."\n";
}
return $out;
}
# 画像の任意パスを指定してGPS情報をGoogleMapリンクつきで取得するモード
# 単に緯度経度情報だけ欲しいならpositionオプションを渡す
sub _hdlr_gpsposition {
my ($ctx, $args) = @_;
my $filepath = $args->{filepath};
my $option = $args->{option};
my $out;
#データ取得
my $exif_tool = new Image::ExifTool;
my $exif_info = $exif_tool->ImageInfo($filepath);
my $gps = $exif_info->{GPSPosition};
if(defined $gps){
$gps =~ s/^(\d*) deg (\d*)\' ([0-9\.]*)\" N, (\d*) deg (\d*)\' ([0-9\.]*)\" E$/$1 $2 $3 $4 $5 $6/;
my @val = split( / /, $gps );
my $lat = $val[0] + $val[1] / 60.0 + $val[2] / 3600.0;
my $long = $val[3] + $val[4] / 60.0 + $val[5] / 3600.0;
if ('' eq $option or 'googlemap' eq $option){
#Google地図URL、z=16の部分はズーム
$out = "<a href=\"http://maps.google.co.jp/maps?q=". $lat. "," . $long . "&z=16\">Google Map</a>\n";
}
elsif ('position' eq $option){
#単なるデータ
$out = $lat.",".$long;
}
return $out;
}
}
1;
いろいろせつめい
WEBデザインBLOGさんのほうで配布されている、AssetExifプラグインの中で、ExifToolをサーバにインストールしなくても実行できる手法が採用されていたので、こちらもそれを採用(パクッタともいう)してみた。これはいい。(注:yuさんにまだ確認とってないので詳細は伏せるし配布もしない)
AssetExifプラグインは洗練された機能を持っており(詳しくは使っていないが、設定をプラグイン設定ページから自在に操れる)、GPS機能を持っていないので、こちらは差別化した機能を...と思い、大きく分けて以下のような3つの仕様を実装。
- 画像の任意パスを渡してExif情報を取得する自由度が非常に高いツールモードの実装
- アイテム画像にオプションを渡してさまざまな情報を得るアイテム機能の実装。楽に表組みもできる。
- GPS情報より緯度・経度を抽出して、その位置のGoogleMapのURLを取得するモードの実装。
1に関しては、何かと便利な機能なので後々まで残すつもりなんだが、2に関しては、洗練した作りというのが難しいというか...tableのボーダーを指定したいとかdlタグでidやclassを指定したいとか考えるとかなり面倒なんでやめた。3は...yuさんもAssetExifプラグインページで言及されているが、微妙。
簡単な使い方
<p>----------- 1.ツールモード -----------------</p>
<p>画像のパスとURLを生成。</p>
<MTSetVarBlock name="NewestAssetPath">c:\xampp\htdocs\test01\pictures\20090215.jpg</MTSetVarBlock>
<MTSetVarBlock name="NewestAssetURL">http://localhost/test01/pictures/20090215.jpg</MTSetVarBlock>
<p>その画像を表示する</p>
<img src="<MTGetvar name="NewestAssetURL">" />
<p>モデル名が知りたいときのサンプル。値のみを取得なのでvalue。</p>
・<MTGetEXIF filepath="$NewestAssetPath" exiftag="Model" option="value"><br />
<p>モデル名が知りたいときのサンプル。キーと値のペア取得はpair。</p>
・<MTGetEXIF filepath="$NewestAssetPath" exiftag="Model" option="pair"><br />
<p>存在するすべてのEXIF情報(これはexiftagを省略するといい)のキーと値をペアで。</p>
All:<MTGetEXIF filepath="$NewestAssetPath" option="pair"><br />
<p>----------- 2.Assetモード -----------------</p>
<p>メーカー、モデル名、シャッタースピード、ファイル名を取得。テーブルで表組する</p>
<MTAssets type="image">
<MTGetEXIFAsset exiftag="Make,Model,ShutterSpeed,FileName" option="table"><br />
</MTAssets>
<p>メーカー、モデル名を取得。dlタグで表組する</p>
<MTAssets type="image">
<MTGetEXIFAsset exiftag="Make,Model" option="dl"><br />
</MTAssets>
<p>----------- 3.GPSモード -----------------</p>
<p>GPS位置。単に緯度経度情報だけならpositionで。</p>
GPS:<MTGetEXIFGpsPosition filepath="$NewestAssetPath" option="position"><br />
<p>Google Mapの地図。googlemapで地図のURLを返す。</p>
GPS:<MTGetEXIFGpsPosition filepath="$NewestAssetPath" option="googlemap"><br />
- カテゴリ:215プラグイン関係
トラックバック(1)
このブログ記事を参照しているブログ一覧: MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.6)
このブログ記事に対するトラックバックURL:
» MovableTypeプラグイン作成に必要な勉強方法について(AssetExifプラグイン制作プロセス) (WEBデザイン BLOG)~のトラックバック
Movable TypeプラグインAssetExifの制作プロセス、はじめてプラグインを制作した人からの必要なリソース、勉強法、気づいた点などついていろい... 続きを読む
- Categories
- Entries
-
- Feed情報の無いサイトの更新日時を得るプラグイン(2)
- Feed情報の無いサイトの更新日時を得るプラグイン
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.6)
- EXIF情報を取得するプラグインの進行状況
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.5)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.4)
- memo:perlでプラグイン Image::ExifとImage::Info
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.3)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.2)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(GPS Ready)
- MT4:エントリのURLをQRコードで自動生成する
- MT4.2:QRコード画像を生成するプラグイン(改)
- 嵌りメモ(perlのxampp環境でのファイル吐き出し実験)
- MT4.2:QRコード画像を生成するプラグイン
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(失敗)
- 管理画面を拡張する(メニューとメソッド追加)
- MT4.1:追加したファンクションタグのみへモデファイア追加
- MT4.1:エントリの既存DBへアクセスしてデータ取得
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)開発の話
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)配布
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン(改)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(プラグイン設定編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(ブログ毎編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(カテゴリ編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)
- MT4.1:カテゴリの並べ替え(オリジナルプラグイン+ハッシュ変数)
- サンプルプラグインを手入力した(AddField)
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン
- サンプルプラグインを手入力した(RandomEntry)
- 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)
コメントする