博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP获取照片exif信息
阅读量:4692 次
发布时间:2019-06-09

本文共 2517 字,大约阅读时间需要 8 分钟。

 

在这个没图说个屁的年代,照片还是很重要的。如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 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 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/ldms/p/3182204.html

你可能感兴趣的文章
深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
查看>>
asp.net 页面ajax访问被阻塞
查看>>
word2vec 数学原理
查看>>
Python Day6
查看>>
[Tyvj 模拟赛] 运
查看>>
Pwn-10月25-Hitcon(三)
查看>>
Android欢迎页短暂白屏
查看>>
一个自定义的C#数据库操作基础类 SqlHelper
查看>>
scau 8633 回文划分
查看>>
1057 Stack (分块思想)
查看>>
llvm
查看>>
nginx日志的监控【转】
查看>>
整理一些css在使用中的小技巧(进行中)
查看>>
20150914-构建之法:现代软件工程-阅读笔记
查看>>
抽象类和接口的区别
查看>>
JS生成随机的字母数字组合的字符串
查看>>
Java Class的文件结构
查看>>
[jQuery] form提交到iframe之后,获取iframe里面内容
查看>>
js new到底干了什么,new的意义是什么?
查看>>
MyBatis 基础知识
查看>>