当前位置: 首页 > linux > 正文

php 及 linux 命令行方式读取 图片 exif 信息

【摘要】Exif就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。

确保php在编译的时候已经开启了exif,如:–enable-exif
查看php是否已经支持exif模块,可以通过phpinfo()查看,也可以通过命令行方式:

php -i | grep -i exif
exif
EXIF Support => enabled
EXIF Version => 1.4 $Id$
Supported EXIF Version => 0220
exif.decode_jis_intel => JIS => JIS
exif.decode_jis_motorola => JIS => JIS
exif.decode_unicode_intel => UCS-2LE => UCS-2LE
exif.decode_unicode_motorola => UCS-2BE => UCS-2BE
exif.encode_jis => no value => no value
exif.encode_unicode => ISO-8859-15 => ISO-8859-15

下面是一个php读取exif的函数

php_exif_test.php
<?php
header("Content-Type: text/html; charset=utf-8");
function getExif($img){ 
      
    #$exif = exif_read_data($img, 'IFD0'); 
    $exif = exif_read_data($img); 

    return array ( 
        '文件名' => $exif['FileName'], 
        '文件类型' => $exif['FileType'],
        '器材品牌' => $exif['Make'], 
        '器材' => $exif['Model'], 
        '快门' => $exif['ExposureTime'], 
        '光圈' => $exif['FNumber'], 
        '焦距' => $exif['FocalLength'], 
        '感光度' => $exif['ISOSpeedRatings'],
        '文件格式' => $exif['MimeType'],
	'时间戳' => $exif['DateTime'],
        '图片说明' => $exif['ImageDescription'],
        '方向1' => $exif['Orientation'],
        '方向2' => $Orientation[$exif['Orientation']],
        '水平分辨率' => $exif['XResolution'].$exif['ResolutionUnit'],
        '垂直分辨率' => $exif['YResolution'].$exif['ResolutionUnit'],
        '作者' => $exif['Artist'],
#        'YCbCr位置控制' => $YCbCrPositioning[$exif['YCbCrPositioning']],
#        'YCbCr位置控制' => $exif['YCbCrPositioning'],
        '版权' => $exif['Copyright'],
        'Exif版本' => $exif['ExifVersion'],
        '拍摄分辨率高' => $exif['COMPUTED']['Height'],
        '拍摄分辨率宽' => $exif['COMPUTED']['Width'],
        '拍摄时间' => $exif['DateTimeOriginal'],        
    );  
}

$exif = getExif('pic1.jpg');
echo '<pre>';
print_r($exif);
echo '</pre>';

?>

执行结果如下:
图片一:

(
    [文件名] => pic1.jpg
    [文件类型] => 2
    [器材品牌] => Canon
    [器材] => Canon EOS 5D Mark II
    [快门] => 1/25
    [光圈] => 14/10
    [焦距] => 35/1
    [感光度] => 2000
    [文件格式] => image/jpeg
    [时间戳] => 2013-07-24T13:43:47+08:00
    [图片说明] => 
    [方向1] => 
    [方向2] => 
    [水平分辨率] => 350/12
    [垂直分辨率] => 350/12
    [作者] => Photographer: Fisher
    [版权] => Copyright:clycsz3
    [Exif版本] => 0220
    [拍摄分辨率高] => 500
    [拍摄分辨率宽] => 750
    [拍摄时间] => 2013:07:04 01:12:22
)

图片二

(
    [文件名] => pic2.jpg
    [文件类型] => 2
    [器材品牌] => Exif
    [器材] => II*
    [快门] => 1111490560/15
    [光圈] => 1111490560/15
    [焦距] => 1111490560/15
    [感光度] => 100
    [文件格式] => image/jpeg
    [时间戳] => 
    [图片说明] => 
    [方向1] => 1
    [方向2] => 
    [水平分辨率] => 16795209/12079598092
    [垂直分辨率] => 18432/691327992
    [作者] => 
    [版权] => 
    [Exif版本] => 0230
    [拍摄分辨率高] => 915
    [拍摄分辨率宽] => 1400
    [拍摄时间] => 
)

发现第二张图片有些参数取出来的值不对:
[器材品牌] => Exif
[器材] => II*

怀疑是几种原因导致,一是相机设备的exif信息比较新,php的exifi模块无法读取;二是图片被编辑过,部分exif信息被破坏。

下面提供linux下的一个command方式读取exif信息的工具–ImageMagick,ubuntu和centos下都有。
如CentOS下的安装方式: yum install ImageMagick

/usr/bin/identify -verbose pic1.jpg  | grep -i exif
    exif:ApertureValue: 970854/1000000
    exif:Artist: Photographer:Fisher
    exif:Copyright: Copyright:clycsz3
    exif:DateTime: 2013-07-24T13:43:47+08:00
    exif:DateTimeDigitized: 2013:07:04 01:12:22
    exif:DateTimeOriginal: 2013:07:04 01:12:22
    exif:ExifImageLength: 500
    exif:ExifImageWidth: 750
    exif:ExifOffset: 276
    exif:ExifVersion: 48, 50, 50, 48
    exif:ExposureBiasValue: 0/1
    exif:ExposureMode: 0
    exif:ExposureProgram: 3
    exif:ExposureTime: 1/25
    exif:Flash: 16
    exif:FNumber: 14/10
    exif:FocalLength: 35/1
    exif:FocalPlaneResolutionUnit: 2
    exif:FocalPlaneXResolution: 3861000/1459
    exif:FocalPlaneYResolution: 2574000/958
    exif:ISOSpeedRatings: 2000
    exif:Make: Canon
    exif:MaxApertureValue: 1/1
    exif:MeteringMode: 5
    exif:Model: Canon EOS 5D Mark II
    exif:ResolutionUnit: 2
    exif:SceneCaptureType: 0
    exif:ShutterSpeedValue: 4643856/1000000
    exif:Software: Adobe Photoshop CS6 Windows
    exif:SubSecTime: 08
    exif:SubSecTimeDigitized: 08
    exif:SubSecTimeOriginal: 08
    exif:WhiteBalance: 0
    exif:XResolution: 350/1
    exif:YResolution: 350/1
    Profile-exif: 708 bytes

看上去还是比较好用的,看看程序上怎么方便处理和调用吧。
也可以跟http://exif.cn/对比一下,看看你取出来的exif信息是否正确。

本文固定链接: https://sudops.com/php-and-shell-read-exif-info.html | 运维速度

该日志由 u2 于2014年06月09日发表在 linux 分类下,
原创文章转载请注明: php 及 linux 命令行方式读取 图片 exif 信息 | 运维速度
关键字: ,

报歉!评论已关闭.