说明
array
exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]])
exif_read_data() 函数从 JPEG 或 TIFF 图像文件中读取 EXIF
头信息。返回一个关联数组,键名是头信息名,值为与其相应的值。如果没有可供返回的数据则返回
FALSE。
filename 是被读取的文件名。不能是 URL。
sections
是需要存在于文件中的逗号分隔的区段列表用来产生结果数组。如果未找到所请求的区段则返回值为
FALSE。
arrays 指定了是否每个区段都成为一个数组。COMPUTED
和 THUMBNAIL 区段总是成为数组,因为它们里面包含的名字和其它区段冲突。
thumbnail 指定了是否读取缩略图本身而不只是标记数据。
例子 1. exif_read_data() 例子
<?php echo "test1.jpg:<br />\n"; $exif = exif_read_data ('tests/test1.jpg','IFD0'); echo $exif===false ? "No header data found.<br />\n" : "Image contains headers<br />"; $exif = exif_read_data ('tests/test2.jpg',0,true); echo "test2.jpg:<br />\n"; foreach($exif as $key=>$section) { foreach($section as $name=>$val) { echo "$key.$name: $val<br />\n"; } } ?>
|
第一个调用失败了,因为图像没有头信息。
test1.jpg: No header data found. test2.jpg: FILE.FileName: test2.jpg FILE.FileDateTime: 1017666176 FILE.FileSize: 1240 FILE.FileType: 2 FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT COMPUTED.html: width="1" height="1" COMPUTED.Height: 1 COMPUTED.Width: 1 COMPUTED.IsColor: 1 COMPUTED.ByteOrderMotorola: 1 COMPUTED.UserComment: Exif test image. COMPUTED.UserCommentEncoding: ASCII COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger. COMPUTED.Copyright.Photographer: Photo (c) M.Boerger COMPUTED.Copyright.Editor: Edited by M.Boerger. IFD0.Copyright: Photo (c) M.Boerger IFD0.UserComment: ASCII THUMBNAIL.JPEGInterchangeFormat: 134 THUMBNAIL.JPEGInterchangeFormatLength: 523 COMMENT.0: Comment #1. COMMENT.1: Comment #2. COMMENT.2: Comment #3end THUMBNAIL.JPEGInterchangeFormat: 134 THUMBNAIL.Thumbnail.Height: 1 THUMBNAIL.Thumbnail.Height: 1
|
|
注:
如果图像包含任何 IFD0 数据,则 COMPUTED 会包含有一项
ByteOrderMotorola,对于 little-endian (intel) 字节顺序,其值为 0,对于
big-endian (motorola) 字节顺序,其值为 1。这是 PHP 4.3 新加的。
当一个 Exif 头信息包含有一个 Copyright 时注意它本身可以包含两个值。解决方案和
Exif 2.10 标准不一致,COMPUTED 区段会同时返回
Copyright.Photographer 和
Copyright.Editor,但是 IFD0
区段则包含有一个字节数组用 NULL 字符分隔开两个项目。或者只有第一项如果数据类型错误的话(Exif
的正常行为)。COMPUTED 也会包含
Copyright,要么是原始的版权字符串,要么是逗号分隔的摄像与编辑的版权信息。
注:
UserComment 标记和 Copyright
有同样的问题。它也可以存储两个值,第一个是使用的编码方式,第二个是其值本身。如果这样则
IFD0 区段仅包含编码方式或者一个字节数组。COMPUTED
区段将存储两个值到 UserCommentEncoding 和
UserComment。UserComment
在两种情况下都可用因此应该优先使用它而不是 IFD0 区段中的该值。
如果用户注释使用 Unicode 或 JIS 编码并且可以使用 mbstring
模块,则此编码会根据 exif 在 php.ini 中的设置自动改变。这是 PHP 4.3 新加的。
注:
Height 和 Width 是用和 getimagesize()
一样的方法计算的,因此它们的值不能是任何返回的头信息的部分。此外
html 是一个 height/width 的文本字符串可以用于普通的 HTML 中。
注:
自 PHP 4.3 起本函数可以读取所有嵌入的 IFD
数据,包括数组(也返回数组)。此外嵌入的缩略图的大小包括在
THUMBNAIL 子数组中并且
exif_read_data() 可以将缩略图按照
TIFF 格式返回。最后,不再有返回值最大长度的限制了(直到达到内存限定)。
注:
本函数仅在 PHP 编译时使用了
--enable-exif 选项时可用。其功能和行为在
PHP 4.2 改变了,早期版本极不稳定。
自 PHP 4.3 起用户注释可以自动修改编码,假如 PHP 4 编译时使用了
--enable-mbstring 的话。
本函数不需要 GD 图像库。
参见 exif_thumbnail() 和 getimagesize()。