exif_read_data

(PHP 4 = 4.2.0)

exif_read_data -- JPEG または TIFF から EXIF ヘッダを読みこむ

説明

array exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]])

関数 exif_read_data() はJPEGまたはTIFFイメージファ イルからEXIFヘッダを読みこみます。この関数は、キーがヘッダ名、値 がヘッダに関連するの値となる連想配列を返します。返すデータがない 場合、 FALSE が返されます。

filename は読みこむファイル名です。これは、 URLとして使用することはできません。

sections は、結果の配列を生成する際に含める カンマ区切りのセクションのリストです。

FILE FileName, FileSize, FileDateTime, SectionsFound
COMPUTED html, Width, Height, IsColor 及び他の取得可能なもの
ANY_TAG タグを有する全ての情報 例えば、IFD0, EXIF, ...
IFD0 IFD0の全てのタグ付きのデータ。通常のイメージファイルで は、これにはイメージサイズが含まれます。
THUMBNAIL 2番目のIFDがある場合にファイルにサムネイルが含まれている可能 性があります。埋め込まれているサムネイルに関する全てのタグ付 きの情報はこのセクションに保存されています。
COMMENT JPEGイメージのコメントヘッダ。
EXIF EXIFセクションは、IFD0のサブセクションです。このセクションに は、イメージに関するより詳細な情報が含まれています。これらの エントリの多くはデジタルカメラに関するものです。


arrays は、各セクションを配列とするかどうか を指定します。セクション FILE COMPUTED THUMBNAIL は、 常に配列となります。これは、これらのセクションに含まれる値の名前 が他のセクションと衝突するためです。

thumbnail は、サムネイルのタグ付きのデータ だけでなく、サムネイル本体を読みこむかどうかを指定します。

注意 Exifヘッダはデジタルカメラにより生成されたJPEG/TIFFイメージで使 用される傾向がありますが、残念なことに、各デジタルカメラメーカー は、個々のイメージに関するタグ付けの方法について異なった考えを持っ ており、特定のExifヘッダの存在を仮定することはできません。

例 1 exif_read_data() の例

 ?php
echo "test1.jpg: br \n";
$exif = exif_read_data ('tests/test1.jpg','IFD0');
echo $exif===false ? "No header data found. br \n" : "Image
contains headers br ";
$exif = exif_read_data ('tests/test2.jpg',0,true);
echo "test2.jpg: br \n";
foreach($exif as $key= $section) {
    foreach($section as $name= $val) {
        echo "$key.$name: $val br \n";
    }
}? 

最初のコールは、失敗します。これは、イメージがヘッダ情報を有していないためです。

test1.jpg:
No header data found.
test2.jpg:
FILE.FileName: test2.jpg
FILE.FileDateTime: 1017666176
FILE.FileSize: 1240
FILE.FileType: 2
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT
COMPUTED.html: width="1" height="1"
COMPUTED.Height: 1
COMPUTED.Width: 1
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 1
COMPUTED.UserComment: Exif test image.
COMPUTED.UserCommentEncoding: ASCII
COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger.
COMPUTED.Copyright.Photographer: Photo (c) M.Boerger
COMPUTED.Copyright.Editor: Edited by M.Boerger.
IFD0.Copyright: Photo (c) M.Boerger
IFD0.UserComment: ASCII
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.JPEGInterchangeFormatLength: 523
COMMENT.0: Comment #1.
COMMENT.1: Comment #2.
COMMENT.2: Comment #3end




注意 イメージに何らかのIFDOデータが含まれている場合、COMPUTEDにはエン トリByteOrderMotorolaが含まれます。このエントリは、バイトオーダ がリトルインディアン(インテル)の場合に0、ビッグインディアン(モト ローラ)の場合に1となります。これは、PHP 4.3で追加されました。

ExifヘッダにCopyrightが含まれる場合、これには2つの値が含まれる可 能性があります。これはExif 2.10の規約に沿っていないため、 COMPUTEDセクションは、エントリ Copyright.Photographer および Copyright.Editor をともに返しますが、 IFD0セクションには両方のエントリをNULL文字で分割した型式のバイト 配列が含まれます。さもなくば、(Exifのデフォルト処理に基づき)デー タ型式に誤りがあるとして最初のエントリのみを返します。 COMPUTEDには、エントリ Copyright も含まれます。 これは、元のcopyright文字列またはphotoおよびeditor copyrightのカ ンマ区切りのリストとなります。

注意 UserCommentタグにはCopyrightタグと同様の問題があります。 このタグには2つの値を保存する可能性があり、この場合、使用される エンコーディングが最初に、値自体が2番目にきます。この場合、IFDセ クションにはエンコーディングまたはバイト配列のみが含まれます。 COMPUTEDセクションには、エントリ UserCommentEncoding UserComment の両方を保存します。 エントリ UserComment はどちらの場合でも取得可 能です。このため、FD0セクションの値の識別に使用されます。

ユーザコメントがUnicodeまたはJISエンコーディングを使用しており、 モジュールmbstringが利用できる場合、このエンコーディングはexifの 初期設定に基づき自動的に変更されます。この機能は、PHP 4.3で追加 されました。

注意 Height と Width は、 getimagesize() と同じ方法 で計算されます。このため、これらの値はヘッダの一部として返す際に 使用するべきではありません。また、htmlは通常の HTML で使用されるheight/widthテキスト文字列です。

注意 PHP 4.3以降、この関数は配列を含む埋めこまれた IFD データを全て読むことが可能となっています。 また、埋めこみのサムネイルの大きさもサブ配列 THUMBNAIL に返されます。 関数 exif_read_data()TIFF 型式のサムネイルを返すことが可能です。 最後に返り値の(メモリリミットに達するまでではない)最大長はもはや ないことを追記しておきます。

注意 この関数は、 --enable-exif を指 定してPHP 4をコンパイルした場合のみ使用可能です。この機能と動作 は、PHP 4.2で変更されています。これより以前のバージョンは非常に 不安定です。

PHP 4.3以降、 --enable-mbstring を指定してPHP 4がコ ンパイルされている場合、ユーザコメントのエンコーディングは自動 的に変換されます。

この関数は、GDイメージライブラリを必要としません。

exif_thumbnail() および getimagesize() も参照ください。