Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

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は、結果の配列を生成する際に含める カンマ区切りのセクションのリストです。

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ヘッダの存在を仮定することはできません。

例 1exif_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セクションには、エントリ 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()も参照ください。