先来了解什么是图片的Exif信息
Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。
以上引自百度百科。
读取照片的exif在很多时候都没有必要,但相对于一些探讨摄影技术的站点,那么读取照片的exif信息就显得尤为重要了,比如摄影论坛蜂鸟。
截图自蜂鸟论坛,红圈信息部分就是程序读取照片的exif信息。我们把图片下载到本地,使用光影魔术手打开图片看看它的Exif信息,当BG然除了光影还有很多工具都能查看图片的Exif值。
除了Exif信息里的镜头值读不出来以外其余的值都能正确读出来。
默认情况下,PHP读取图片Exif信息模块是不开启的,我们需要先开启这个模块。
开启Exif模块需要mbstring支持,所以先来安装mbstring,以下是以Linux环境为例,其它环境类似。
安装mbstring模块
首先找到PHP源码包位置,直接进入ext/mbstring,执行以下命令安装,具体参数得看自己的环境。
PHP/ext/mbstring
[root@lee mbstring]# /usr/local/webserver/
PHP/bin/
PHPize
Con
figuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@lee exif]# ./con
figure --with-
PHP-con
fig=/usr/local/webserver/
PHP/bin/
PHP-con
fig
[root@lee mbstring]# make && make install
Installing shared extensions: /usr/local/webserver/
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/
Installing header files: /usr/local/webserver/
PHP/include/
PHP/
[root@lee mbstring]#
安装好以后,我们可以进入extensions目录看看模块是否存在,存在表示安装成功。
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]# ll
总用量 1880
-rwxr-xr-x. 1 root root 414405 6月 12 2012 eaccelerator
.so
-rwxr-xr-x. 1 root root 1091242 9月 23 2011 imagick
.so
-rwxr-xr-x. 1 root root 5285 2月 20 15:07 mbstring
.so
-rwxr-xr-x. 1 root root 246752 9月 23 2011 memcache
.so
-rwxr-xr-x. 1 root root 154252 9月 23 2011 pdo_
MysqL.so
安装exif模块
同安装mbstring模块类似,先找到源码位置并cd进去并配置安装,具体参数得看自己的环境。
PHP-5.3.13/ext/exif
[root@lee exif]# ./con
figure --with-
PHP-con
fig=/usr/local/webserver/
PHP/bin/
PHP-con
fig
[root@lee exif]# make && make install
Installing shared extensions: /usr/local/webserver/
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/
[root@lee exif]#
进入extensions目录验证是否安装成功
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]# ll
总用量 2036
-rwxr-xr-x. 1 root root 414405 6月 12 2012 eaccelerator
.so
-rwxr-xr-x. 1 root root 158554 2月 20 15:25 exif
.so
-rwxr-xr-x. 1 root root 1091242 9月 23 2011 imagick
.so
-rwxr-xr-x. 1 root root 5285 2月 20 15:07 mbstring
.so
-rwxr-xr-x. 1 root root 246752 9月 23 2011 memcache
.so
-rwxr-xr-x. 1 root root 154252 9月 23 2011 pdo_
MysqL.so
[root@lee no-debug-non-zts-20090626]#
exif.so模块已经存在。
在PHP.ini中添加模块
打开PHP.ini添加以下两行
.so"
extension = "exif
.so"
并且确认你的extension_dir值与你安装模块时
提示的Installing shared extensions值一致,比如我安装模块时
提示我的extensions位置是
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/
那么你的
PHP.ini里的extension_dir要指向正确目录
PHP/lib/
PHP/extensions/no-debug-non-zts-20090626/"
保存
PHP.ini,重启webserver。
打开
PHPinfo()找到相应
属性看看是否已正常工作
正常情况下你会看到如下两个模块信息
使用exif_read_data()读取图片的exif信息
支持读取exif信息的图片类型在PHPinfo里已经写明了,只能是jpeg或者tiff类型,其中jpeg是常用类型,这就已经足够。
我们来看看exif_read_data()函数的使用手册
参数:
filename :要读取图片exif信息的图片路径,这里不能是URL
sections:是需要存在于文件中的逗号分隔的区段列表用来产生结果数组。如果未找到所请求的区段则返回值为 FALSE。
mpuTEDgetimagesize()一样的方法计算的,因此它们的值不能是任何返回的头信息的部分。此外 html 是一个 height/width 的文本字符串可以用于普通的中。
arrays :指定了是否每个区段都成为一个数组。sections COMPUTED,THUMBNAIL 和COMMENT 区段总是成为数组,因为它们里面包含的名字和其它区段冲突。
thumbnail : 当设定为 TRUE 时,读取缩略图本身。否则只读取标记数据。
我们来读取一张图片的exif信息试试
<div class="codetitle"><a style="CURSOR: pointer" data="50321" class="copybut" id="copybut50321" onclick="doCopy('code50321')"> 代码如下:
<div class="codebody" id="code50321">
<?
PHP
$exif = getExif('a.jpg');
echo '
';
print_r($exif);
echo '
';
a.jpg
[FileDateTime] => 1361340032
[FileSize] => 69170
[FileType] => 2
[MimeType] => image/jpeg
[SectionsFound] => ANY_TAG,IFD0,THUMBNAIL,EXIF,GPS,INTEROP
[CO
mpuTED] => Array
(
[html] => width="600" height="397"
[Height] => 397
[Width] => 600
[IsColor] => 1
[ByteOrderMotorola] => 1
[ApertureFNumber] => f/13.0
[Focus
distance] => 3.76m
[UserComment] =>
[UserCommentEncoding] => ASCII
[
copyright] =>
[Thumbnail.FileType] => 2
[Thumbnail.MimeType] => image/jpeg
)
[ImageWidth] => 4928
[ImageLength] => 3264
[BitsPerSample] => Array
(
[0] => 8
[1] => 8
[2] => 8
)
[PhotometricInterpretation] => 2
[Make] => NIKON CORPORATION
[Model] => NIKON D7000
[Orientation] => 1
[SamplesPerPixel] => 3
[XResolution] => 3000000/10000
[YResolution] => 3000000/10000
[ResolutionUnit] => 2
[Software] => A
dobe Photoshop CS5 Windows
[DateTime] => 2013:02:18 20:50:46
[WhitePoint] => Array
(
[0] => 313/1000
[1] => 329/1000
)
[Primary
chromaticities] => Array
(
[0] => 64/100
[1] => 33/100
[2] => 21/100
[3] => 71/100
[4] => 15/100
[5] => 6/100
)
[
ycbcrCoefficients] => Array
(
[0] => 299/1000
[1] => 587/1000
[2] => 114/1000
)
[
ycbcrPositioning] => 2
[
copyright] =>
[Exif_IFD_Pointer] => 500
[GPS_IFD_Pointer] => 1248
[THUMBNAIL] => Array
(
[Compression] => 6
[XResolution] => 72/1
[YResolution] => 72/1
[ResolutionUnit] => 2
[JPEGInterchangeFormat] => 1362
[JPEGInterchangeFormatLength] => 4784
)
[ExposureTime] => 40/10
[FNumber] => 130/10
[ExposureProgram] => 1
[ISOSpeed
ratings] => 1000
[UndefinedTag:0x8830] => 2
[ExifVersion] => 0230
[DateTimeOriginal] => 2013:02:14 21:12:08
[DateTimeDigitized] => 2013:02:14 21:12:08
[ComponentsCon
figuration] =>
[Com
pressedBitsPerPixel] => 4/1
[ShutterSpeedValue] => -2/1
[ApertureValue] => 7400879/1000000
[ExposureBiasValue] => 2/6
[MaxApertureValue] => 36/10
[Subjec
tdistance] => 376/100
[MeteringMode] => 3
[LightSource] => 0
[Flash] => 16
[FocalLength] => 180/10
[UserComment] => ASCII
[SubSecTime] => 10
[SubSecTimeOriginal] => 10
[SubSecTimeDigitized] => 10
[FlashPixVersion] => 0100
[ColorSpace] => 65535
[ExifImageWidth] => 600
[ExifImageLength] => 397
[InteroperabilityOffset] => 1216
[SensingMethod] => 2
[FileSource] =>
[SceneType] =>
[CFAPattern] =>
[Cust
omrendered] => 0
[ExposureMode] => 1
[WhiteBalance] => 0
[DigitalZo
omratio] => 1/1
[FocalLengthIn35mmFilm] => 27
[SceneCaptureType] => 0
[GainControl] => 2
[Contrast] => 0
[Saturation] => 0
[Sharp
ness] => 0
[Subjec
tdistanceRange] => 0
[UndefinedTag:0xA500] => 22/10
[GP
sversion] =>
[InterOperabilityIndex] => R03
[InterOperabilityVersion] => 0100
)
Fatal error: Call to undefined function exif_read_data() in /data0/htdocs/www/exif/index.
PHP on line 2
function getExif($img){
$exif = exif_read_data($img,'IFD0');
return array (
'文件名' => $exif['FileName'],
'器材品牌' => $exif['Make'],
'器材' => $exif['Model'],
'快门' => $exif['ExposureTime'],
'光圈' => $exif['FNumber'],
'焦距' => $exif['FocalLength'],
'感光度' => $exif['ISOSpeedratings']
);
}
PHP
$exifInfo = getExif('a.jpg');
echo '
';
print_r($exifInfo);
echo '
';
25556306.jpg
[器材品牌] => NIKON CORPORATION
[器材] => NIKON D3100
[快门] => 10/32000
[光圈] => 18/10
[焦距] => 350/10
[感光度] => 100
)