Search
  1. exif関数を使用するには
  2. exif_imagetype〔イメージの型を定義する〕
  3. exif_read_data〔JPEG あるいは TIFF から EXIF ヘッダを読み込む〕
  4. exif_tagname〔インデックスに対応するヘッダ名を取得する〕
  5. exif_thumbnail〔TIFF あるいは JPEG 形式の画像に埋め込まれたサムネイルを取得する〕

exif関数を使用するには

unknown

php.iniで、下記のDLLを有効にします(先頭のセミコロンを外す)。
「php_mbstring.dll」は「php_exif.dll」より先に有効になっている必要があります。

extension=php_mbstring.dll
extension=php_exif.dll

exif_imagetype
イメージの型を定義する

unknown

int exif_imagetype ( string $ファイル名 )

画像の先頭バイトを読み、その型を調べます。 正しい方が見つかった場合は適切な整数、それ以外の場合はFALSEを返します。 返り値は、getimagesize()の返り値である配列の2番目の要素にあたる画像形式を表す定数と同じですが、この関数の方が高速です。

下記の定数が定義されており、この関数の返り値になります。

Imagetype定数
定数
1IMAGETYPE_GIF
2IMAGETYPE_JPEG
3IMAGETYPE_PNG
4IMAGETYPE_SWF
5IMAGETYPE_PSD
6IMAGETYPE_BMP
7IMAGETYPE_TIFF_II (intel byte order)
8IMAGETYPE_TIFF_MM (motorola byte order)
9IMAGETYPE_JPC
10IMAGETYPE_JP2
11IMAGETYPE_JPX
12IMAGETYPE_JB2
13IMAGETYPE_SWC
14IMAGETYPE_IFF
15IMAGETYPE_WBMP
16IMAGETYPE_XBM

この関数は、他のExif関数がサポートしていないファイル形式でコールされるのを防ぐことができます。 また、$_SERVER['HTTP_ACCEPT'](現在のリクエストのAccept:ヘッダ)と組み合わせて閲覧者が画像を見る権限を持っているかどうかを調べることも可能です。

例えば、PNG形式の画像の拡張子だけGIFにした画像を指定した場合、GIF形式ではなくPNG形式と判定されます。

第1引数ファイル名には、調べる画像のファイル名を指定します。

<?
if (exif_imagetype('/content/img/grid.gif') != IMAGETYPE_GIF) {
    echo "この画像はGIF形式ではありません";
}else{
    echo "この画像はGIF形式です。";
}
// この画像はGIF形式です。
?>

exif_read_data
JPEG あるいは TIFF から EXIF ヘッダを読み込む

unknown

array exif_read_data ( string $ファイル名[, string $セクション[, bool $配列[, bool $サムネイル ]]] )

read_exif_data()は、この関数のエイリアスです。

デジカメが生成したメタでータを読み込むことが可能です。 この関数は、JPEGあるいはTIFF形式の画像ファイルからEXIFヘッダを読み込み、ヘッダ名がキー、ヘッダの内容が値となる連想配列を返します。 返り値がない場合は、FALSEを返します。

第1引数ファイル名には、読み込む画像のファイル名(URL不可)を指定します。

オプション第2引数セクションには、結果の配列を作成するために存在する必要のあるセクションのカンマ区切りのリストを指定します。 要求されたセクションが1つも見つからない場合は、FALSEを返します。

Imagetype定数
セクション説明
FILEFileName、FileSize、FileDataTime、SectionsFound
COMPUTED html、Width、Height、IsColorおよび他の取得可能なもの。 WidthとHeightは、getimagesize()と同じ方法で計算されます。 このWidthとHeighを表すテキスト文字列は、これらの値をヘッダの一部として返してはいけません。 また、htmlは高さ/幅を表すテキスト文字列で、通常のHTML中で用いられます。
ANY_TAGタグを有する全ての情報。例えば、IFD0、EXIFなど。
IFD0IFD0の全てのタグつきデータ。通常の画像ファイルでは、個々に画像サイズが含まれます。
THUMBNAIL2番目のIFDがある場合、ファイルにサムネイルが含まれている可能性があります。埋め込まれたサムネイルに関する全てのタグ付き情報はこのセクションに格納されます。
COMMENTJPEG画像のコメントヘッダ。
EXIFIFD0のサブセクション。画像に関する詳細情報を含みます。これらのエントリのほとんどはデジカメに関する情報です。

