在这个没图说个屁的年代,照片还是很重要的。如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 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 'http://ditu.google.cn/maps?q=('.$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]);
 
}

PHP获取照片exif信息的更多相关文章

  1. Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息

    1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...

  2. 照片EXIF信息的读取和改写的JAVA实现

    由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...

  3. Android 获取图片exif信息

    使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  4. 使用PHP获取图像文件的EXIF信息

    在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型.大小等,这些信息就称为 EXIF 信息.一般 JPG . TIFF 这类的图片文件都会 ...

  5. 利用php获取图片完整Exif信息类 获取图片详细完整信息类

    <?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...

  6. 用python 获取照片的Exif 信息(获取拍摄设备,时间,地点等信息)

    第一步:先安装 pip install exifread 第二部:上代码 import exifread import requests class PhotoExifInfo(): def __in ...

  7. IOS: 使用imageIO获取和修改图片的exif信息

    使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...

  8. 获取图片的EXIF信息

    对于专业的摄影师来说,Exif信息是很重要的信息,也包含了非常多的东西 1.EXIF EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照 ...

  9. 以最省内存的方式把大图片加载到内存及获取Exif信息和获取屏幕高度和宽度的新方法

    我们在加载图片时经常会遇到内存溢出的问题,图片太大,我们加载图片时,一般都是用的如下一般方法(加载本地图片): /** * 不作处理,去加载图片的方法,碰到比较大的图片会内存溢出 */ private ...

随机推荐

  1. JPEG文件格式

    格式:JFIF(JPEG档的交换格式)压缩:JPEG(灰阶影像压缩比约为10:1:彩色影像约为20:1)以JPEG文件格式保存的图像实际上是2个不同格式的混合物:JPEG格式规范本身,用来定义图像的压 ...

  2. 《DSP using MATLAB》 Problem 3.19

    先求模拟信号经过采样后,对应的数字角频率: 明显看出,第3种采样出现假频了.DTFT是以2π为周期的,所以假频出现在10π-2kπ=0处. 代码: %% ----------------------- ...

  3. Tensorflow中的tf.argmax()函数

    转载请注明出处:http://www.cnblogs.com/willnote/p/6758953.html 官方API定义 tf.argmax(input, axis=None, name=None ...

  4. 通过直接编码添加折线图到ChartControl

    https://documentation.devexpress.com/#WindowsForms/CustomDocument2976 ChartControl lineChart = new C ...

  5. Linux 性能工具安装部署

    docker 一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡 在yum的ELRepo源中,有mainline(4.5) ...

  6. nyoj 素数距离

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度 ...

  7. PHP双引号的隐患

    PHP很多语法特性会让攻击者有机可乘,例如PHP会检测双引号中的变量.执行如下代码: function test() { echo "abc"; } echo "${@t ...

  8. [C++ Primer] : 第10章: 泛型算法

    概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...

  9. 【python】if&&for&&while语句

    if语法:  类型一: if expression : if_suit else: else_suit 例如: adic={"name":"paulwinflo" ...

  10. Python网络爬虫-requests模块(II)

    有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/env ...