com.nttdocomo.ui
クラス ExifData

Object
  拡張com.nttdocomo.ui.ExifData

public class ExifData
extends Object
 [iアプリオプションAPI]

Exif 属性を表すクラスです。

Exif 属性は、複数のタグの集合体です。 各タグには、 そのタグを識別するためのタグ番号が規定されており、 タグ番号と、そのタグが所属するグループ(TIFF Tag, EXIF Private Tag, GPS Info Tag, Interoperability Tag)を指定すれば、 タグの種類は一意に定まります。 さらに、タグの種類ごとに、以下の項目が規定されています。

タイプ (Type):
そのタグに格納されている値のタイプです。 整数(BYTE, SHORT, LONG, SLONG)、有理数(RATIONAL, SRATIONAL)、 ASCII、UNDEFINED が存在します。
カウント (Count):
上記「タイプ」の値が何個格納されているかを表します。 ただし、ASCII・UNDEFINED の場合は、 格納されている文字列・バイト列のバイト数(ASCII は NUL 終端を含んだバイト数)を表します。

タグに格納されている値の取得・設定をするためのメソッドは、 そのタグのタイプによって異なります。 以下に、それぞれのタイプごとに利用するメソッド、 ならびに値の解釈方法を示します。

タイプ 設定メソッド 取得メソッド 値の解釈
BYTE
(8ビット符号無し整数)
setIntegerTag() getIntegerTag() 「カウント」個の long 型の値として表します。
各 long 値が取り得る値の範囲は 0〜255 です。
SHORT
(16ビット符号無し整数)
setIntegerTag() getIntegerTag() 「カウント」個の long 型の値として表します。
各 long 値が取り得る値の範囲は 0〜65535 です。
LONG
(32ビット符号無し整数)
setIntegerTag() getIntegerTag() 「カウント」個の long 型の値として表します。
各 long 値が取る値の範囲は 0〜232-1 です。
SLONG
(32ビット符号付き整数)
setIntegerTag() getIntegerTag() 「カウント」個の long 型の値として表します。
各 long 値が取り得る値の範囲は -231〜231-1 です。
RATIONAL
(符号無し有理数)
setRationalTag() getRationalTag() 「カウント」個の long[] 型の値として表します。
long[i] (0 ≤ i < カウント) には、 長さ2の long 配列が格納されています。
long[i][0] には i 番目の値の分子が、 long[i][1] には i 番目の値の分母が、 それぞれ格納されています。
各 long 値が取り得る値の範囲は 0〜232-1 です。
SRATIONAL
(符号付き有理数)
setRationalTag() getRationalTag() 「カウント」個の long[] 型の値として表します。
long[i] (0 ≤ i < 「カウント」) には、 長さ2の long 配列が格納されています。
long[i][0] には i 番目の値の分子が、 long[i][1] には i 番目の値の分母が、 それぞれ格納されています。
各 long 値が取り得る値の範囲は -231〜231-1 です。
ASCII setAsciiTag() getAsciiTag() 長さ (「カウント」 - 1) の文字列として表します。 NUL 終端は含みません。 各文字は ASCII の範囲内です。
UNDEFINED setUndefinedTag() getUndefinedTag() 「カウント」の長さを持つバイト列として表します。

このクラスに定義されているメソッドでは、 明示的な記載が無い限り、 引数に指定された配列は全体がコピーされてメソッドに渡され、 戻り値の型が配列の場合は、内部で保持している配列のコピーが返されます。

タグの種類や、タグが所属するグループ、それぞれのタグにおけるタグ番号・ フィールド名・タイプ・カウントなどの詳細については、 「ディジタルスチルカメラ用画像ファイルフォーマット規格 Exif 2.2 (JEITA CP-3451)」を参照してください。

導入されたバージョン:
DoJa-5.0 (903i)
関連項目:
ディジタルスチルカメラ用画像ファイルフォーマット規格 Exif 2.2 (JEITA CP-3451)

入れ子クラスの概要
 class ExifData.TagInfo
          enumerateTags() メソッドの戻り値に含まれるタグ情報を表す内部クラスです。
 
フィールドの概要
static int GPS_INFO_TAG
          タグが所属するグループを表す定数値で、 0th IFD GPS Info Tag であることを表します(=34853)。
static int SUPPORT_GET
          タグのサポート状況を表す定数値で、 取得可能であることを表します(=1)。
static int SUPPORT_SET
          タグのサポート状況を表す定数値で、 設定可能であることを表します(=2)。
 
コンストラクタの概要
ExifData()
           Exif 属性のオブジェクトを生成します。
 
メソッドの概要
 java.util.Enumeration enumerateTags()
           このオブジェクトに格納されている全ての Exif タグを列挙します。
 String getAsciiTag(int tagGroup, int tagID)
          ASCII 型の Exif タグについて、 指定されたタグに格納されている値を取得します。
 long[] getIntegerTag(int tagGroup, int tagID)
          整数(BYTE, SHORT, LONG, SLONG)型の Exif タグについて、 指定されたタグに格納されている値を取得します。
 long[][] getRationalTag(int tagGroup, int tagID)
          有理数(RATIONAL, SRATIONAL)型の Exif タグについて、 指定されたタグに格納されている値を取得します。
static int getSupportStatus(int tagGroup, int tagID)
          指定されたタグのサポート状況を取得します。
 byte[] getUndefinedTag(int tagGroup, int tagID)
          UNDEFINED 型の Exif タグについて、 指定されたタグに格納されている値を取得します。
 void setAsciiTag(int tagGroup, int tagID, String value)
           ASCII 型の Exif タグについて、 指定されたタグに格納する値を設定します。
 void setIntegerTag(int tagGroup, int tagID, long[] values)
           整数(BYTE, SHORT, LONG, SLONG)型の Exif タグについて、 指定されたタグに格納する値を設定します。
 void setRationalTag(int tagGroup, int tagID, long[][] rational)
           有理数(RATIONAL, SRATIONAL)型の Exif タグについて 指定されたタグに格納する値を設定します。
 void setUndefinedTag(int tagGroup, int tagID, byte[] value)
           UNDEFINED 型の Exif タグについて、 指定されたタグに格納する値を設定します。
 Location toLocation()
           この Exif 属性にもとづいた位置情報オブジェクトを生成します。
 void update(Location location)
           指定された位置情報を、この Exif 属性に反映させます。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

GPS_INFO_TAG

public static final int GPS_INFO_TAG
タグが所属するグループを表す定数値で、 0th IFD GPS Info Tag であることを表します(=34853)。

関連項目:
定数フィールド値

SUPPORT_GET

public static final int SUPPORT_GET
タグのサポート状況を表す定数値で、 取得可能であることを表します(=1)。

関連項目:
getSupportStatus(int, int), 定数フィールド値

SUPPORT_SET

public static final int SUPPORT_SET
タグのサポート状況を表す定数値で、 設定可能であることを表します(=2)。

関連項目:
getSupportStatus(int, int), 定数フィールド値
コンストラクタの詳細

ExifData

public ExifData()

Exif 属性のオブジェクトを生成します。

現実装では、生成直後には下記のタグのみが格納されています。

グループ タグ番号(フィールド名) タイプ カウント 初期値 サポート
GPS_INFO_TAG 0 (GPSVersionID) BYTE 4 {2, 2, 0, 0} 更新不可・取得のみ可

オブジェクト生成時に格納されるタグの種類は、 将来の実装で変更される可能性があります。

メソッドの詳細

getSupportStatus

public static int getSupportStatus(int tagGroup,
                                   int tagID)
指定されたタグのサポート状況を取得します。

引数 tagGroup に GPS_INFO_TAG 以外の値が指定された場合や、 引数 tagID に Exif で規定されていないタグ番号を指定した場合には、 このメソッドは 0 を返します。

パラメータ:
tagGroup - サポート状況を取得したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - サポート状況を取得したいタグのタグ番号を指定します。
戻り値:
指定されたタグについて、 取得のみサポートされている場合は SUPPORT_GET を、 設定・取得がサポートされている場合は (SUPPORT_GET | SUPPORT_SET) を、 いずれもサポートされていない場合は 0 を、それぞれ返します。

setIntegerTag

public void setIntegerTag(int tagGroup,
                          int tagID,
                          long[] values)

整数(BYTE, SHORT, LONG, SLONG)型の Exif タグについて、 指定されたタグに格納する値を設定します。 指定されたタグについて、値の設定をサポートしていない場合、何もしません。

パラメータ:
tagGroup - 設定したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 設定したいタグのタグ番号を指定します。
values - 設定したいタグの値の配列を指定します。 配列の長さは、 そのタグの「カウント」の数と一致していなければなりません。 引数で指定したタグを削除するには null を指定します。
例外:
IllegalArgumentException - 指定されたタグが整数型でない場合に発生します。
IllegalArgumentException - 引数 values の長さが、指定されたタグの「カウント」 の数と一致していない場合に発生します。
IllegalArgumentException - 引数 values に格納されている値のいずれかが、指定されたタグのタイプ (BYTE, SHORT, LONG, SLONG) に収まらない場合に発生します。

getIntegerTag

public long[] getIntegerTag(int tagGroup,
                            int tagID)
整数(BYTE, SHORT, LONG, SLONG)型の Exif タグについて、 指定されたタグに格納されている値を取得します。 指定されたタグについて、値の取得をサポートしていない場合や、 タグそのものが存在しない場合には null が返されます。

