C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

JPEGファイルからExif(Exchangeable image file format)情報を取得するには, イグジフインタフェース(ExifInterface)クラスを利用する. (API Level5以降)

Exif情報の取得

  • MainActivity.java
    • JPEGファイルのパスを指定して, ExifInterfaceのインスタンスを取得する.
    • ExifInterface#getAttribute/getAttributeInt/getAttributeDoubleメソッドに, 取得する情報のタグを指定して値を取得する.
    • ExifInterface#getLatLongメソッドで, 緯度・経度を取得する.
    • ExifInterface#hasThumbnailメソッドで, サムネイルの有無を調べ, ExifInterface#getThumbnailメソッドでサムネイルを取得する.
取得できる情報については, Android Developerの以下を参照.
http://developer.android.com/reference/android/med...
package com.moonlight_aska.android.exifinfo;

import java.io.IOException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ExifInterface;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView sizeText = (TextView)findViewById(R.id.sizeinfo);
    TextView dateText = (TextView)findViewById(R.id.dateinfo);
    TextView latlongText = (TextView)findViewById(R.id.latlonginfo);
    ImageView thumbnailView = (ImageView)findViewById(R.id.thumbnail);
    try {
      // ExifInterfaceのインスタンス取得
      ExifInterface exif = new ExifInterface(Environment.getExternalStorageDirectory().getPath() + "/sample/sample.jpg");
      if (exif != null) {
        // 画像情報
        String info = String.format("size: %d x %d",
            exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, -1),
            exif.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, -1));
        sizeText.setText(info);
        info = String.format("date: %s", exif.getAttribute(ExifInterface.TAG_DATETIME));
        dateText.setText(info);
        float[] latlong = new float[2];
        exif.getLatLong(latlong);
        info = String.format("latlong: %f, %f", latlong[0], latlong[1]);
        latlongText.setText(info);
        // サムネイル
        if (exif.hasThumbnail()) {
          byte[] image = exif.getThumbnail();
          Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
          thumbnailView.setImageBitmap(bitmap);
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
  • 動作例
Nexus 7 / Android 4.3




コメントをかく


ユーザーIDでかく場合はこちら
「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

AD



管理人のみ編集できます