PHP实现显示照片exif信息的方法


Posted in PHP onJuly 11, 2014

PHP编程可实现显示照片EXIF信息,显示图片中缩略图效果,其代码如下:

<?
/**
* 获取图象信息的函数
* 一个全面获取图象信息的函数
* @access public
* @param string $img 图片路径
* @return array
*/
function GetImageInfoVal($ImageInfo,$val_arr) {
  $InfoVal  =  "未知";
  foreach($val_arr as $name=>$val) {
    if ($name==$ImageInfo) {
      $InfoVal  =  &$val;
      break;
    }
  }
  return $InfoVal;
}
function GetImageInfo($img) {
  $imgtype      =  array("", "GIF", "JPG", "PNG", "SWF", "PSD", "BMP", "TIFF(intel byte order)", "TIFF(motorola byte order)", "JPC", "JP2", "JPX", "JB2", "SWC", "IFF", "WBMP", "XBM");
  $Orientation    =  array("", "top left side", "top right side", "bottom right side", "bottom left side", "left side top", "right side top", "right side bottom", "left side bottom");
  $ResolutionUnit    =  array("", "", "英寸", "厘米");
  $YCbCrPositioning  =  array("", "the center of pixel array", "the datum point");
  $ExposureProgram  =  array("未定义", "手动", "标准程序", "光圈先决", "快门先决", "景深先决", "运动模式", "肖像模式", "风景模式");
  $MeteringMode_arr  =  array(
    "0"    =>  "未知",
    "1"    =>  "平均",
    "2"    =>  "中央重点平均测光",
    "3"    =>  "点测",
    "4"    =>  "分区",
    "5"    =>  "评估",
    "6"    =>  "局部",
    "255"  =>  "其他"
    );
  $Lightsource_arr  =  array(
    "0"    =>  "未知",
    "1"    =>  "日光",
    "2"    =>  "荧光灯",
    "3"    =>  "钨丝灯",
    "10"  =>  "闪光灯",
    "17"  =>  "标准灯光A",
    "18"  =>  "标准灯光B",
    "19"  =>  "标准灯光C",
    "20"  =>  "D55",
    "21"  =>  "D65",
    "22"  =>  "D75",
    "255"  =>  "其他"
    );
  $Flash_arr      =  array(
    "0"    =>  "flash did not fire",
    "1"    =>  "flash fired",
    "5"    =>  "flash fired but strobe return light not detected",
    "7"    =>  "flash fired and strobe return light detected",
    );
  
  $exif = exif_read_data ($img,"IFD0");
  if ($exif===false) {
    $new_img_info  =  array ("文件信息"    =>  "没有图片EXIF信息");
  }
  else
  {
    $exif = exif_read_data ($img,0,true);
    $new_img_info  =  array (
      "文件信息"    =>  "-----------------------------",
      "文件名"    =>  $exif[FILE][FileName],
      "文件类型"    =>  $imgtype[$exif[FILE][FileType]],
      "文件格式"    =>  $exif[FILE][MimeType],
      "文件大小"    =>  $exif[FILE][FileSize],
      "时间戳"    =>  date("Y-m-d H:i:s",$exif[FILE][FileDateTime]),
      "图像信息"    =>  "-----------------------------",
      "图片说明"    =>  $exif[IFD0][ImageDescription],
      "制造商"    =>  $exif[IFD0][Make],
      "型号"      =>  $exif[IFD0][Model],
      "方向"      =>  $Orientation[$exif[IFD0][Orientation]],
      "水平分辨率"  =>  $exif[IFD0][XResolution].$ResolutionUnit[$exif[IFD0][ResolutionUnit]],
      "垂直分辨率"  =>  $exif[IFD0][YResolution].$ResolutionUnit[$exif[IFD0][ResolutionUnit]],
      "创建软件"    =>  $exif[IFD0][Software],
      "修改时间"    =>  $exif[IFD0][DateTime],
      "作者"      =>  $exif[IFD0][Artist],
      "YCbCr位置控制"  =>  $YCbCrPositioning[$exif[IFD0][YCbCrPositioning]],
      "版权"      =>  $exif[IFD0][Copyright],
      "摄影版权"    =>  $exif[COMPUTED][Copyright.Photographer],
      "编辑版权"    =>  $exif[COMPUTED][Copyright.Editor],
      "拍摄信息"    =>  "-----------------------------",
      "Exif版本"    =>  $exif[EXIF][ExifVersion],
      "FlashPix版本"  =>  "Ver. ".number_format($exif[EXIF][FlashPixVersion]/100,2),
      "拍摄时间"    =>  $exif[EXIF][DateTimeOriginal],
      "数字化时间"  =>  $exif[EXIF][DateTimeDigitized],
      "拍摄分辨率高"  =>  $exif[COMPUTED][Height],
      "拍摄分辨率宽"  =>  $exif[COMPUTED][Width],
      /*
      The actual aperture value of lens when the image was taken.
      Unit is APEX.
      To convert this value to ordinary F-number(F-stop),
      calculate this value's power of root 2 (=1.4142).
      For example, if the ApertureValue is '5', F-number is pow(1.41425,5) = F5.6.
      */
      "光圈"      =>  $exif[EXIF][ApertureValue],
      "快门速度"    =>  $exif[EXIF][ShutterSpeedValue],
      "快门光圈"    =>  $exif[COMPUTED][ApertureFNumber],
      "最大光圈值"  =>  "F".$exif[EXIF][MaxApertureValue],
      "曝光时间"    =>  $exif[EXIF][ExposureTime],
      "F-Number"    =>  $exif[EXIF][FNumber],
      "测光模式"    =>  GetImageInfoVal($exif[EXIF][MeteringMode],$MeteringMode_arr),
      "光源"      =>  GetImageInfoVal($exif[EXIF][LightSource], $Lightsource_arr),
      "闪光灯"    =>  GetImageInfoVal($exif[EXIF][Flash], $Flash_arr),
      "曝光模式"    =>  ($exif[EXIF][ExposureMode]==1?"手动":"自动"),
      "白平衡"    =>  ($exif[EXIF][WhiteBalance]==1?"手动":"自动"),
      "曝光程序"    =>  $ExposureProgram[$exif[EXIF][ExposureProgram]],
      /*
      Brightness of taken subject, unit is APEX. To calculate Exposure(Ev) from BrigtnessValue(Bv), you must add SensitivityValue(Sv).
      Ev=Bv+Sv  Sv=log((ISOSpeedRating/3.125),2)
      ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32. 
      */
      "曝光补偿"    =>  $exif[EXIF][ExposureBiasValue]."EV",
      "ISO感光度"    =>  $exif[EXIF][ISOSpeedRatings],
      "分量配置"    =>  (bin2hex($exif[EXIF][ComponentsConfiguration])=="01020300"?"YCbCr":"RGB"),//'0x04,0x05,0x06,0x00'="RGB" '0x01,0x02,0x03,0x00'="YCbCr"
      "图像压缩率"  =>  $exif[EXIF][CompressedBitsPerPixel]."Bits/Pixel",
      "对焦距离"    =>  $exif[COMPUTED][FocusDistance]."m",
      "焦距"      =>  $exif[EXIF][FocalLength]."mm",
      "等价35mm焦距"  =>  $exif[EXIF][FocalLengthIn35mmFilm]."mm",
      /*
      Stores user comment. This tag allows to use two-byte character code or unicode. First 8 bytes describe the character code. 'JIS' is a Japanese character code (known as Kanji).
      '0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00':ASCII
      '0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00':JIS
      '0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00':Unicode
      '0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00':Undefined
      */
      "用户注释编码"  =>  $exif[COMPUTED][UserCommentEncoding],
      "用户注释"    =>  $exif[COMPUTED][UserComment],
      "色彩空间"    =>  ($exif[EXIF][ColorSpace]==1?"sRGB":"Uncalibrated"),
      "Exif图像宽度"  =>  $exif[EXIF][ExifImageLength],
      "Exif图像高度"  =>  $exif[EXIF][ExifImageWidth],
      "文件来源"    =>  (bin2hex($exif[EXIF][FileSource])==0x03?"digital still camera":"unknown"),
      "场景类型"    =>  (bin2hex($exif[EXIF][SceneType])==0x01?"A directly photographed image":"unknown"),
      "缩略图文件格式"  =>  $exif[COMPUTED][Thumbnail.FileType],
      "缩略图Mime格式"  =>  $exif[COMPUTED][Thumbnail.MimeType]
    );
  }
  return $new_img_info;
}

