EXIF 包含相機型號、光圈、快門、ISO、GPS 等拍攝參數。PHP 內建 exif_read_data() 可輕鬆解析,適用於相簿、攝影社群等場景。
<?php
$file = 'photo.jpg';
$exif = exif_read_data($file, 'IFD0'); // 僅讀取 IFD0 區段
if ($exif === false) {
echo "無 EXIF 標頭";
} else {
echo "包含 EXIF 資訊
";
print_r($exif);
}
// 完整讀取所有區段並以關聯陣列回傳
$exifFull = exif_read_data($file, null, true);
foreach ($exifFull as $section => $data) {
echo "<h3>$section</h3>";
foreach ($data as $key => $val) {
echo "$key: $val
";
}
}
?>
| 標籤 | 說明 |
|---|---|
| Make / Model | 相機廠商 / 型號 |
| DateTimeOriginal | 原始拍攝時間 |
| ExposureTime | 快門速度(秒) |
| FNumber | 光圈值 |
| ISOSpeedRatings | ISO 感光度 |
| FocalLength | 焦距(mm) |
| GPSLatitude / GPSLongitude | GPS 座標(度分秒) |
| Orientation | 旋轉方向(1=正常,6=順時針90°) |
<?php
function getGps($exif) {
if (!isset($exif['GPSLatitude'], $exif['GPSLongitude'])) return null;
$lat = convertDMS($exif['GPSLatitude'], $exif['GPSLatitudeRef']);
$lon = convertDMS($exif['GPSLongitude'], $exif['GPSLongitudeRef']);
return ['lat' => $lat, 'lon' => $lon];
}
function convertDMS($dms, $ref) {
// $dms 格式:[deg, min, sec] 皆為分數字串
$deg = eval("return $dms[0];");
$min = eval("return $dms[1];");
$sec = eval("return $dms[2];");
$decimal = $deg + $min/60 + $sec/3600;
return ($ref === 'S' || $ref === 'W') ? -$decimal : $decimal;
}
?>
php_exif.dll / exif.so 擴展,且編譯 PHP 時需加入 --enable-exif