Home > Backend Development > PHP Tutorial > PHP中利用EXIF函数集回显示单反照片的EXIF信息

PHP中利用EXIF函数集回显示单反照片的EXIF信息

WBOY
Release: 2016-06-13 11:50:05
Original
1054 people have browsed it

PHP中利用EXIF函数集来显示单反照片的EXIF信息

要成功做到能用EXIF函数显示单反EXIF信息需要一下几个不步骤:

1.修改php.ini的exif相关信息

2.继续修改php.ini信息,找到以下模块,将带exif的配置属性前的;号去掉,然后重启apache

3.验证php确实开启了exif模块成功,利用以下代码

    echo phpinfo();
?>
如果看到显示下图,则表示成功开启了exif模块,这样我们就可以开始利用其函数集了

4.开始写相关类(或函数,是别人封装好的,我个人觉得这个合适),如下,大家可以自己自行修改其中代码以供自己使用

    function GetImageInfoVal($ImageInfo,$val_arr) {
        $InfoVal = "未知";
        foreach($val_arr as $name=>$val) {
            if ($name==$ImageInfo) {
                $InfoVal = &$val;
                break;
            }
        }
        return $InfoVal;
    }
    function GetImageInfo($img) {
        $imgtype = array("", "GIF", "JPG", "PNG", "SWF", "PSD", "BMP", "TIFF(intel byte order)", "TIFF(motorola byte order)", "JPC", "JP2", "JPX", "JB2", "SWC", "IFF", "WBMP", "XBM");
        $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");
        $ResolutionUnit = array("", "", "英寸", "厘米");
        $YCbCrPositioning = array("", "the center of pixel array", "the datum point");
        $ExposureProgram = array("未定义", "手动", "标准程序", "光圈先决", "快门先决", "景深先决", "运动模式", "肖像模式", "风景模式");
        $MeteringMode_arr = array(
    "0" => "未知",
    "1" => "平均",
    "2" => "中央重点平均测光",
    "3" => "点测",
    "4" => "分区",
    "5" => "评估",
    "6" => "局部",
    "255" => "其他"
    );
    $Lightsource_arr = array(
    "0" => "未知",
    "1" => "日光",
    "2" => "荧光灯",
    "3" => "钨丝灯",
    "10" => "闪光灯",
    "17" => "标准灯光A",
    "18" => "标准灯光B",
    "19" => "标准灯光C",
    "20" => "D55",
    "21" => "D65",
    "22" => "D75",
    "255" => "其他"
    );
    $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",
    );

    $exif = exif_read_data ($img,"IFD0");
    if ($exif===false) {
        $new_img_info = array ("文件信息" => "没有图片EXIF信息");
    }
    else
    {
        $exif = exif_read_data ($img,0,true);
        $new_img_info = array (
    "文件信息" => "-----------------------------",
    "文件名" => $exif[FILE][FileName],
    "文件类型" => $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],
    "方向" => $Orientation[$exif[IFD0][Orientation]],
    "水平分辨率" => $exif[IFD0][XResolution].$ResolutionUnit[$exif[IFD0][ResolutionUnit]],
    "垂直分辨率" => $exif[IFD0][YResolution].$ResolutionUnit[$exif[IFD0][ResolutionUnit]],
    "创建软件" => $exif[IFD0][Software],
    "修改时间" => $exif[IFD0][DateTime],
    "作者" => $exif[IFD0][Artist],
    "YCbCr位置控制" => $YCbCrPositioning[$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],
    "测光模式" => GetImageInfoVal($exif[EXIF][MeteringMode],$MeteringMode_arr),
    "光源" => GetImageInfoVal($exif[EXIF][LightSource], $Lightsource_arr),
    "闪光灯" => GetImageInfoVal($exif[EXIF][Flash], $Flash_arr),
    "曝光模式" => ($exif[EXIF][ExposureMode]==1?"手动":"自动"),
    "白平衡" => ($exif[EXIF][WhiteBalance]==1?"手动":"自动"),
    "曝光程序" => $ExposureProgram[$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;
    }
5.写测试代码

    header("content-type:text/html;charset=utf-8");
    $filename = "test.jpg";
    require 'pic.class.php';
    $new_img_info = GetImageInfo($filename);
    //echo $new_img_info;
    foreach ($new_img_info as $key=> $section) {
            echo $key.":".$section."
";
    }
?>
6.结果如图所示

文件信息:-----------------------------
文件名:test.jpg
文件类型:JPG
文件格式:image/jpeg
文件大小:477883
时间戳:2014-03-07 14:53:57
图像信息:-----------------------------
图片说明:SONY DSC
制造商:SONY
型号:DSLR-A900
方向:top left side
水平分辨率:2400000/10000英寸
垂直分辨率:2400000/10000英寸
创建软件:Adobe Photoshop CS6 (Windows)
修改时间:2014:01:13 14:02:59
作者:
YCbCr位置控制:
版权:
摄影版权:
编辑版权:
拍摄信息:-----------------------------
Exif版本:0221
FlashPix版本:Ver. 0.00
拍摄时间:2014:01:10 12:06:40
数字化时间:2014:01:10 12:06:40
拍摄分辨率高:806
拍摄分辨率宽:1210
光圈:761471/100000
快门速度:7965784/1000000
快门光圈:f/14.0
最大光圈值:F434/100
曝光时间:1/250
F-Number:14/1
测光模式:评估
光源:未知
闪光灯:未知
曝光模式:自动
白平衡:自动
曝光程序:光圈先决
曝光补偿:-7/10EV
ISO感光度:100
分量配置:RGB
图像压缩率:Bits/Pixel
对焦距离:m
焦距:120/10mm
等价35mm焦距:12mm
用户注释编码:
用户注释:
色彩空间:Uncalibrated
Exif图像宽度:4032
Exif图像高度:6048
文件来源:digital still camera
场景类型:A directly photographed image
缩略图文件格式:
缩略图Mime格式:

至此,一个简单利用exif函数集来显示图片的exif信息的模块就出来了.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template