|
本帖最后由 haohailuo 于 2010-5-28 07:14 编辑
刚看到论坛中langziyang发布了“CI有没有读取照片的exif信息?”的求助信息,相信同样有些人需要这个功能的,特分享此类库:
返回的信息见图片:
返回信息
代码如下:
PHP复制代码
<?php
/**
* FILE_NAME : Image.php
* 图片处理类
*
* @package haohailuo
* @author By Laurence.xu <haohailuo@163.com>
* @copyright Copyright (c) 2010, Haohailuo, Inc.
* @link http://www.haohailuo.com
* @since Version 1.0 $Id$
* @version Thu Jan 27 21:19:53 CST 2010
* @filesource
*/
class Image {
var $imgtype = array(); //图片类型
var $orientation = array(); //位置信息
var $resolution_unit = array(); //分辨率单位
var $ycb_cr_positioning = array(); //YCbCr位置控制
var $exposure_program = array(); //曝光
var $metering_mode_arr = array(); //测光模式
var $lightsource_arr = array(); //光源信息
var $flash_arr = array(); //闪光灯
/**
* 构造函数
*
*/
function __construct (){
$this->Image();
}
function Image () {
$this->imgtype = array("", "GIF", "JPG", "PNG", "SWF", "PSD", "BMP", "TIFF(intel byte order)", "TIFF(motorola byte order)", "JPC", "JP2", "JPX", "JB2", "SWC", "IFF", "WBMP", "XBM");
$this->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");
$this->resolution_unit = array("", "", "英寸", "厘米");
$this->ycb_cr_positioning = array("", "the center of pixel array", "the datum point");
$this->exposure_program = array("未定义", "手动", "标准程序", "光圈先决", "快门先决", "景深先决", "运动模式", "肖像模式", "风景模式");
$this->metering_mode_arr = array("0" => "未知","1" => "平均", "2" => "中央重点平均测光", "3" => "点测","4" => "分区","5" => "评估","6" => "局部","255" => "其他");
$this->lightsource_arr = array("0" => "未知","1" => "日光","2" => "荧光灯","3" => "钨丝灯","10" => "闪光灯","17" => "标准灯光A","18" => "标准灯光B","19" => "标准灯光C","20" => "D55","21" => "D65","22" => "D75","255" => "其他");
$this->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",
);
log_message ('debug', "The Extend Image Class Initialized");
}
/**
* 一个全面获取图象信息的函数
*
* @see get_img_info()
* @author Laurence.xu <haohailuo@163.com>
* @version Thu May 27 21:26:36 CST 2010
* @param <string> $image 图片路径
* @return <array> $info 图片信息数组
*/
function get_img_info ($image) {
$exif = exif_read_data($image, "IFD0");
if ($exif === false) {
$new_img_info = array ("文件信息" => "没有图片EXIF信息");
} else {
$exif = exif_read_data ($image, 0, true);
$new_img_info = array (
"文件信息" => "----------------------------",
"文件名" => $exif['FILE']['FileName'],
"文件类型" => $this->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'],
"方向" => $this->orientation[$exif['IFD0']['Orientation']],
"水平分辨率" => $exif['IFD0']['XResolution'].$this->resolution_unit[$exif['IFD0']['ResolutionUnit']],
"垂直分辨率" => $exif['IFD0']['YResolution'].$this->resolution_unit[$exif['IFD0']['ResolutionUnit']],
"创建软件" => $exif['IFD0']['Software'],
"修改时间" => $exif['IFD0']['DateTime'],
"作者" => $exif['IFD0']['Artist'],
"YCbCr位置控制" => $this->ycb_cr_positioning[$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'],
"测光模式" => $this->_get_img_info_val ($exif['EXIF']['MeteringMode'],$this->metering_mode_arr),
"光源" => $this->_get_img_info_val ($exif['EXIF']['LightSource'], $this->lightsource_arr),
"闪光灯" => $this->_get_img_info_val ($exif['EXIF']['Flash'], $this->flash_arr),
"曝光模式" => ($exif['EXIF']['ExposureMode'] == 1 ? "手动" : "自动"),
"白平衡" => ($exif['EXIF']['WhiteBalance'] == 1 ? "手动" : "自动"),
"曝光程序" => $this->exposure_program[$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;
}
/**
* 获取图象信息的函数
*
* @see getImageInfo()
* @author Laurence.xu <haohailuo@163.com>
* @version Thu May 27 21:22:43 CST 2010
* @param <string> $img_info 图片信息
* @param <array> $val_arr 值
* @return <string> $info_val
*/
function _get_img_info_val ($img_info, $val_arr) {
$info_val = "未知";
foreach($val_arr as $name=>$val) {
if ($name == $img_info) {
$info_val =& $val;
break;
}
}
return $info_val;
}
}
/* End of file Image.php */
/* Location: ./www/libraries/Image.php */
复制代码
附件下载:
Image.rar
(3 KB, 下载次数: 71)
|
评分
-
查看全部评分
|