オプションの第3引数配列には、各セクションの配列とするかどうかを指定します。 COMPUTED、THUMBNAIL、COMMENTのセクションは、これらのセクションに含まれる値の名前が他のセクションと衝突する可能性があるため、常に配列となります。

オプションの第4引数サムネイルTRUEを指定すると、サムネイル本体を読み込みます。 それ以外の場合は、タグ付きデータのみを読み込みます。

EXIFヘッダは、デジカメが作成したJPEG/TIFF画像によく含まれています。 しかしそのタグ付けの方法はメーカーによって異なるため、特定のEXIFヘッダが常に存在するというわけではありません。

EXIFヘッダに著作権情報が含まれている場合、それ自身には2つの値を含めることが可能です。 EXIF 2.10の子の矛盾した企画に対応するために、COMPUTEDセクションはCopyright.PhotographerおよびCopyright.Editorの両方を返します。 またIFD0セクションには2つのエントリをNULL文字で区切ったバイト配列を含めます。 データ型が間違っている場合は最初のエントリのみを返します。 COMPUTEDには、元の著作権文字列あるいは写真と編集者の著作権表示(カンマ区切り)のいずれかをCopyrightエントリに含めることが可能です。

UserCommentタグにもCopyrightタグと同様の問題があります。 UserCommentタグには、使用しているエンコーディングと値の2つを値として格納することができます。 IFDセクションにはエンコーディングのみを含めるか、あるいはバイト配列を格納することになります。 COMPUTEDセクションは、UserCommentEncodingおよびUserCommentを両方格納することができます。 UserCommentはどちらの場合も有効なので、IFD0セクションではこちらを優先すべできです。

この関数は、EXIF仕様(PDF)に基づいてEXIFデータタグの検証も行います。

Windows ME/XPでは、カメラ接続時に、EXIFヘッダを書き換えることができます。 詳細は、Notice for Canon Digital Camera User Eをご覧ください。

<?
$exif exif_read_data('/content/img/b0010915_010871.jpg');

        $emake =$exif_data['Make'];
        $emodel $exif_data['Model'];
        $eexposuretime $exif_data['ExposureTime'];
        $efnumber $exif_data['FNumber'];
        $eiso $exif_data['ISOSpeedRatings'];
        $edate $exif_data['DateTime'];
?>
<?
echo "b0010915_010871.jpg:<br>\n";
$exif exif_read_data('/content/img/b0010915_010871.jpg''IFD0');
echo $exif===false "No header data found.<br>\n" "Image contains headers<br>\n";

