利用php获取图片完整Exif信息类 获取图片详细完整信息类
<?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信息类 获取图片详细完整信息类的更多相关文章
- 在Android下通过ExifInterface类操作图片的Exif信息
什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...
- IOS: 使用imageIO获取和修改图片的exif信息
使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...
- C# 获取图片的EXIF 信息
关于 EXIF 信息的介绍. 1 EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写.EXIF是一种图像文件格式,只是文件的后缀名为jpg.EXIF信息是由数码相 ...
- 使用PHP获取图像文件的EXIF信息
在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型.大小等,这些信息就称为 EXIF 信息.一般 JPG . TIFF 这类的图片文件都会 ...
- js获取图片的EXIF,解决图片旋转问题
相信大家在做项目的时候会遇到在canvas里加入图片时,图片发生90°,180°的旋转.当时的你肯定时懵逼的,为毛. 其实这就是图片的EXIF搞的鬼. 什么是EXIF 简单来说,Exif 信息就是由数 ...
- 使用Java程序读取JPG Tif等格式图片的exif信息
package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...
- 用C#读取图片的EXIF信息的方法
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...
- Excel催化剂开源第36波-图片Exif信息提取,速度超快,信息超全
Excel催化剂在文件处理方面,功能做到极致,但其实很大功劳都是引用一些开源社区的轮子库,不敢独占好处,此篇给大家分享下抓取图片的Exif信息的好用的轮子. 此篇对应的Excel催化剂功能实现:第83 ...
随机推荐
- mysql 中文乱码的解决办法
I would not suggest Richies answer, because you are screwing up the data inside the database. You wo ...
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
长话短说,一共有两种方法.首先你需要在布局文件里面给EditText设置一个android:inputType="numberPassword"属性.我这里默认规定密码只能是数字了 ...
- JS自定义事件(Dom3级事件下)
原文出处: http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. ...
- linux安装svn服务器(yum方式)
1.查看yum是否安装 在终端中输入yum即可如果已经安装,会显示yum的参数 如果没有安装,会提示yum未安装或无效命令…… 2.安装svnyum -y instal ...
- Dublin Core
DC(Dublin Core) 是数字图书馆中使用的一组简单的包括15个“核心元素”的元数据元素集合,主要用于描述数字对象.馆藏管理和元数据交换. 这15项元数据不仅适用于电子文献目录,也适用于各类电 ...
- Ubuntu 12.04 分区方案(仅供参考)
Ubuntu 12.04 分区方案(仅供参考) 总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...
- JAVA自动生成正则表达式工具类
经过很久的努力,终于完成了JAVA自动生成正则表达式工具类.还记得之前需要正则,老是从网上找吗?找了想修改也不会修改.现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式.赶快在同事面前炫一下吧. ...
- Spring AOP切面
在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(可是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成( ...
- 【转】C++中的虚函数的实现
转自:http://blog.csdn.net/haoel/article/details/1948051 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(V ...
- Centos6下yum安装MariaDB5.5(转)
原文地址:http://www.cnblogs.com/kgdxpr/p/3209009.html vi /etc/yum.repos.d/MariaDB.repo 加入下面内容 [mariabd]n ...