謝辞:Jacob Seidelin 氏開発の Javascript EXIF Reader 0.1.4 をアカベコ氏が改変したMPLのJSライブラリを使わせていただきました。これに関しては、「EXIFの概要」 をご参照ください。
表示されない場合は、再度クリックしてください。
●jsライブラリ
<script src="exifjs/binaryajax.js"></script>
<script src="exifjs/exif.js"></script>
●スクリプト
function 画像指定() {
// HTMLから対象となるJPEGファイルのURLを受け取る
var 画像URL = document.form1.画像URL.value;
緯度経度取得(画像URL);
}; // ↓
// ↓ 呼出し
// ↓
function 緯度経度取得(画像URL) {
// A:JPEGファイル「sample.jeg」をImageオブジェクト「画像」として定義する
var 画像 = new Image();
画像.src = 画像URL;
// B:ライブラリにあるgetAllTags()を呼び出してEXIF情報を取得する。
var EXIF情報 = new Exif(画像);
EXIF情報.load( function() {
var タグ値 = EXIF情報.getAllTags();
// 取得結果は 連想配列 タグ値[タグ名] に保存される。
// C:このタグ名は jsライブラリ で定められている(後述「EXIFタグ名」参照)
var 緯度分秒 = タグ値["GPSLatitude"]; // 緯度・経度は「度,分,秒」の形式になっている
var 経度分秒 = タグ値["GPSLongitude"];
var 日時 = タグ値["GPSDateStamp"];
// D
緯度経度加工(緯度分秒, 経度分秒, 日時); // ★「要改良点」参照
}); // ↓
}; // ↓ 呼出し
// ↓
function 緯度経度加工(緯度分秒, 経度分秒, 日時) {
// E:度分秒を十進に変換
var 度分秒 = String(緯度分秒).split(",");
var 緯度 = 度分秒[0]/1 + 度分秒[1]/60 + 度分秒[2]/3600;
度分秒 = String(経度分秒).split(",");
var 経度 = 度分秒[0]/1 + 度分秒[1]/60 + 度分秒[2]/3600;
// F:HTMLのフォームに出力
document.form1.緯度出力場所.value = 緯度;
document.form1.経度出力場所.value = 経度;
document.form1.日時出力場所.value = 日時;
};
●HTML
<form name="form1">
// 入力部 画像URL=sample.JPG を引数として、関数「画像指定」を呼び出す
画像URL<input type="text" id="画像URL" value="sample.JPG"></input>
<input type="button" value="実行" onClick="画像指定()"></input>
// 出力部 関数「緯度経度加工」より出力される
緯度<input type="text" id="緯度出力場所"></input>
経度<input type="text" id="経度出力場所"></input>
撮影日時<input type="text" id="日時出力場所"></input>
</form>
ここでは、非常に簡単な例として、画像ファイルのURLを与えて、そのEXIF情報を読み、緯度、経度、撮影日時を表示する。
本来ならば、「緯度」「経度」「日時」の値をメインプログラム「画像指定」で受け取ることにより、多様な処理ができる。それなのに、このプログラムでは、呼ばれた先の関数「緯度経度加工」から結果をHTMLに出力している。そのため、他の処理につなげるには、出力データを再度入力しなければならない。
本来のようにするには、★行を return (緯度, 経度, 日時) として「画像指定」に渡せればよいのであるが、どういうわけか受け取れないのである。ご教示頂ければ幸甚である。