exif_read_data

(PHP 4 >= 4.2.0, PHP 5)

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は、結果の配列を生成する際に含める カンマ区切りのセクションのリストです。もしも要求されるセクションを 見つけられない場合は FALSE が返されます。

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

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

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
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.Thumbnail.Height: 1
THUMBNAIL.Thumbnail.Height: 1

注意: イメージに何らかの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セクションには、エントリ UserCommentEncodingUserCommentの両方を保存します。 エントリ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()も参照ください。