サイト移転のお知らせ:http://techbooster.org/に移転しました

ExifInterfaceを使ってJPEGファイルのExif情報を取得する

2月 2, 2011   //   by kkato   //   マルチメディア  //  No Comments

今回はJPEGファイルのExif情報を取得する方法を説明します。

Exifのフォーマットを知っていればバイナリデータを解析して取得することも可能ですが、Androidではandroid.media.ExifInterfaceクラスを使うことで簡単に取得することが可能です。

ExifInterfaceクラスはAndroid2.0(API5)から追加されたクラスです。さらに、Android2.2(API8)Android2.3(API9)Android3.0(Honeycomb)でそれぞれ取得出来るExifのタグが増えています。

また、JPEGファイルの中にサムネイル画像が入っていれば取得することも可能です。

それでは続きで説明していきます。

コンストラクタ

ExifInterfaceクラスのコンストラクタは引数にファイル名を与えます。IOExceptionが発生する可能性があるのでtry,catchブロックを使います。ファイルが存在しなくてもログにエラーは出るだけで正常にコンストラクタは終了するので注意してください。

ExifInterface(String filename)

Exif情報の取得

ExifInterfaceクラスのgetAttributeメソッドを利用します。引数に取得するタグを指定します。

public String getAttribute (String tag)

例えば撮影機器モデル名を取得するには下記のように記述します。(ここでのeiはExifInterfaceのインスタンスです)

ei.getAttribute(ExifInterface.TAG_MODEL);

もしJPEGファイルにそのExif情報が無い場合や、ExifInterfaceのコンストラクタで指定したファイルが存在していなかった場合にはこのメソッドの戻り値がnullになります。

その他のタグはサンプルコードAndroidDevelopersを参照してください。

サムネイルの取得

サムネイルを取得するにはgetThumbnailメソッドを利用します。

public byte[] getThumbnail()

戻り値はbyte[]なので、実際にはBitmapFactoryクラスのdecodeByteArrayメソッドでBitmapクラスにデコードするなどして利用します。

JPEGファイルにサムネイルが存在しない場合にはnullが返ります。

byte[] data = ei.getThumbnail();
if (null == data) {
	Log.d(TAG, "No Thumbnail");
    	return null;
}
Bitmap thumb =  BitmapFactory.decodeByteArray(data, 0, data.length);

サンプルコードについて

サンプルコードをそのまま動かしてみる場合は、SDカードにsample.jpgという名前で適当なJPEGファイルを配置してください。

onCreateメソッドでファイルを指定しているので、ここを任意のファイル名(及びパス)に修正してもらう方法もあります。

サンプルコードはAnroid2.3(API9)向けの記述をしています。Honeycombで取得できるExif情報はコメントアウトしていますので、マニフェストファイルの修正とHoneycombで動作させる場合はコメントを外してください。

関連する記事:

Sponsored Link

Comments are closed.

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です