PHP获取照片exif信息
在这个没图说个屁的年代,照片还是很重要的。如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 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
);
}
/*
取得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]);
}
PHP获取照片exif信息的更多相关文章
- Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息
1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...
- 照片EXIF信息的读取和改写的JAVA实现
由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...
- Android 获取图片exif信息
使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...
- 使用PHP获取图像文件的EXIF信息
在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型.大小等,这些信息就称为 EXIF 信息.一般 JPG . TIFF 这类的图片文件都会 ...
- 利用php获取图片完整Exif信息类 获取图片详细完整信息类
<?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...
- 用python 获取照片的Exif 信息(获取拍摄设备,时间,地点等信息)
第一步:先安装 pip install exifread 第二部:上代码 import exifread import requests class PhotoExifInfo(): def __in ...
- IOS: 使用imageIO获取和修改图片的exif信息
使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...
- 获取图片的EXIF信息
对于专业的摄影师来说,Exif信息是很重要的信息,也包含了非常多的东西 1.EXIF EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照 ...
- 以最省内存的方式把大图片加载到内存及获取Exif信息和获取屏幕高度和宽度的新方法
我们在加载图片时经常会遇到内存溢出的问题,图片太大,我们加载图片时,一般都是用的如下一般方法(加载本地图片): /** * 不作处理,去加载图片的方法,碰到比较大的图片会内存溢出 */ private ...
随机推荐
- CTF之猪圈密码
猪圈密码又称济会密码,朱高密码,是一种简单的替代密码,所以安全性很低
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...
- mysql query 条件中为空时忽略
☆. q.ques_group传入为null或''的时候不查询此条件: value AND (q.ques_group = :quesGroup or :quesGroup is null or :q ...
- Microsoft - Find Biggest Node
public Node findBiggest (Node n1, Node n2){ Node c1 = n1; Node c2 = n2; boolean isPositive = false; ...
- IE7下对某些seajs压缩文件不兼容的解决方法
seajs.config({ comboExcludes: /common.js/ }) (杨磊哥提供)
- stenciljs 学习九 使用jsx
可以使用jsx 方便组件的开发 基本格式 主要是render 函数 class MyComponent { render() { return ( <div> <h1>Hell ...
- Ritchie Lawrence 批处理函数库中英文版
可以到这个网址去看看,如果你是注册用户,还可以下载到bat的很多函数库,具体地址如下: http://www.bathome.net/viewthread.php?tid=3056&extra ...
- JS替换空格回车换行符
JS替换空格回车换行符 str=str.replace(/\r/g," ") str=str.replace(/\n/g,"<br />") 或 ...
- EasyPHP-Devserver-17的坑位
mysql登陆错误:error: 'Plugin '*2A8AF30E682613A2F1CE1E28BA11D8560B294DCE' is not loaded' http://stackover ...
- Jenkins系列之Jenkins的安装
我们在进行自动化测试的时候通常我们都会进行持续集成,可以帮助我们持续集成的工具有很多,我个人比较喜欢用Jenkins. 主要是因为它有如下优点: 开源免费 跨平台,支持所有的平台 web形式的可视化的 ...