$exif exif_read_data('/content/img/b0010915_010871.jpg'0true);
echo "b0010915_010871.jpg:<br>\n";
foreach ($exif as $key => $section) {
    foreach ($section as $name => $val) {
        echo "$key.$name: $val<br>\n";
    }
}
/*
b0010915_010871.jpg:
Image contains headers
b0010915_010871.jpg:
FILE.FileName: b0010915_010871.jpg
FILE.FileDateTime: 1244274697
FILE.FileSize: 158295
FILE.FileType: 2
FILE.MimeType: image/jpeg
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS, INTEROP
COMPUTED.html: width="624" height="416"
COMPUTED.Height: 416
COMPUTED.Width: 624
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 0
COMPUTED.CCDWidth: 3mm
COMPUTED.ApertureFNumber: f/8.0
COMPUTED.UserComment:
COMPUTED.UserCommentEncoding: UNDEFINED
COMPUTED.Thumbnail.FileType: 2
COMPUTED.Thumbnail.MimeType: image/jpeg
IFD0.Make: Canon
IFD0.Model: Canon EOS 40D
IFD0.Orientation: 1
IFD0.XResolution: 3000000/10000
IFD0.YResolution: 3000000/10000
IFD0.ResolutionUnit: 2
IFD0.Software: Adobe Photoshop CS4 Windows
IFD0.DateTime: 2009:06:06 00:03:42
IFD0.YCbCrPositioning: 2
IFD0.Exif_IFD_Pointer: 232
IFD0.GPS_IFD_Pointer: 988
THUMBNAIL.Compression: 6
THUMBNAIL.XResolution: 72/1
THUMBNAIL.YResolution: 72/1
THUMBNAIL.ResolutionUnit: 2
THUMBNAIL.JPEGInterchangeFormat: 1102
THUMBNAIL.JPEGInterchangeFormatLength: 6563
EXIF.ExposureTime: 1/250
EXIF.FNumber: 8/1
EXIF.ExposureProgram: 3
EXIF.ISOSpeedRatings: 250
EXIF.ExifVersion: 0221
EXIF.DateTimeOriginal: 2009:06:05 07:39:59
EXIF.DateTimeDigitized: 2009:06:05 07:39:59
EXIF.ComponentsConfiguration: ・ス
EXIF.ShutterSpeedValue: 524288/65536
EXIF.ApertureValue: 393216/65536
EXIF.ExposureBiasValue: -1/3
EXIF.MeteringMode: 5
EXIF.Flash: 16
EXIF.FocalLength: 17/1
EXIF.UserComment: ・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス・ス
EXIF.SubSecTime: 26
EXIF.SubSecTimeOriginal: 26
EXIF.SubSecTimeDigitized: 26
EXIF.FlashPixVersion: 0100
EXIF.ColorSpace: 1
EXIF.ExifImageWidth: 624
EXIF.ExifImageLength: 416
EXIF.InteroperabilityOffset: 956
EXIF.FocalPlaneXResolution: 3888000/876
EXIF.FocalPlaneYResolution: 2592000/583
EXIF.FocalPlaneResolutionUnit: 2
EXIF.CustomRendered: 1
EXIF.ExposureMode: 0
EXIF.SceneCaptureType: 0
GPS.GPSVersion: ・ス・ス
INTEROP.InterOperabilityIndex: R98
INTEROP.InterOperabilityVersion: 0100
*/
?>

exif_tagname
インデックスに対応するヘッダ名を取得する

unknown

string exif_tagname ( int $画像のインデックス )

指定した画像のインデックスに対応するヘッダ名を返します。 画像のインデックスが未定義の場合はFALSEを返します。

exif_thumbnail
TIFF あるいは JPEG 形式の画像に埋め込まれたサムネイルを取得する

unknown

string exif_thumbnail ( string $ファイル名[, int &$幅[, int &$高さ[, int &$画像形式 ]]] )

TIFFあるいはJPEG画像に埋め込まれたサムネイルを返します。 画像にサムネイルが埋め込まれていない場合はFALSEを返します。 この関数を使用してサムネイルを出力する場合は、header()を使用して、mimetype情報を送信する必要があります。 この関数は画像を生成することはできませんが、そのサイズだけは取得できる可能性があります。 取得できた場合は、参照渡しの引数に格納されます。

第1引数ファイル名には、サムネイルが埋め込まれている画像ファイル名を指定します。

オプションの第2引数には、サムネイルの幅が格納されます。
オプションの第3引数高さには、サムネイルの高さが格納されます。

オプションの第4引数画像形式には、サムネイルの画像形式が格納されます。
TIFFあるいはJPEGのいずれかになります。

<?
# サムネイルを出力
$image exif_thumbnail('/content/img/b0010915_010871.jpg'$width$height$type);
if ($image!==false) {
   header('Content-type: ' .image_type_to_mime_type($type));
    echo $image;
    exit;
}
?>
<?
# サムネイルの情報を取得
$image exif_thumbnail('/content/img/b0010915_010871.jpg'$width$height$type);
if ($image!==false) {
    echo "幅: ".$width."<br>";
    echo "高さ: ".$height."<br>";
    echo "画像形式: ".$type."<br>";
}
/*
幅: 160
高さ: 107
画像形式: 2
*/
?>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop