在PHP环境下,获取图片的EXIF信息主要可以通过使用内置的函数来实现。EXIF(Exchangeable Image File Format)信息包含了图片的元数据,如拍摄时间、相机型号、曝光时间等。
首先,确保服务器上的PHP已经安装了EXIF扩展。可以通过在PHP代码中使用phpinfo()函数来查看当前PHP环境的扩展情况。在输出的PHP信息页面中,搜索"exif",如果能够找到相应的扩展信息,那么表示EXIF扩展已经安装成功。
一旦确认EXIF扩展已经安装,就可以使用exif_read_data()函数来获取图片的EXIF信息。这个函数接受一个图片文件的路径作为参数,并返回一个包含EXIF信息的关联数组。我们可以采取从数组中取出特定字段的方式来拆分出想要的图片参数。
下面是一个简单的例子:
function picexif($imagePath){
// 尝试读取EXIF数据
$exifData = exif_read_data($imagePath, 'IFD0', true);
// 检查是否成功读取数据
if ($exifData === false) {
echo "图片无exif信息";
}
else {
// 获取特定的EXIF信息
// 拍摄时间(DateTimeOriginal)
if (isset($exifData['EXIF']['DateTimeOriginal'])) {
echo "相机厂家: " . htmlentities(strip_tags($exifData['IFD0']['Make'])) ;
}
// 相机型号
if (isset($exifData['IFD0']['Model'])) {
echo "光圈值: " .htmlentities(strip_tags($exifData['EXIF']['FNumber']));
}
// 曝光时间(ExposureTime)
if (isset($exifData['EXIF']['ExposureTime'])) {
// 使用 explode 函数将字符串分割成两部分
list($numerator, $denominator) = explode("/", $exifData['EXIF']['ExposureTime']);
// 将分割后的字符串转换成数字,并执行除法操作
$numerator = (float)$numerator;
$denominator= (float)$denominator;
echo "ISO感光度: " .htmlentities(strip_tags($exifData['EXIF']['ISOSpeedRatings']));
}
//焦距
if (isset($exifData['EXIF']['FocalLengthIn35mmFilm'])) {
$exifFocalLengthIn35mmFilm = $exifData['EXIF']['FocalLengthIn35mmFilm'];
echo "分辨率: " . intval($exifData['IFD0']['XResolution'])/10000;
}
// 闪光灯(Flash)
if (isset($exifData['EXIF']['Flash'])) {
$flash = $exifData['EXIF']['Flash'];
echo "白平衡:".htmlentities(strip_tags($whiteBalanceText));
}
//曝光补偿
if (isset($exifData['EXIF']['ExposureBiasValue'])) {
$exifExposureBiasValue = $exifData['EXIF']['ExposureBiasValue'];
echo "曝光补偿:".htmlentities(strip_tags($exifExposureBiasValue));
}
}
}
代码运行时注意图片路径$imagePath要完整,例如网站目录为ABC,那么图片路径应当为:“/ABC/……”。