手机版

如何在PHP中读取照片的exif信息

时间:2021-10-07 来源:互联网 编辑:宝哥软件园 浏览:

我们先来了解图片的Exif信息是什么。

Exif是一种图像文件格式,其数据存储与JPEG格式完全相同。其实Exif格式就是将数码照片的信息插入到JPEG格式的头部,包括光圈、快门、白平衡、ISO、焦距、日期时间、相机品牌、型号、色码、拍摄时录制的声音、全球定位系统(GPS)、缩略图等各种拍摄条件。简单来说,Exif=JPEG拍摄参数。因此,您可以使用任何可以查看JPEG文件的查看软件来浏览Exif格式的照片,但并非所有图形程序都可以处理Exif信息。

以上引自百度百科。

阅读照片的exif信息在很多情况下并不是必须的,但是相比一些讨论摄影技术的网站,阅读照片的exif信息就显得尤为重要,比如摄影论坛中的蜂鸟。

截图来自蜂鸟论坛,红圈信息部分是程序阅读照片的exif信息。我们把图片下载到本地,用影魔手打开图片看它的Exif信息。但是当BG除了阴影还有很多工具的时候,就可以看到图片的Exif值了。

除了Exif信息中的镜头值无法读取外,其他所有值都可以正确读取。

打开PHP模块。

PHP中读取图片Exif信息的模块默认是不打开的,所以我们需要先打开这个模块。

打开Exif模块需要Mbstring,所以先安装mbstring。下面是一个Linux环境的例子,其他环境也差不多。

安装mbstring模块。

首先找到php源码包的位置,直接输入ext/mbstring,执行下面的命令进行安装。具体参数取决于您自己的环境。

复制代码如下:[[电子邮件保护]ext]# CD/data 0/software/PHP/ext/mbstring[[电子邮件保护]mbstring]#/usr/local/web server/PHP/bin/phpize配置为:PHP Api版本: 20090626Zend模块Api No: 20090626Zend扩展API no 3: 220090626[[emailprotected/config-with-PHP-config=/usr/local/web server/PHP/bin/PHP-config[[email protected]mbstring]# make Installing Installing shared extensions 3360/usr/local/web server/PHP/lib/PHP/extensions/no-debug-non-zts-20090626/Installing头文件:/usr/local/web server/PHP/include/PHP/[[email protected]mbstring]#

安装后,我们可以进入扩展目录,看看模块是否存在。如果存在,则表示安装成功。复制的代码如下:[[email protected]mbstring]# CD/usr/local/web server/PHP/lib/PHP/extensions/no-debug-non-zts-20090626/[[email protected]。no-debug-non-zts-20090626]# ll 1880-rwxr-xr-x . 1 root root 414405 2012年6月12日eacelerator . so-rwxr-xr-x . 1 root root 1091242 2011年9月23日imagik.so-rwxr-xr-x.1 root5285 2。20 15:07 mbstring . so-rwxr-xr-x . 1 root root 246752 2011年9月23日memcache . so-rwxr-xr-x . 1 root root 154252 2011年9月23日pdo _ mysql.so

安装exif模块。

与安装mbstring模块类似,首先找到源代码位置并将其cd在里面,然后配置安装。具体参数取决于您自己的环境。复制代码如下:[[电子邮件保护] EXIF] # CD/data 0/software/PHP-5 . 3 . 13/ext/EXIF[[电子邮件保护]EXIF]#。/config-with-PHP-config=/usr/local/web server/PHP/bin/PHP-config[[email protected]EXIF]# make installing installing shared extensions 3360/usr/local/web server/PHP/lib/PHP/extensions/no-debug-non-zts-20090626/[[email protected]EXIF]#

输入扩展目录以验证安装是否成功。

复制的代码如下:[[电子邮件保护]EXIF]# CD/usr/local/web server/PHP/lib/PHP/extensions/no-debug-non-zts-20090626/[[电子邮件保护]。no-debug-non-zts-20090626]# ll 2036-rwxr-xr-x . 1 root 414405 2012年6月12日eacelerator . so-rwxr-xr-x . 1 root 158554 2月20日15336025 EXIF . so-rwxr-xr-x . 1 root 10912。2 2011年9月23日imag ick . so-rwxr-xr-x . 1 root 5285 2011年2月20日15:07 MB string . so-rwxr-xr-x . 1 root 246752 2011年9月23日memcache.so-rwxr-xr-x.1 root。Root 154252年9月23日PDO _ MySQL . so[[电子邮件保护] no-debug-non-zts-20090626] #

Exif.so模块已经存在。

在php.ini中添加模块打开php.ini添加以下两行复制的代码如下: extension=' mbstring . so ' extension=' EXIF . so '并确认您的extension_dir值与安装模块时提示的Installing shared extensions值一致。例如,当我安装模块时,系统提示我的扩展的位置是复制代码,如下所示:/usr/local/web server/PHP/lib/PHP/extensions/no-debug-non-zts-20090626/然后您的php.ini中的extension_dir应该指向正确的目录,并复制代码如下: extension _ dir='/usr/local/web server/PHP/lib/PHP/extensions/no-debug打开phpinfo(),找到相应的属性,看看它是否正常工作。

