 |
exif_read_data (PHP 4 >= 4.2.0, PHP 5) exif_read_data --
从 JPEG 或 TIFF
文件中读取 EXIF 头信息
说明array exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]] )
exif_read_data() 函数从 JPEG 或 TIFF 图像文件中读取 EXIF
头信息。这样就可以读取数码相机产生的元数据。
Exif 头信息往往存在于数码相机生成的 JPEG/TIFF
图像中,但不幸的是每个数码相机制造商的标记都不同,因此(编写代码时)不能依赖于某个特定的
Exif 头信息。
Height 和 Width 是用和 getimagesize()
一样的方法计算的,因此它们的值不能是任何返回的头信息的部分。此外
html 是一个 height/width 的文本字符串可以用于普通的 HTML 中。
当一个 Exif 头信息包含有一个 Copyright 时注意它本身可以包含两个值。解决方案和
Exif 2.10 标准不一致,COMPUTED 区段会同时返回
Copyright.Photographer 和
Copyright.Editor,但是 IFD0
区段则包含有一个字节数组用 NULL 字符分隔开两个项目。或者只有第一项如果数据类型错误的话(Exif
的正常行为)。COMPUTED 也会包含
Copyright,要么是原始的版权字符串,要么是逗号分隔的摄像与编辑的版权信息。
UserComment 标记和 Copyright
有同样的问题。它也可以存储两个值,第一个是使用的编码方式,第二个是其值本身。如果这样则
IFD0 区段仅包含编码方式或者一个字节数组。COMPUTED
区段将存储两个值到 UserCommentEncoding 和
UserComment。UserComment
在两种情况下都可用因此应该优先使用它而不是 IFD0 区段中的该值。
exif_read_data() 还会根据 EXIF
规范(http://exif.org/Exif2-2.PDF,第
20 页)来验证 EXIF 数据。
参数
- filename
被读取的图像文件名。不能是 URL。
- sections
是需要存在于文件中的逗号分隔的区段列表用来产生结果数组。如果未找到所请求的区段则返回值为
FALSE。
- arrays
指定了是否每个区段都成为一个数组。sections
COMPUTED,THUMBNAIL
和COMMENT
区段总是成为数组,因为它们里面包含的名字和其它区段冲突。
- thumbnail
当设定为 TRUE 时,读取缩略图本身。否则只读取标记数据。
返回值
返回一个关联数组,键名是头信息名,值为与其相应的值。如果没有可供返回的数据,exif_read_data()
将返回 FALSE。
范例
例子 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 />\n";
$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
|
|
10-Aug-2004 01:11
I've just released the "PHP JPEG Metadata Toolkit" which allows reading, writing and displaying of EXIF information, and does not need the --enable-exif option in PHP4.
It has been tested on 466 different models of digital cameras!
It can decode the following EXIF makernotes:
Agfa, Canon, Casio, Contax, Epson, Fujifilm, Konica, Minolta, Kyocera, Nikon, Olympus, Panasonic, Pentax (Asahi), Ricoh and Sony
Additionaly it can decode IPTC, XMP, Photoshop IRB and many other types of JPEG metadata
Try it out, and download it at:
http://www.ozhiker.com/electronics/pjmt/index.html
noway at nowaysoft dot com
24-Feb-2004 12:44
Exif is very unstable under php4.1.2
If you have some problem, (the function didnt return anything, like a blocking call) try this:
$file = './image.jpg';
getimagesize ( $file , $info);
$exif = array();
if (isset($info)) {
foreach($info as $key => $val) {
if ($key != 'APP1') { $exif = read_exif_data($file); break; }
}
}
-- Sharp
|  |