謝辞: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 (緯度, 経度, 日時) として「画像指定」に渡せればよいのであるが、どういうわけか受け取れないのである。ご教示頂ければ幸甚である。