スタートページJavascript

EXIF:JPEGファイルの撮影情報の取得と利用


EXIFとは

JPEG形式の画像ファイルは、画像データそのもの以外に、撮影日時や撮影条件などに関するデータももっている。EXIF(Exchangeable image file format)とは、そのデータの記録形式に関する規格の一つで、多くのデジタルカメラがこの規格を採用している。近年は、GPS情報を得るデジカメが普及しており、EXIFも緯度や経度なども取り入れている。

Javascript等でEXIF情報を取り出すことにより、GoogleMapと組み合わせて、撮影地点を地図に表示するなど、多様な利用ができる。また、多くのブラウザがローカルファイルをダイアログボックスによる指定やドラッグ&ドロップによる指定してHTMLに取り込むFileAPI機能をもつようになった。これと組み合わせるとさらに便利なアプリケーションを開発できる。
 既に多くのサイトでこのようなアプリケーションサービスを提供している。ここでは、その初歩的なものを自作した。

しかし、JavascriptでEXIFデータを取り出すのは、到底私の能力を超えている。幸い、そのためのJSライブラリが提供されており、使用法を解説したWebサイトもある(注)。ここでは、それらをパクらせてもらい、一応動くものが作れたので公開する。

(注)参考したWebサイト

ここでは、アカベコ氏さんの「JavaScript だけで EXIF を読む 2」(http://akabeko.me/blog/tag/exif/)からJSライブラリ「Javascript EXIF Reader 0.1.4」(以下「EXIF Reader」)をダウンロードし、サンプルを参考にさせていただいた。そこでは、次のような記述がある。

EXIF情報

EXIF規格は、EXIF情報はプレーンテキスト形式で記録され、どのポジション(相対位置)に何の情報が入ってるかを規定している。その情報内容をタグ名といい標準化されている。記録されている主な情報(タグ名)を示す。

タグ名意味サンプル画像での値
MakeメーカPanasonic
ModelモデルDMC-TZ30
DateTimeOriginalオリジナル画像の生成日時2013:03:26 11:55:46
DateTimeファイル変更日時2014:03:24 18:29:13
PixelXDimension有効な画像の幅(ピクセル)2179
PixelYDimension有効な画像の高さ(ピクセル)1632
ExposureTime露出時間(秒)0.0015625
FNumberF値4
FocalLengthレンズの焦点距離(mm)4.3
FlashフラッシュFlash did not fire, auto mode
GPSLatitudeRef緯度の南北N
GPSLatitude緯度(度、分、秒)35,55,3.29
GPSLongitudeRef経度の東西E
GPSLongitude経度(度、分、秒)139,38,4.57
GPSMeasureModeGPSの測位モード2
GPSDOP測位の信頼性0.9
GPSMapDatum測位に用いた地図データWGS-84

EXIF Reader は、その情報を読込み、タグ名を添え字とする連想配列の形式にする機能をもっている。
 例えば、連想配列名を タグ値[] とすれば、
     タグ値["GPSLatitude"]
は、撮影地点の経度が「35,55,3.29」のような度分秒形式で値が入っている。

(注意)このように、JPEGファイルには「いつ、どこで、どのような機種・設定で」撮影したかの個人情報に関わる情報が含まれている。他人に渡したり公開するときには、あらかじめEXIF情報を削除するなどの配慮も必要になる。


いくつかの例

例1:EXIF情報の取得:基礎

EXIF Readerを用いて連想配列を得る単純な例。JPEG画像のURLを与えて、EXIF情報を読込み、緯度・経度、撮影日時を出力する。