发布phpexif v0.1 - 顺带简单谈谈EXIF
什么是EXIF(网上抄来的):
Exif是英文Exchangeable Image File(可交换图像文件)的缩写,最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association) 制订,目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system)可能以Exif2.1为基础。
Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但,打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。
简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过 EXIF 信息所记录的资讯更为详尽和完备。
包含EXIF信息的JPEG文件:
所有的JPEG文件以字符串“0xFFD8”开头(SOI),并以字符串“0xFFD9”结束(EOI),一个JPEG文件的格式大致如下图一(Exif2-2.PDF 第11页):
APP1 Maker固定为0xFFE1
APP1 Length是一个2bytes的SHORT
Exif Identifier Code为6bytes,前4bytes是字符"EXIF",后2bytes是0x00
TIFF Headers的结构可以参考下表一(Exif2-2.PDF 第10页):
TIFF Header开始到最后的详细结构可以查考如下图二(Exif2-2.PDF 第9页):
如果是要获取一张照片拍摄的相关信息,一般来说我们主要是需要关注的结构有0th IFD、Exif IFD,还有一个就是MakerNote。
0th IFD一般称为“图像信息”,里其中包含了相机厂商、相机型号、拍摄时间和Exif IFD结构入口的指针(TAG为0x8769);
Exif IFD一般称为“相机拍摄记录”,其中包含了快门、光圈、测光模式、ISO等拍摄参数信息,还有就是包含了MakerNote结构的入口指针(TAG为0x927C);
MakerNote一般称为“厂商注释”,这个是个最混乱的结构,因为不同的厂商都有自己定义的结构,里面都是一些厂商定义的信息,例如Nikon在里面定义了镜头相关的信息,ISO数值;对于D70之类N家的“老”相机,ISO数值是没有按照规范记录在Exif IFD中的,并且MakerNote中的这个字段还没有遵照文件中多字节存储顺序(big-endian和little-endian)存放,很是神奇。
phpexif:
最近给公司的摄影协会搞了个Discuz!论坛,论坛最大的目的就是交流相片,于是考虑做些改动,在页面上直接显示上传照片的Exif信息。在网上找了一下,解决的方法多数都是启用PHP自带的Exif函数,然后修改include\attachment.func.php和模板templates\default\discuzcode.htm,但是试用之后我发现php的Exif函数有些问题,有些信息显示出来格式有问题,我的php版本是4.4.7,于是改用我自己原来为自己的相册写的一个函数替代。发现原来写得很粗糙,很多问题都没有考虑,兴致一来,决定重写一个。
这次的这个版本使用了面向对象的结构,相对规整,而且对一些情况考虑得也周全一些,不过只是用来获取有限的一些参数,其他的暂时忽略不计。且对于MakerNote结构,也只是针对Nikon的jpeg文件获取了ISO数值,Nikon文件的其他信息和其他品牌的MakerNote均未涉及。一些功能也不通用,放上来主要供有兴趣的人参考或者修改使用。
版本:v0.1
功能:获取指定jpeg文件的如下Exif信息,相机厂商、相机型号、快门、光圈、曝光程序、测光模式、拍摄时间、感光度、闪光灯模式、焦距、曝光补偿、白平衡模式、等价35mm焦距、感光度,并输出成固定格式的HTML字符串
下载
参考资料:
这里还有一个压缩包包含了一些我收藏的参考资料供大家使用:
1、JEIDA 制定的EXIF 2.1官方标准 (1998.6.12)
2、JEIDA 制定的EXIF 2.2 官方标准 (2002.4)
3、EXIF 文件格式说明,一个日本人写的EXIF英文参考文档,内容有点旧,不过还是比官方规范好读很多;原始下载地址已经404错误了,好在我有备份
4、Nikon Tags说明
下载
在Discuz! 6.0中增加图片显示Exif信息的方法:
大家可以参考《数码相片EXIF信息For DZ 6.0正式版》:http://www.discuz.net/viewthread.php?tid=733174
将phpexif.php上传到Discuz! 6.0的include目录,将文中include\attachment.func.php中添加的代码改为:
/*******EXIF信息**********/
if (($extension == 'jpg' || $extension == 'jpeg'))
{
require_once("./include/phpexif.php");
if (!isset($ex) || $ex == null)
{
$ex = new EXIF();
}
$ex->get_exif("./attachments/".$attach['attachment']);
$attach['exif'] = $ex->TAG->to_string();
}
/*******EXIF信息**********/
显示效果如下:
Exif查看工具推荐:
最后还是推荐查看Exif的IE插件Opanda IExif,下载地址:http://www.opanda.com/cn/iexif/download.htm,方便查看更多Exif信息。
已有3位网友发表了看法:
资料很有用,非常感谢博主。
我最近想仔细看下exif相关的资料,可惜您提供的链接已经打不开,那个exifdoc.rar下载也总是报错,可否请博主帮忙邮到我的信箱?
galiu#21cn.com,把#改成@即可。
非常感谢。
发表评论