<?php
/**
* @Author: TonyLevid
* @Copyright: TonyLevid.com
* @Name: Image Exif Class
* @Version: 0.0.1
* 欢迎各位测试,如有BUG,请到网站留言
* I'm pleased if you are willing to test my Image Exif class,if bug exists,you can leave a message.
**/ //error_reporting(0); 不想让用户看到错误如果存在bug
header("content-type:text/html;charset=utf-8"); //如果在html页面已经设置编码,请删除此行
class imgExif{
public $imgPath;
public $unitFlag;
public $imgInfoAll;
public $imgInfoAllCN;
public $imgInfoCommon;
public $imgInfoBrief;
public $imgInfoAllCNUnit; /*构造函数,检测exif和mbstring模块是否开启*/
function __construct(){
extension_loaded('exif')&&extension_loaded('mbstring') or
die('exif module was not loaded,please check it in php.ini<br>NOTICE:On Windows,php_mbstring.dll must be before php_exif.dll');
} /*获取图片格式,返回图片格式信息
* 如果只获取图片格式信息,建议采用此方法
*
* @param $imgPath(必填,字符串),图片路径,不可为url。
* @param $MimeOrExifOrExtension(可选,字符串),获取图片格式为Mime类型或Exif类型或图片类型文件后缀。
* 如果为字符串'Mime',则获取Mime图片类型。
* 如果为字符串'Exif',则获取Exif图片类型。
* 如果为字符串'Extension',则获取图片类型的文件后缀。
* 如果填写参数异常或缺省,则默认获取Mime图片类型。
*/ function getImgtype($imgPath,$MimeOrExifOrExtension = null){
$exifImgtype = array(
'IMAGETYPE_GIF' => 1,
'IMAGETYPE_JPEG' => 2,
'IMAGETYPE_PNG' => 3,
'IMAGETYPE_SWF' => 4,
'IMAGETYPE_PSD' => 5,
'IMAGETYPE_BMP' => 6,
'IMAGETYPE_TIFF_II' => 7, //(Intel 字节顺序)
'IMAGETYPE_TIFF_MM' => 8, //(Motorola 字节顺序)
'IMAGETYPE_JPC' => 9,
'IMAGETYPE_JP2' => 10,
'IMAGETYPE_JPX' => 11,
'IMAGETYPE_JB2' => 12,
'IMAGETYPE_SWC' => 13,
'IMAGETYPE_IFF' => 14,
'IMAGETYPE_WBMP' => 15,
'IMAGETYPE_XBM' => 16
);
$exifType = array_search(exif_imagetype($imgPath),$exifImgtype);
$mimeType = image_type_to_mime_type(exif_imagetype($imgPath));
$extension = substr(image_type_to_extension(exif_imagetype($imgPath)),1);
if($MimeOrExifOrExtension){
if($MimeOrExifOrExtension === 'Mime'){
return $mimeType;
}
elseif($MimeOrExifOrExtension === 'Exif'){
return $exifType;
}
elseif($MimeOrExifOrExtension === 'Extension'){
return $extension;
}
else{
return $mimeType;
}
}
else{
return $mimeType;
}
} /*处理Exif信息*/
function imgInfo(){
$imgPath = $this->imgPath; $imgInfoAll = exif_read_data($imgPath,0,1);
foreach($imgInfoAll as $section => $arrValue){
foreach($arrValue as $key => $value){
$infoAllKey[] = $key;
$infoAllValue[] = $value;
}
}
$infoAll = array_combine($infoAllKey,$infoAllValue); $translate = array(
'FileName'=>'文件名',
'FileDateTime' => '文件修改时间',
'FileSize' => '文件大小',
'FileType' => 'Exif文件类型',
'MimeType' => 'Mime文件类型',
'SectionsFound' => '找到Sections',
'html' => 'html中图片宽高',
'Height' => '图片高度',
'Width' => '图片宽度',
'IsColor' => '是否彩色',
'ByteOrderMotorola' => '是否为Motorola字节顺序',
'ApertureFNumber' => '光圈数',
'Comments' => '作者注释',
'Author' => '作者',
'UserComment' => '用户注释',
'UserCommentEncoding' => '用户注释编码',
'Thumbnail.FileType' => '缩略图Exif文件类型',
'Thumbnail.MimeType' => '缩略图Mime文件类型',
'Make' => '制造商',
'Model' => '型号',
'Orientation' => '方向',
'XResolution' => '水平分辨率',
'YResolution' => '垂直分辨率',
'ResolutionUnit' => '分辨率单位',
'Software' => '创建软件',
'DateTime' => '最后修改时间',
'YCbCrPositioning' => 'YCbCr位置控制',
'Exif_IFD_Pointer' => 'Exif图像IFD的指针',
'Compression' => '压缩方式',
'JPEGInterchangeFormat' => 'JPEG SOI偏移',
'JPEGInterchangeFormatLength' => 'JPEG数据字节',
'ExposureTime' => '曝光时间',
'FNumber' => '焦距比数',
'ExposureProgram' => '曝光程序',
'ISOSpeedRatings' => 'ISO感光度',
'ExifVersion' => 'Exif版本',
'DateTimeOriginal' => '拍摄时间',
'DateTimeDigitized' => '数字化时间',
'ComponentsConfiguration' => '分量配置',
'CompressedBitsPerPixel' => '图像压缩率',
'ExposureBiasValue' => '曝光补偿',
'MaxApertureValue' => '最大光圈值',
'MeteringMode' => '测光模式',
'LightSource' => '光源',
'Flash' => '闪光灯',
'FocalLength' => '焦距',
'SubSecTime' => '亚秒时间',
'SubSecTimeOriginal' => '亚秒级拍摄时间',
'SubSecTimeDigitized' => '亚秒级数字化时间',
'FlashPixVersion' => 'FlashPix版本',
'ColorSpace' => '色彩空间',
'ExifImageWidth' => 'Exif图片宽度',
'ExifImageLength' => 'EXif图片高度',
'InteroperabilityOffset' => 'IFD格式数据偏移量',
'SensingMethod' => '彩色区域传感器类型',
'FileSource' => '图片像源',
'SceneType' => '场景类型',
'CFAPattern' => '滤波阵列图案',
'CustomRendered' => '自定义图像处理',
'ExposureMode' => '曝光模式',
'WhiteBalance' => '白平衡',
'DigitalZoomRatio' => '数位变焦倍率',
'FocalLengthIn35mmFilm' => '等价35mm焦距',
'SceneCaptureType' => '取景模式',
'GainControl' => '增益控制',
'Contrast' => '对比度',
'Saturation' => '饱和度',
'Sharpness' => '清晰度',
'SubjectDistanceRange' => '对焦距离',
'InterOperabilityIndex' => 'InterOperability指数',
'InterOperabilityVersion' => 'InterOperability版本'
); @$translate_unit = array(
'文件名' => $infoAll['FileName'],
'文件修改时间' => date('Y:m:d H:i:s',$infoAll['FileDateTime']),
'文件大小' => round($infoAll['FileSize']/1024) . 'kb',
'Exif文件类型' => $this->getImgtype($imgPath,'Exif'),
'Mime文件类型' => $infoAll['MimeType'],
'找到Sections' => $infoAll['SectionsFound'],
'html中图片宽高' => $infoAll['html'],
'图片高度' => $infoAll['Height'] . 'px',
'图片宽度' => $infoAll['Width'] . 'px',
'是否彩色' => $infoAll['IsColor'] == 1 ? '是' : '否',
'是否为Motorola字节顺序' => $infoAll['ByteOrderMotorola'] == 1 ? '是' : '否',
'光圈数' => $infoAll['ApertureFNumber'],
'作者注释' => $infoAll['Comments'],
'作者' => $infoAll['Author'],
'用户注释' => $infoAll['UserComment'],
'用户注释编码' => $infoAll['UserCommentEncoding'],
'缩略图Exif文件类型' => $this->getImgtype($imgPath,'Exif'),
'缩略图Mime文件类型' => $infoAll['Thumbnail.MimeType'],
'制造商' => $infoAll['Make'],
'型号' => $infoAll['Model'],
'方向' => array_search($infoAll['Orientation'],array(
'top left side' => 1,
'top right side' => 2,
'bottom right side' => 3,
'bottom left side' => 4,
'left side top' => 5,
'right side top' => 6,
'right side bottom' => 7,
'left side bottom' => 8
)),
'水平分辨率' => $infoAll['XResolution'],
'垂直分辨率' => $infoAll['YResolution'],
'分辨率单位' => array_search($infoAll['ResolutionUnit'],array(
'无单位' => 1,
'英寸' => 2,
'厘米' => 3
)),
'创建软件' => $infoAll['Software'],
'最后修改时间' => $infoAll['DateTime'],
'YCbCr位置控制' => $infoAll['YCbCrPositioning'] == 1 ? '像素阵列的中心' : '基准点',
'Exif图像IFD的指针' => $infoAll['Exif_IFD_Pointer'],
'压缩方式' => $infoAll['Compression'] == 6 ? 'jpeg压缩' : '无压缩',
'JPEG SOI偏移' => $infoAll['JPEGInterchangeFormat'],
'JPEG数据字节' => $infoAll['JPEGInterchangeFormatLength'],
'曝光时间' => $infoAll['ExposureTime'] . '秒',
'焦距比数' => $infoAll['FNumber'],
'曝光程序' => array_search($infoAll['ExposureProgram'],array(
'手动控制' => 1,
'程序控制' => 2,
'光圈优先' => 3,
'快门优先' => 4,
'景深优先' => 5,
'运动模式' => 6,
'肖像模式' => 7,
'风景模式' => 8
)),
'ISO感光度' => $infoAll['ISOSpeedRatings'],
'Exif版本' => $infoAll['ExifVersion'],
'拍摄时间' => $infoAll['DateTimeOriginal'],
'数字化时间' => $infoAll['DateTimeDigitized'],
'分量配置' => $infoAll['ComponentsConfiguration'],
'图像压缩率' => $infoAll['CompressedBitsPerPixel'],
'曝光补偿' => $infoAll['ExposureBiasValue'] . '电子伏特',
'最大光圈值' => $infoAll['MaxApertureValue'],
'测光模式' => array_search($infoAll['MeteringMode'],array(
'未知' => 0,
'平均' => 1,
'中央重点平均测光' => 2,
'点测' => 3,
'分区' => 4,
'评估' => 5,
'局部' => 6,
'其他' => 255
)),
'光源' => array_search($infoAll['LightSource'],array(
'未知' => 0,
'日光灯' => 1,
'荧光灯' => 2,
'钨丝灯' => 3,
'闪光灯' => 10,
'标准灯光A' => 17,
'标准灯光B' => 18,
'标准灯光C' => 19,
'D55' => 20,
'D65' => 21,
'D75' => 22,
'其他' => 255,
)),
'闪光灯' => array_search($infoAll['Flash'],array(
'闪光灯未闪光' => 0,
'闪光灯已闪光' => 1,
'闪光灯已闪光但频闪观测器未检测到返回光源' => 5,
'闪光灯已闪光,频闪观测器检测到返回光源' => 7
)),
'焦距' => $infoAll['FocalLength'] . '毫米',
'亚秒时间' => $infoAll['SubSecTime'],
'亚秒级拍摄时间' => $infoAll['SubSecTimeOriginal'],
'亚秒级数字化时间' => $infoAll['SubSecTimeDigitized'],
'FlashPix版本' => $infoAll['FlashPixVersion'],
'色彩空间' => $infoAll['ColorSpace'] == 1 ? 'sRGB' : 'Uncalibrated',
'Exif图片宽度' => $infoAll['ExifImageWidth'] . 'px',
'EXif图片高度' => $infoAll['ExifImageLength'] . 'px',
'IFD格式数据偏移量' => $infoAll['InteroperabilityOffset'],
'彩色区域传感器类型' => $infoAll['SensingMethod'] == 2 ? '单色区传感器' : '其他',
'图片像源' => $infoAll['FileSource'] == '0x03' ? '数码相机' : '其他',
'场景类型' => $infoAll['SceneType'] == '0x01' ? '直接拍摄' : '其他',
'滤波阵列图案' => $infoAll['CFAPattern'],
'自定义图像处理' => $infoAll['CustomRendered'],
'曝光模式' => $infoAll['CustomRendered'] == 1 ? '手动' : '自动',
'白平衡' => $infoAll['WhiteBalance'] == 1 ? '手动' : '自动',
'数位变焦倍率' => $infoAll['DigitalZoomRatio'],
'等价35mm焦距' => $infoAll['FocalLengthIn35mmFilm'] . '毫米',
'取景模式' => array_search($infoAll['SceneCaptureType'],array(
'自动' => 0,
'肖像场景' => 1,
'景观场景' => 2,
'运动场景' => 3,
'夜景' => 4,
'自动曝光' => 5,
'光圈优先自动曝光' => 256,
'快门优先自动曝光' => 512,
'手动曝光' => 768,
)),
'增益控制' => $infoAll['GainControl'],
'对比度' => array_search($infoAll['Contrast'],array(
'低' => -1,
'普通' => 0,
'高' => 1
)),
'饱和度' => array_search($infoAll['Saturation'],array(
'低' => -1,
'普通' => 0,
'高' => 1
)),
'清晰度' => array_search($infoAll['Sharpness'],array(
'低' => -1,
'普通' => 0,
'高' => 1
)),
'对焦距离' => array_search($infoAll['SubjectDistanceRange'],array(
'未知' => 0,
'微距' => 1,
'近景' => 2,
'远景' => 3
)),
'InterOperability指数' => $infoAll['InterOperabilityIndex'],
'InterOperability版本' => $infoAll['InterOperabilityVersion']
); $infoAllCNKey = array_keys($translate);
$infoAllCNName = array_values($translate);
foreach($infoAllCNKey as $value){
@$infoAllCNValue[] = $infoAll[$value];
}
$infoAllCNUnit = array_combine($infoAllCNName,array_values($translate_unit));
$infoAllCN = array_combine($infoAllCNName,$infoAllCNValue);
$infoCommon = array(
$translate['FileName'] => $infoAll['FileName'],
$translate['DateTimeOriginal'] => $infoAll['DateTimeOriginal'],
$translate['MimeType'] => $infoAll['MimeType'],
$translate['Width'] => $infoAll['Width'],
$translate['Height'] => $infoAll['Height'],
$translate['Comments'] => $infoAll['Comments'],
$translate['Author'] => $infoAll['Author'],
$translate['Make'] => $infoAll['Make'],
$translate['Model'] => $infoAll['Model'],
$translate['CompressedBitsPerPixel'] => $infoAll['CompressedBitsPerPixel'],
$translate['ExposureBiasValue'] => $infoAll['ExposureBiasValue'],
$translate['MaxApertureValue'] => $infoAll['MaxApertureValue'],
$translate['MeteringMode'] => $infoAll['MeteringMode'],
$translate['LightSource'] => $infoAll['LightSource'],
$translate['Flash'] => $infoAll['Flash'],
$translate['FocalLength'] => $infoAll['FocalLength'],
$translate['SceneType'] => $infoAll['SceneType'],
$translate['CFAPattern'] => $infoAll['CFAPattern'],
$translate['CustomRendered'] => $infoAll['CustomRendered'],
$translate['ExposureMode'] => $infoAll['ExposureMode'],
$translate['WhiteBalance'] => $infoAll['WhiteBalance'],
$translate['DigitalZoomRatio'] => $infoAll['DigitalZoomRatio'],
$translate['FocalLengthIn35mmFilm'] => $infoAll['FocalLengthIn35mmFilm'],
$translate['SceneCaptureType'] => $infoAll['SceneCaptureType'],
$translate['GainControl'] => $infoAll['GainControl'],
$translate['Contrast'] => $infoAll['Contrast'],
$translate['Saturation'] => $infoAll['Saturation'],
$translate['Sharpness'] => $infoAll['Sharpness'],
$translate['SubjectDistanceRange'] => $infoAll['SubjectDistanceRange'],
$translate['Software'] => $infoAll['Software'],
$translate['DateTime'] => $infoAll['DateTime'],
$translate['FileSize'] => $infoAll['FileSize']
);
foreach($infoCommon as $cKey => $cKalue){
$infoCommonUnitKeys[] = $cKey;
$infoCommonUnitValues[] = $translate_unit[$cKey];
}
$infoCommonUnit = array_combine($infoCommonUnitKeys,$infoCommonUnitValues); $infoBrief = array(
$translate['FileName'] => $infoAll['FileName'],
$translate['Width'] => $infoAll['Width'],
$translate['Height'] => $infoAll['Height'],
$translate['DateTimeOriginal'] => $infoAll['DateTimeOriginal'],
$translate['Make'] => $infoAll['Make'],
$translate['Model'] => $infoAll['Model'],
$translate['MimeType'] => $infoAll['MimeType']
);
foreach($infoBrief as $bKey => $bValue){
$infoBriefUnitKeys[] = $bKey;
$infoBriefUnitValues[] = $translate_unit[$bKey];
}
$infoBriefUnit = array_combine($infoBriefUnitKeys,$infoBriefUnitValues); $this->imgInfoAll = $infoAll;
$this->imgInfoAllCN = $infoAllCN;
$this->imgInfoAllCNUnit = $infoAllCNUnit;
$this->imgInfoCommon = $this->unitFlag ? $infoCommonUnit : $infoCommon;
$this->imgInfoBrief = $this->unitFlag ? $infoBriefUnit : $infoBrief;
} /*获取图片Exif信息,返回Exif信息一维数组
*
* @param $imgPath(必填,字符串),图片路径,不可为url。
* @param $iChoice(可选,字符串或一维数组)
* 此参数内置了三种模式:
* 如果为字符串'All',则获取所有信息;
* 如果为字符串'Common',则获取常用信息;
* 如果为字符串'Brief',则获取简要信息。
* 用户可以自定义数组获取精确的信息,如array('图片宽度','图片高度'),则获取图片宽度和高度。
* 对于异常输入或缺省,则自动获取简要信息。
* @param $showUnit(可选,字符串),只要不为null,则获取已经转换后的值,否则获取未转换后的值。
*/
function getImgInfo($imgPath,$iChoice = null,$showUnit = null){
$this->imgPath = $imgPath;
$this->unitFlag = $showUnit;
$this->imgInfo();
$this->imgInfoAllCN = $showUnit ? $this->imgInfoAllCNUnit : $this->imgInfoAllCN;
if($iChoice){
if(is_string($iChoice)){
if($iChoice === 'All'){
return $this->imgInfoAllCN;
}
elseif($iChoice === 'AllUnit'){
return $this->imgInfoAllCN;
}
elseif($iChoice === 'Common'){
return $this->imgInfoCommon;
}
elseif($iChoice === 'Brief'){
return $this->imgInfoBrief;
}
else{
return $this->imgInfoBrief;
}
}
elseif(is_array($iChoice)){
foreach($iChoice as $value){
$arrCustomValue[] = $this->imgInfoAllCN[$value];
}
$arrCustom = array_combine($iChoice,$arrCustomValue) or die('Ensure the array $iChoice values match $infoAll keys!');
return $arrCustom;
}
else{
return $this->imgInfoBrief;
}
}
else{
return $this->imgInfoBrief;
}
}
} //示例,同时检测脚本执行时间 function exeTime(){
$micro = microtime();
list($usec,$sec) = explode(' ',$micro);
return ($sec + $usec);
} $start = exeTime(); $i = new imgExif();
//echo '<font color=\'blue\'>图片格式:' . $i->getImgtype('12.jpg','Extension') . '<br><br></font>';
$arr = $i->getImgInfo('12.jpg','All','1');
foreach($arr as $key => $value){
echo $key . ': ' . $value . '<br>';
} $end = exeTime();
echo '<br><font color=\'red\'>脚本执行时间:' . ($end - $start) . '<br></font>'; ?>