在正常情况下,您会看到以下两个模块信息。

使用exif_read_data()读取图片的exif信息。

支持读取exif信息的图像类型已经用phpinfo写好了,只能是jpeg或者tiff类型,其中jpeg是常见类型,足够了。让我们看一下exif_read_data()函数的用户手册。复制代码如下: array EXIF _ read _ data(string $ filename[,string $ sections=null [,bool $ arrays=false [,bool $ thumbnail=false]])。

参数:

Filename:读取图像exif信息的图像路径,不能是URLsections:它是一个逗号分隔的节列表,需要存在于文件中才能生成结果数组。如果找不到请求的部分,返回值为假。

文件文件名,文件大小,文件日期时间,找到的部分计算html,宽度,高度,颜色,可能还有更多。高度和宽度的计算方式与getimagesize()相同,因此它们的值不能是任何返回的标题信息的一部分。另外,html是一个有高度/宽度的文本字符串,可以用在普通的HTML中。任何包含标签的信息,例如IFD0,EXIF,IFD0,IFD0的所有标签数据。在标准图像文件中,这包括图像大小和其他。如果有第二个IFD,文件应该包含缩略图。所有关于嵌入缩略图的标签信息都存储在该区域。JPEG图像的注释标题信息。EXIF EXIF部分是国际摄影测量组织的一个分支,包含了更多的图像详细信息。大部分内容与数码相机有关。数组:指定每个部分是否成为数组。COMPUTED节、THUMBNAIL节和COMMENT节总是成为数组,因为它们包含的名称与其他节冲突。

缩略图:当设定为真实的时,读取缩略图本身。否则只读取标记数据。我们来读取一张图片的exif信息试试复制代码代码如下:PHP $ EXIF=GetExif(' a . jpg ');回声“pre”;print _ r(EXIF);回声/pre ';执行结果:复制代码代码如下: Array([FileName]=a . jpg[file datetime]=1361340032[file size]=69170[file type]=2[mime type]=image/JPEG[sections find]=ANY _ TAG,IFD0,THUMBNAIL,EXIF,GPS,INTEROP[COMPUTED]=Array([html]=Width=' 600 ' Height=' 397 '[Height]=397[Width]=600[IsColor]=1[byte moderodora]=1文件类型]=2[缩略图mime type]=image/JPEG)[image width]=4928[image length]=3264[bit sper sample]=Array([0]=8[1]=8[2]=8[光度探测]=2[Make]=NIKON CORPORATION[Model]=NIKON d 7000[Orientation]=1[sample sper pixel]=3[XResolution]=300000000/1000000[yre solution]=30000000000/11100000000曝光模式]=1[白平衡]=0[数字缩放比例]=1/1[聚焦长度35毫米胶片]=27[场景捕捉]=0[增益控制]=2[对比度]=0[饱和度]=0[锐度]=0[主题距离]=0[未定义的缩放比例:0x a500]=22/10[图形缩放版本]=[交互操作索引]=R03[交互操作版本]=0100)

如果提示:复制代码代码如下:致命错误:调用第2行/data 0/htdocs/www/EXIF/index。服务器端编程语言(Professional Hypertext Preprocessor的缩写)中未定义的函数exif_read_data()则表示模块没有打开,可能是你配置哪一块没有配置好,重新配置就好。

从Exif信息读取结果中取出有用的信息

从以上的执行结果我们发现图片Exif很多,我们只需要从中过滤掉垃圾信息剩下有用的就好。本例就以常用的参数为前提写一个服务器端编程语言(专业超文本预处理器的缩写)函数。常用的参数包括快门,器材名称,光圈,感光度,焦距:

复制代码代码如下:php/***读取联合图象专家组图片的Exif信息* $img为图片路径** 琼台博客*/函数getExif($ img){ $ EXIF=EXIF _ read _ data($ img,' ifd 0 ');返回数组(""文件名=$exif['FileName'],'器材品牌=$exif['Make'],'器材=$exif['Model'],'快门=$ EXIF[' exposer etime '],'光圈=$ EXIF[' fnnumber '],'焦距=$exif['FocalLength'],'感光度=$ EXIF[' isopeedrations ']);}

读取照片

复制代码如下:PHP $ Exifinfo=GetExif(' a . jpg ');回声“pre”;print _ r($ Exifinfo);回声'/pre ';执行结果:复制代码如下: array([文件名]=25556306.jpg[设备品牌]=尼康公司[设备]=尼康d 3100[快门]=10/32000[光圈]=18/10[焦距]=350/10[感光度]=100)。

其他说明

图片的Exif值可以通过相应的工具进行修改,所以用程序读取图片的Exif值只能作为参考,不能作为真实依据。

感兴趣的朋友也可以访问http://exif.cn,一个在线阅读Exif信息的网站。

偶尔PHP模块读取的Exif信息有误或不完整。在这种情况下,我们可以使用第三方工具。然后用php执行系统linux命令读取。

版权声明:如何在PHP中读取照片的exif信息是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。