利用php获取图片完整Exif信息类 获取图片详细完整信息类
这个是最近写的一个php获取图片Exif类,功能比较全面,也把所有的Exif都翻译了,执行效率也还可以。
唉,这次懒地写英文版了,以后有时间把英文版也做下。同样,不设置隐藏,也不需金钱。
因为这里不能贴链接,我博客里有个测试网页,大家如果有兴趣,可以去看看tonylevid.com
分两大模式:一个是已经转换数据的(如width:500px)用于显示;一个是未转换数据的如(width:500)用于用户自己自定义计算。
内置3种获取模式,用户可以自定义数组来获取。
注意:需在php.ini中开启mbstring和exif模块
功能如下:
@可以获取已经转换后的值,也可以获取未转换的值用于自己自定义计算
@内置3种获取模式,分别为简要信息、常用信息和全部信息
@用户可以自定义获取信息
具体可以查看类中的注释
<?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>\'; ?>
转载:http://www.itokit.com/2012/0722/74610.html