在这个没图说个屁的年代,照片还是很重要的。如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 PHP获取照片exif信息,重要的是 获取图片的GPS信息,如果再加上 google maps API 的话,就可以轻松得到位置信息
<?php
if
(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
);
echo
'('
.
$data
[
'latitude'
].
','
.
$data
[
'longitude'
].
')'
;
}
/*
取得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]);
}
posted on 2013-07-10 15:06 阅读( ...) 评论( ...)