$innerhtml  =  "";
$exif  =  GetImageInfo($_GET['img']);
$innerhtml  .=  "<TABLE>";

foreach($exif as $name=>$val) {
  $innerhtml  .=  "<TR><TD>{$name}</TD><TD>{$val}</TD></TR>";
}

$innerhtml  .=  "<TR><TD colspan=\"2\">";
if ($_GET['img']) {
  $image = exif_thumbnail($_GET['img']);
} else {
  $image = false;
}
if ($image!==false) {
  $innerhtml  .=  "<img src=\"thumbnail.php?img=".$_GET['img']."\">";
} else {
  // no thumbnail available, handle the error here
  $innerhtml  .=  "No thumbnail available";
}

$innerhtml  .=  "</TD></TR></TABLE>";
?>
<html>
<head> 
<title>图片信息</title>
<meta http-equiv="Content-Type" content="text/html; charset=??????">
</head>
<body>
<SCRIPT>
<!--
//初始化内容值
parent.followTd<?=$_GET['r_id'];?>.innerHTML='<?=$innerhtml;?>';
//已读取
parent.document.images.followImg<?=$_GET['r_id'];?>.loaded='yes';
-->
</SCRIPT>
</body>
</html>
PHP 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php自动载入类用法实例分析
Jun 24 PHP
php处理复杂xml数据示例
Jul 11 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 #PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 #PHP
ThinkPHP标签制作教程
Jul 10 #PHP
YII路径的用法总结
Jul 09 #PHP
YII实现分页的方法
Jul 09 #PHP
YII模块实现绑定二级域名的方法
Jul 09 #PHP
yii操作cookie实例简介
Jul 09 #PHP
You might like
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php检测文件编码的方法示例
2014/04/25 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
js计数器代码
2006/11/04 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python如何读取MySQL数据库表数据
2017/03/11 Python
windows下python连接oracle数据库
2017/06/07 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
2015年司机年终工作总结
2015/05/14 职场文书
python关于集合的知识案例详解
2021/05/30 Python
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技