在线文档教程

exif_read_data

exif_read_data

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

exif_read_data - 从图像文件中读取EXIF标头

描述

array exif_read_data ( mixed $stream [, string $sections = NULL [, bool $arrays = false [, bool $thumbnail = false ]]] )

exif_read_data()从图像文件中读取EXIF标头。这样您就可以读取数码相机生成的元数据。

EXIF标题通常出现在数码相机生成的JPEG / TIFF图像中,但不幸的是,每个数码相机制造商对于如何实际标记图像都有不同的想法,因此您不能总是依赖特定的Exif标题。

高度宽度的计算方式与getimagesize()相同,因此它们的值不能是返回的任何标题的一部分。另外,html是在普通HTML中使用的高度/宽度文本字符串。

当Exif标题包含版权说明时,它本身可以包含两个值。由于Exif 2.10标准中的解决方案不一致,因此COMPUTED 部分将返回Copyright.PhotographerCopyright.Editor条目,而IFD0部分包含具有空字符的字节数组,分割两个条目。或者只是第一个条目,如果数据类型错误(Exif的正常行为)。该COMPUTED也会包含条目版权所有要么是原始的版权字符串,或者逗号分隔的摄像与编辑的版权的名单。

标签UserComment与版权标签具有相同的问题。它可以存储两个值。首先使用编码,其次是数值本身。如果是这样,IFD部分只包含编码或字节数组。该COMPUTED节将同时存储在各个入口UserCommentEncodingUserComment在。条目UserComment在两种情况下均可用,所以应优先使用IFD0部分中的值。

exif_read_data()还根据EXIF规范验证EXIF数据标签(»http://exif.org/Exif2-2.PDF,page 20)。

注意:Windows Me / XP可以在连接相机时擦除Exif标头。

参数

stream

图像文件的位置。这可以是文件的路径(也可以像往常一样支持流封装)或流资源。

sections

是逗号分隔的部分列表,需要在文件中出现才能生成结果数组。如果没有找到请求的部分,则返回值为FALSE

文件FileName,FileSize,FileDateTime,SectionsFound
COMPUTEDHTML,宽度,高度,IsColor等(如果可用)。高度和宽度的计算方式与getimagesize()相同,因此它们的值不能是返回的任何标题的一部分。另外,html是在普通HTML中使用的高度/宽度文本字符串。
ANY_TAG任何具有标签的信息,例如IFD0,EXIF,...
IFD0IFD0的所有标记的数据。在正常的图像文件中包含图像大小等等。
THUMBNAIL如果文件具有第二个IFD,则应该包含缩略图。所有关于嵌入式缩略图的标记信息都存储在本节中。
COMMENT 评论JPEG图像的标题。
EXIFEXIF部分是IFD0的子部分。它包含更多关于图像的详细信息。这些条目中的大部分都与数码相机有关。

arrays

指定每个部分是否成为一个数组。 COMPUTED,THUMBNAIL和COMMENT节总是成为数组,因为它们可能包含名称与其他节相冲突的值。

thumbnail

当设置为TRUE时,缩略图本身被读取。 否则,只有标记的数据被读取。

返回值

它返回一个关联数组,其中数组索引是标题名称,数组值是与这些标题相关联的值。 如果没有数据可以返回,exif_read_data()将返回FALSE。

更新日志

描述
7.2.0filename参数已重命名为流,现在支持本地文件或流资源。
7.2.0增加了对以下EXIF格式的支持:三星DJI松下索尼宾得美能达Sigma / Foveon AGFA京瓷理光爱普生
4.3.0可以读取所有嵌入的IFD数据,包括数组(如此返回)。此外,嵌入式缩略图的大小在THUMBNAIL子数组中返回,并且可以返回TIFF格式的缩略图。而且,返回值不再有最大长度(直到达到内存限制)。
4.3.0如果PHP支持mbstring,用户注释可以自动更改编码。另外,如果用户评论使用Unicode或JIS编码,则该编码将根据php.ini中的exif ini设置自动更改
4.3.0如果图像包含任何IFD0数据,则COMPUTED包含ByteOrderMotorola条目,对于little-endian(intel)为0,对于big-endian(motorola)字节顺序为1。此外,如果数据类型错误,COMPUTED和UserComment不再仅包含第一个版权条目。

  • Samsung

  • DJI

  • Panasonic

  • Sony

  • Pentax

  • Minolta

  • Sigma/Foveon

  • AGFA

  • Kyocera

  • Ricoh

  • Epson

4.3.0 Can read all embedded IFD data including arrays (returned as such). Also the size of an embedded thumbnail is returned in a _THUMBNAIL_ subarray, and can return thumbnails in TIFF format. Also, there is no longer a maximum length for returned values (not until the memory limit has been reached). 4.3.0 If PHP has [mbstring](https://secure.php.net/manual/en/ref.mbstring.php) support, the user comment can automatically change encoding. Also, if the user comment uses _Unicode_ or _JIS_ encoding this encoding will automatically be changed according to the exif ini settings in php.ini 4.3.0 If the image contains any _IFD0_ data then _COMPUTED_ contains the entry _ByteOrderMotorola_ which is 0 for _little-endian_ (intel) and 1 for _big-endian_ (motorola) byte order. Also, _COMPUTED_ and _UserComment_ no longer only contain the first copyright entry if the datatype was wrong.

例子

示例#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

示例#2 exif_read_data()带有自PHP 7.2.0起的可用流

<?php // Open a the file, this should be in binary mode $fp = fopen('/path/to/image.jpg', 'rb' if (!$fp) {     echo 'Error: Unable to open image for reading';     exit; } // Attempt to read the exif headers $headers = exif_read_data($fp if (!$headers) {     echo 'Error: Unable to read exif headers';     exit; } // Print the 'COMPUTED' headers echo 'EXIF Headers:' . PHP_EOL; foreach ($headers['COMPUTED'] as $header => $value) {     printf(' %s => %s%s', $header, $value, PHP_EOL } ?>

上面的例子会输出类似于:

EXIF Headers: Height => 576 Width => 1024 IsColor => 1 ByteOrderMotorola => 0 ApertureFNumber => f/5.6 UserComment => UserCommentEncoding => UNDEFINED Copyright => Denis Thumbnail.FileType => 2 Thumbnail.MimeType => image/jpeg

注意

注意:如果启用了mbstring,exif将尝试处理unicode并按照exif.decode_unicode_motorola和exif.decode_unicode_intel指定的方式选择字符集。exif扩展名不会尝试自行找出编码,并且由用户在调用exif_read_data()之前通过设置这两个ini指令之一来正确指定用于解码的编码。

扩展内容

  • exif_t​​humbnail() - 检索图像的嵌入缩略图

  • getimagesize() - 获取图像的大小

← exif_imagetype

exif_tagname →