デジタルカメラで撮影した写真から撮影情報を取得したい場合、みなさんはどのようにして行いますか。PHPのExif拡張モジュールを用いてExif関数を使用するというのが一般的かもしれませんが、今回はPHPのみで実装されたExif情報を操作するライブラリ「PEL」を紹介します。
PELはExif情報を操作するライブラリでPHPのみで実装されていて、PHP5の環境で使用することができます。また、Exif情報の読み込みはもちろんのこと追加変更をすることも可能です。
では早速使ってみることにしましょう。このライブラリは以下のURLからダウンロードすることができます。
http://pel.sourceforge.net/
デジタルカメラで撮影した写真を用意し、下記スクリプトのファイル名部分を変更して実行してください。
<?php
require_once('pel-0.9.1/PelJpeg.php');
$file = "ファイル名";
$jpeg = new PelJpeg($file);
$app1 = $jpeg->getExif();
if ($app1) {
$tiff = $app1->getTiff();
$ifd0 = $tiff->getIfd();
if ($ifd0) {
$exif = $ifd0->getSubIfd(PelIfd::EXIF);
$data['exif_version'] =
$exif->getEntry(PelTag::EXIF_VERSION)->getText(); // Exifバージョン
$data['pixel_x'] =
$exif->getEntry(PelTag::PIXEL_X_DIMENSION)->getValue(); // 幅
$data['pixel_x'] =
$exif->getEntry(PelTag::PIXEL_X_DIMENSION)->getValue(); // 幅
$data['pixel_y'] =
$exif->getEntry(PelTag::PIXEL_Y_DIMENSION)->getValue(); // 高
$data['date_time_original'] =
$exif->getEntry(PelTag::DATE_TIME_ORIGINAL)->getText(); // オリジナルの作成日時
$data['make'] =
$ifd0->getEntry(PelTag::MAKE)->getText(); // メーカー
$data['model'] =
$ifd0->getEntry(PelTag::MODEL)->getText(); // モデル
$data['fnumber'] =
$exif->getEntry(PelTag::FNUMBER)->getValue(); // 絞り値
$data['exposure_time'] =
$exif->getEntry(PelTag::EXPOSURE_TIME)->getValue(); // 露出時間
$data['iso_speed_ratings'] =
$exif->getEntry(PelTag::ISO_SPEED_RATINGS)->getValue(); // ISO速度
$data['exposure_bias'] =
$exif->getEntry(PelTag::EXPOSURE_BIAS_VALUE)->getValue(); // 露出補正
$data['focal_length'] =
$exif->getEntry(PelTag::FOCAL_LENGTH)->getValue(); // 焦点距離
}
var_dump($data);
}
その写真ファイルにExif情報が埋め込まれている場合、そのバージョンや撮影日時、カメラのメーカーや機種、絞り値、焦点距離等々が表示されると思います。
また、先の紹介でもふれましたがこのライブラリはExif情報を追加変更することも可能です。
<?php
require_once('pel-0.9.1/PelJpeg.php');
$filename = "DSC_3297.JPG";
$jpeg = new PelJpeg($filename);
$app1 = $jpeg->getExif();
if ($app1) {
$tiff = $app1->getTiff();
$ifd0 = $tiff->getIfd();
if ($ifd0) {
$exif = $ifd0->getSubIfd(PelIfd::EXIF);
$text = "コメントです";
$entry = $exif->getEntry(PelTag::USER_COMMENT);
if (!$entry) {
$entry = new PelEntryUserComment(mb_convert_encoding($text, "JIS",
"auto"), "JIS");
$exif->addEntry($entry);
} else {
$entry->setValue(mb_convert_encoding($text, "JIS", "auto"), "JIS");
}
file_put_contents($filename, $jpeg->getBytes());
}
}
上記サンプルスクリプトでは「UserComment」タグを追加しコメントを追加しています。写真ファイルに変更したいExifタグが存在しない場合はaddEntryメソッドで追加し、すでに存在している場合はsetValueメソッドで値を変更しています。
Exif情報の表示と追加変更を簡単に紹介しました。サポートしているExifタグ等はPELのサイトを参照してください。PHPに用意されているExif関数より高機能なPEL、興味のある方は使ってみてはいかがでしょうか。
(アシアル 熊谷裕志)
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。