パラメータ:
tagGroup - 値を取得したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 値を取得したいタグのタグ番号を指定します。
戻り値:
引数で指定されたタグに格納されている値 (長さ「カウント」の配列)を返します。
例外:
IllegalArgumentException - 指定されたタグが整数型でない場合に発生します。

setRationalTag

public void setRationalTag(int tagGroup,
                           int tagID,
                           long[][] rational)

有理数(RATIONAL, SRATIONAL)型の Exif タグについて 指定されたタグに格納する値を設定します。 指定されたタグについて、値の設定をサポートしていない場合、何もしません。

引数 rational には、設定したい値(有理数)を、 long[2] で表した分数の配列で指定します。 i 番目の値の分子を rational[i][0] に、 分母を rational[i][1] に、それぞれ格納します。 rational[i] の長さは、任意の i において、 2以上でなければなりません。 rational[i] の第2要素以降の値は無視されます。

パラメータ:
tagGroup - 設定したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 設定したいタグのタグ番号を指定します。
rational - 設定したいタグの値を、分数の配列で指定します。 rational の長さは、そのタグの「カウント」 の数と一致していなければなりません。 引数で指定したタグを削除するには null を指定します。
例外:
NullPointerException - 引数 rational について、 rational[i] が null となるような整数 i が存在する場合に発生します。
IllegalArgumentException - 指定されたタグが有理数型でない場合に発生します。
IllegalArgumentException - 引数 rational の長さが、指定されたタグの「カウント」 の数と一致していない場合に発生します。
IllegalArgumentException - 引数 rational について、 rational[i] の長さが 2 未満であるような整数 i が存在する場合に発生します。
IllegalArgumentException - 引数 rational の配列中で、 分母が格納されている要素のいずれかに 0 が指定されている場合に発生します。
IllegalArgumentException - 引数 rational の各要素に格納されている long 値について 指定されたタグのタイプ (RATIONAL, SRATIONAL) に収まらない場合に発生します。

getRationalTag

public long[][] getRationalTag(int tagGroup,
                               int tagID)
有理数(RATIONAL, SRATIONAL)型の Exif タグについて、 指定されたタグに格納されている値を取得します。 指定されたタグについて、値の取得をサポートしていない場合や、 タグそのものが存在しない場合には null が返されます。

パラメータ:
tagGroup - 値を取得したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 値を取得したいタグのタグ番号を指定します。
戻り値:
引数で指定されたタグに格納されている値 (長さ「カウント」の配列)を返します。 戻り値の配列を rational とすると、 任意の i について rational[i][0] に分子が、 rational[i][1] に分母が、それぞれ格納されています。
例外:
IllegalArgumentException - 指定されたタグが有理数型でない場合に発生します。

setAsciiTag

public void setAsciiTag(int tagGroup,
                        int tagID,
                        String value)

ASCII 型の Exif タグについて、 指定されたタグに格納する値を設定します。 指定されたタグについて、値の設定をサポートしていない場合、何もしません。

パラメータ:
tagGroup - 設定したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 設定したいタグのタグ番号を指定します。
value - 設定したいタグの値を指定します。 NUL 終端は含めてはいけません。 また、文字列の長さは、そのタグの(「カウント」 - 1) の値と一致していなければなりません。 引数で指定したタグを削除するには null を指定します。
例外:
IllegalArgumentException - 指定されたタグが ASCII 型でない場合に発生します。
IllegalArgumentException - 引数 value の長さが、指定されたタグの(「カウント」 - 1) の値と一致していない場合に発生します。
IllegalArgumentException - 引数 value に、非 ASCII コードが含まれていた場合に発生します。

getAsciiTag

public String getAsciiTag(int tagGroup,
                          int tagID)
ASCII 型の Exif タグについて、 指定されたタグに格納されている値を取得します。 指定されたタグについて、値の取得をサポートしていない場合や、 タグそのものが存在しない場合には null が返されます。

パラメータ:
tagGroup - 値を取得したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 値を取得したいタグのタグ番号を指定します。
戻り値:
引数で指定されたタグに格納されている値を返します。 NUL 終端は含まれません。
例外:
IllegalArgumentException - 指定されたタグが ASCII 型でない場合に発生します。

setUndefinedTag

public void setUndefinedTag(int tagGroup,
                            int tagID,
                            byte[] value)

UNDEFINED 型の Exif タグについて、 指定されたタグに格納する値を設定します。 指定されたタグについて、値の設定をサポートしていない場合、何もしません。

パラメータ:
tagGroup - 設定したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 設定したいタグのタグ番号を指定します。
value - 設定したいタグの値を指定します。 配列の長さは、 そのタグの「カウント」の数と一致していなければなりません。 引数で指定したタグを削除するには null を指定します。
例外:
IllegalArgumentException - 指定されたタグが UNDEFINED 型でない場合に発生します。
IllegalArgumentException - 引数 value の長さが、指定されたタグの「カウント」 の数と一致していない場合に発生します。

