com.docomostar.media
クラス ExifData

Object
  上位を拡張 com.docomostar.media.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)」を参照してください。

このクラスで定義されているメソッドでタグの値を設定する際、 例外で規定されているチェックは行いますが、 それ以外のチェックは行いません。

導入されたバージョン:
Star-1.0

入れ子のクラスの概要
 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 が返されます。

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

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

このオブジェクトに以下の値が設定されている場合には、 正しい値として解釈し Location オブジェクトを返します。
GPSTimeStamp, GPSDateStamp, GPSAltitude については全て許容します。
GPSAltitudeRefについては、不正な値の場合またはタグがない場合には、 生成される Location オブジェクトの高度には Location.ALTITUDE_UNKNOWN が設定されます。 それ以外の各情報に不正な値が設定されている場合または各情報のタグがない場合は、 戻り値として null を返します。 Exif 属性として東経 180 度が設定されている場合、生成される Location オブジェクトの経度には -180 度(西経 180 度)が設定されます。

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

update

public void update(Location location)

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

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

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

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


NTT DOCOMO,INC.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。

その他記載された会社名、製品名などは該当する各社の商標または登録商標です。