在这个没图说个屁的年代,照片还是很重要的。如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 PHP获取照片exif信息,重要的是 获取图片的GPS信息,如果再加上 google maps API 的话,就可以轻松得到位置信息
<?phpif(function_exists('exif_read_data'))
{ $exif=exif_read_data('./test/test1.jpg'); //图片地址
//var_dump($exif);
//echo $data['timeline']=$exif['DateTimeOriginal'];
$data['size']=$size=$exif['FileSize']/1024;
if($size>1024)
{
//单位为MB
//echo ceil($size/1024).'MB<br>';
}else{
//单位为KB
//echo ceil($size).'KB<br>'; }
//设备信息
$data['device']=$exif['Make'].''.$exif['Model'];
if($exif['GPSLatitudeRef']=='N'&&$exif['GPSLongitudeRef']=='E')
{
//地图坐标信息
//纬度
$data['latitude'] = getGps($exif['GPSLatitude'],$exif['GPSLongitudeRef']);
//经度
$data['longitude'] = getGps($exif['GPSLongitude'],$exif['GPSLongitudeRef']);
}
//eval('echo 1+3;');
var_dump($data);
}/*取得EXIF的內容$exif = exif_read_data('my.jpg', 0, true);$latitude = $exif['GPS']['GPSLatitude']; //经度$longitude = $exif['GPS']['GPSLongitude']; //纬度都是各有三個个元素的array 各代表度,分,秒把上面2个值分别调用如下方法,就可以得到gps经纬度了 $banqiu = $exif['GPS'][GPSLatitudeRef]
或者
$banqiu = $exif['GPS'][GPSLongitudeRef]
*/
function getGps($exifCoord,$banqiu)
{$degrees= count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
$minutes= count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
$seconds= count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
//normalize$minutes+= 60 * ($degrees- floor($degrees));
$degrees= floor($degrees);
$seconds+= 60 * ($minutes- floor($minutes));
$minutes= floor($minutes);
//extra normalization, probably not necessary unless you get weird data
if($seconds>= 60)
{$minutes+= floor($seconds/60.0);
$seconds-= 60*floor($seconds/60.0);
} if($minutes>= 60)
{$degrees+= floor($minutes/60.0);
$minutes-= 60*floor($minutes/60.0);
} $lng_lat = $degrees + $minutes/60 + $seconds/60/60;
if(strtoupper($banqiu) == 'W' || strtoupper($banqiu) == 'S'){
//如果是南半球 或者 西半球 乘以-1
$lng_lat = $lng_lat * -1;
}
return $lng_lat;
//return array('degrees'=> $degrees, 'minutes'=> $minutes, 'seconds'=> $seconds);
}/*取得EXIF的內容分数 转 小数*/function gps2Num($coordPart)
{$parts= explode('/', $coordPart);
if(count($parts) <= 0)
return 0;
if(count($parts) == 1)
return $parts[0];
return floatval($parts[0]) / floatval($parts[1]);
}