First, explain what is Exif. Exif is an image file format, which data storage is identical with the JPEG format. In fact, Exif format is inserted in JPEG format header information digital photo, including aperture, shutter speed, white balance, ISO, focal length, date and time when the various shooting and shooting conditions and camera brand, model, color coding, recording sound when shooting and global positioning system (GPS), thumbnail. Simply put, Exif = JPEG + shooting parameters. Therefore, you can use any JPEG files can be viewed in the plug-in software view photos Exif format, but not all graphics programs can handle Exif information.
- Open PHP module
By default, PHP read the image Exif information module is not open, we need to open this module.
Open Exif module requires mbstring support, so install mbstring (step omitted here, and server related to the environment), then install the exif module (here the same step is omitted, and the environment related to the server).
extension = "mbstring.so"extension = "exif.so"
Confirmation prompt and consistent when you install the module with extension_dir value value Installingshared extensions, save php.ini, restart the webserver
2. read the image Exif information
Support for reading exif information of image types in phpinfo already stated, the only type of jpeg or tiff, jpeg which is a common type, which is sufficient.
<?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'], '压缩方式