📜  PHP | read_exif_data()函数(1)

📅  最后修改于: 2023-12-03 15:33:34.292000             🧑  作者: Mango

PHP | read_exif_data()函数

在处理图片时,我们可能需要获取图片的元数据,比如光圈、快门速度、ISO等信息,这些信息可以在图片的Exif数据中找到。PHP提供了一个函数read_exif_data()用于读取Exif数据。

函数语法
array read_exif_data ( string $filename , string $sections = null , bool $arrays = false , bool $thumbnail = false )
参数说明
  • filename:需要读取Exif数据的图片路径。
  • sections:指定需要读取哪些部分的Exif数据,不同的部分之间用英文逗号分隔。可选参数有:
    • IFD0:主图像文件夹(Main Image File Directory)。
    • THUMBNAIL:缩略图(缩略图是用来快速预览图片的小图)。
    • EXIF:主Exif数据。
    • COMPUTED:计算所得的数据,比如相机制造商、模型和拍摄时间等。
    • ANY_TAG:任何标签,包括IFD0THUMBNAILEXIFGPS
    • IFD1:辅助图像文件夹(Secondary Image File Directory)。
  • arrays:是否将Exif数据中的标记值转换为数组。如果为true,则会将每个标签值视为数组,否则会将它们转换为字符串。默认为false
  • thumbnail:是否获取缩略图的Exif数据。如果为true,则连同缩略图的Exif数据一起返回。默认为false
返回值

如果读取成功,read_exif_data()函数会返回一个关联数组,包含指定的Exif数据部分和标记。对于每个标记,关联数组的键是标记的名称,值是标记的数值。

代码示例
$exif = read_exif_data('image.jpg', 'IFD0, EXIF');

上面的代码读取了image.jpg文件的IFD0EXIF部分的Exif数据,并将结果保存在变量$exif中。

为了展示该函数的使用,下面以获取图片的拍摄时间为例:

$dateTime = false;
if (!empty($exif['DateTimeOriginal'])) {
  $dateTime = $exif['DateTimeOriginal'];
} elseif (!empty($exif['DateTimeDigitized'])) {
  $dateTime = $exif['DateTimeDigitized'];
} elseif (!empty($exif['DateTime'])) {
  $dateTime = $exif['DateTime'];
}

if ($dateTime) {
  echo '拍摄时间:' . $dateTime;
} else {
  echo '无法获取拍摄时间。';
}

上面的代码首先检查Exif数据中是否包含DateTimeOriginalDateTimeDigitizedDateTime标记。如果有,就将其值赋给变量$dateTime。最后,根据$dateTime的值输出相应的消息。

总结

PHP的read_exif_data()函数可以方便地读取图片的Exif数据,并能够精确地获取各种元数据。在实际开发中,可能还需要结合其他函数来处理读取到的数据,比如通过imagecreatefromjpeg()函数创建图像资源、通过imagecopyresampled()函数改变图像大小或者为图片加上水印等。