getUndefinedTag

public byte[] getUndefinedTag(int tagGroup,
                              int tagID)
UNDEFINED 型の Exif タグについて、 指定されたタグに格納されている値を取得します。 指定されたタグについて、値の取得をサポートしていない場合や、 タグそのものが存在しない場合には null が返されます。

パラメータ:
tagGroup - 値を取得したいタグのグループを指定します。 現在の実装では GPS_INFO_TAG のみが指定可能です。
tagID - 値を取得したいタグのタグ番号を指定します。
戻り値:
引数で指定されたタグに格納されている値を返します。
例外:
IllegalArgumentException - 指定されたタグが UNDEFINED 型でない場合に発生します。

enumerateTags

public java.util.Enumeration enumerateTags()

このオブジェクトに格納されている全ての Exif タグを列挙します。 サポートされているタグであれば、 取得のみ可能か、取得・設定が可能かにかかわらず、 有効な値が設定されているタグは全て返されます。 戻り値として返される Enumeration の中には ExifData.TagInfo クラスのインスタンスが格納されています。

戻り値の Enumeration を取得した後に、 格納されている Exif タグに変更・削除があった場合には、 その変更は即座に Enumeration にも反映されます。 追加があった場合も同様ですが、 その場合に Enumeration のどの部分に追加されるかは機種依存です。
なお、同期は取られていません。 Enumeration の操作とこのオブジェクトの操作を並行に実施する時には、 明示的に同期を取る必要があります。

戻り値:
このオブジェクトに格納されている全ての Exif タグにアクセスできる Enumeration を返します。 Enumeration 中の各 Exif タグへは ExifData.TagInfo インスタンスとしてアクセスできます。

toLocation

public Location toLocation()

この Exif 属性にもとづいた位置情報オブジェクトを生成します。 このメソッドが呼び出される度に、 新しい Location オブジェクトを生成して返します。

このオブジェクトには、 少なくとも下記の情報が設定されていなければなりません。 これらの情報のうち 1 つでも欠けているものが有る場合には null が返されます。

  • GPSLatitudeRef (タグ番号: 1)
  • GPSLatitude (タグ番号: 2)
  • GPSLongitudeRef (タグ番号: 3)
  • GPSLongitude (タグ番号: 4)
  • GPSTimeStamp (タグ番号: 7)
  • GPSMapDatum (タグ番号: 18)
  • GPSDateStamp (タグ番号: 29)

生成される Location オブジェクト内の各情報は、 このオブジェクトの下記情報に従って設定されています。

緯度:
GPSLatitude、GPSLatitudeRef に従って設定されます。 度表記、度分表記、度分秒表記のいずれの場合でも正しく解釈されます。
経度:
GPSLongitude、GPSLongitudeRef に従って設定されます。 度表記、度分表記、度分秒表記のいずれの場合でも正しく解釈されます。
測地系:
GPSMapDatum に従って設定されます。
測位時刻:
GPSDateStamp、GPSTimeStamp に従って設定されます。
高度:
GPSAltitude、GPSAltitudeRef に従って設定されます。 これらのタグが1つでも欠けている場合には Location.ALTITUDE_UNKNOWN が設定されます。
水平方向の精度:
常に Location.ACCURACY_UNKNOWN が設定されます。 仮に GPSDOP タグが設定されていても、その内容は無視されます。

戻り値:
この Exif 属性にもとづいた Location オブジェクトを返します。 Exif 属性に十分な情報が設定されていない場合には null を返します。

update

public void update(Location location)

指定された位置情報を、この Exif 属性に反映させます。

引数に指定された位置情報の、 緯度、経度、高度、測地系、測位日時にもとづいて、 下記のタグが更新(存在していない場合は追加)されます。

  • GPSLatitudeRef (タグ番号: 1)
  • GPSLatitude (タグ番号: 2)
  • GPSLongitudeRef (タグ番号: 3)
  • GPSLongitude (タグ番号: 4)
  • GPSAltitudeRef (タグ番号: 5)
  • GPSAltitude (タグ番号: 6)
  • GPSTimeStamp (タグ番号: 7)
  • GPSMapDatum (タグ番号: 18)
  • GPSDateStamp (タグ番号: 29)

高度に Location.ALTITUDE_UNKNOWN が設定されている場合は、 GPSAltitude、GPSAltitudeRef の2つのタグが消去されます。 また、水平方向の精度の情報は無視されます。 この Exif 属性中の GPSDOP タグ(タグ番号: 11)が変更されることもありません。

パラメータ:
location - この Exif 属性に反映させたい位置情報を指定します。
例外:
NullPointerException - 引数 location に null が指定された場合に発生します。