利用php获取图片完整Exif信息类 获取图片详细完整信息类的更多相关文章

  1. 在Android下通过ExifInterface类操作图片的Exif信息

    什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...

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

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

  3. C# 获取图片的EXIF 信息

    关于 EXIF 信息的介绍. 1  EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写.EXIF是一种图像文件格式,只是文件的后缀名为jpg.EXIF信息是由数码相 ...

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

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

  5. js获取图片的EXIF,解决图片旋转问题

    相信大家在做项目的时候会遇到在canvas里加入图片时,图片发生90°,180°的旋转.当时的你肯定时懵逼的,为毛. 其实这就是图片的EXIF搞的鬼. 什么是EXIF 简单来说,Exif 信息就是由数 ...

  6. 使用Java程序读取JPG Tif等格式图片的exif信息

    package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...

  7. 用C#读取图片的EXIF信息的方法

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

  8. 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...

  9. Excel催化剂开源第36波-图片Exif信息提取,速度超快,信息超全

    Excel催化剂在文件处理方面,功能做到极致,但其实很大功劳都是引用一些开源社区的轮子库,不敢独占好处,此篇给大家分享下抓取图片的Exif信息的好用的轮子. 此篇对应的Excel催化剂功能实现:第83 ...

随机推荐

  1. console.read()读入的内容

    今天写的特别简单的代码,大体是一个模式选择,从控制台读入一个数,然后做出相应的选择. 代码如下: using System; using System.Collections.Generic; usi ...

  2. [poj 2186]Popular Cows[Tarjan强连通分量]

    题意: 有一群牛, a会认为b很帅, 且这种认为是传递的. 问有多少头牛被其他所有牛认为很帅~ 思路: 关键就是分析出缩点之后的有向树只能有一个叶子节点(出度为0). 做法就是Tarjan之后缩点统计 ...

  3. jquery判断文本域长度

    <div id="result">您还可以输入100字</div> <textarea name="content" id=&qu ...

  4. ASP.NET MVC- JSON ,Jquery, State management and Asynch controllers

    一.JSON  MVC And JQuery In case you are new to JSON please read this before moving ahead with this la ...

  5. linux jmail乱码

    在Windows 里面,标题和内容都正常, 在linux里面,--- 1.字符串 more /etc/sysconfig/i18n   export LANG=en_US.UTF-8 ====默认是e ...

  6. ubuntu12.04的vim配置

    ubuntu12.04中使用的vim的版本不支持像语法高亮和文件类型检测等配置 #sudo apt-get install vim vim默认的配置使用起来还不能让人满意,还需要自己配置默认配置文件是 ...

  7. oracle pde文件导入

    pde使用pl/sql developer的tools->import tables->pl/sql developer来导入

  8. Calendar类的基本使用

    import java.util.Calendar; public class CalendarDemo{ public static void main(String[] args) { Calen ...

  9. FileFilter, FilenameFilter用法和文件排序

    FileFilter和FilenameFilter这两个类的用法都很简单,都只有一个方法 FileFilter /*** @param pathname The abstract pathname t ...

  10. Github + Hexo 搭建博客

    服务加速 brew 加速 http://blog.suconghou.cn/post/homebrew-speedup/ github加速 http://www.selfrebuild.net/201 ...