PHP图片操作:如何解析和修改图片的Exif信息

什么是Exif信息

Exif是指Exchangeable image file format(可交换图像文件格式),是一种用于JPEG和TIFF格式的元数据的标准格式。它可以将很多关于照片的信息嵌入到照片文件里,包括拍摄设备、时间、地点、曝光参数等。

每张照片的Exif信息都是独一无二的,因为每张照片的拍摄条件都是不同的,这些信息可以用来描述照片的拍摄环境和相片本身的特征。Exif信息对于一些专业人士来说是非常有用的,比如摄影师、记者等等。

使用PHP解析图片的Exif信息

PHP提供了一个非常方便的函数可以帮我们解析图片的Exif信息,这个函数就是exif_read_data

这个函数的语法如下:

array exif_read_data ( string $filename [, string $sections = NULL [, bool $arrays = NULL [, bool $thumbnail = NULL ]]] )

其中,$filename参数表示要解析的图片文件名。

下面我们来看一个例子:

$exif = exif_read_data('photo.jpg');

// 输出所有Exif信息

print_r($exif);

// 输出照片的拍摄时间

echo "照片拍摄时间:" . $exif['DateTimeOriginal'] . "\n";

上面的代码通过exif_read_data函数解析了一张名为photo.jpg的照片的Exif信息。最后输出了照片的拍摄时间。

Exif信息中的GPS坐标

Exif信息中还包含了照片拍摄时的GPS坐标信息,可以用来确定照片的拍摄地点。下面是一个获取照片的GPS坐标的例子:

$exif = exif_read_data('photo.jpg', 'GPS', true);

if (isset($exif['GPSLatitude'], $exif['GPSLongitude'], $exif['GPSLatitudeRef'], $exif['GPSLongitudeRef'])) {

$lat = $exif['GPSLatitude'];

$lon = $exif['GPSLongitude'];

// 计算照片的纬度和经度

$lat_degrees = $lat[0];

$lat_minutes = $lat[1] / 60;

$lat_seconds = $lat[2] / 3600;

$lon_degrees = $lon[0];

$lon_minutes = $lon[1] / 60;

$lon_seconds = $lon[2] / 3600;

$lat_direction = ($exif['GPSLatitudeRef'] == 'S' or $exif['GPSLatitudeRef'] == 'W') ? -1 : 1;

$lon_direction = ($exif['GPSLongitudeRef'] == 'S' or $exif['GPSLongitudeRef'] == 'W') ? -1 : 1;

$latitude = $lat_direction * ($lat_degrees + $lat_minutes + $lat_seconds);

$longitude = $lon_direction * ($lon_degrees + $lon_minutes + $lon_seconds);

echo "照片拍摄地点: {$latitude}, {$longitude}";

}

上面的代码通过exif_read_data函数解析了一张名为photo.jpg的照片的GPS坐标信息,并计算了照片的拍摄地点。

使用PHP修改图片的Exif信息

如果我们需要修改一张照片的Exif信息,PHP同样可以帮我们实现这个功能。我们需要使用exif_read_data函数读取出原始的Exif信息,然后使用exif_thumbnail函数获取照片的缩略图,最后使用exif_write_data函数将新的Exif信息写回照片文件。

下面是一个修改照片标题和描述的例子:

$filename = 'photo.jpg';

$title = '这是一张美丽的照片';

$description = '这张照片拍摄于2021年夏天,拍摄地点是海边。';

$exif = exif_read_data($filename);

// 修改照片标题和描述

$exif['ImageDescription'] = $description;

$exif['Title'] = $title;

// 获取照片缩略图

$thumbnail_data = exif_thumbnail($filename, $width, $height, $type);

// 将新的Exif信息写回照片文件

exif_write_data($exif, $filename);

// 将新的缩略图保存到磁盘

file_put_contents('thumbnail.jpg', $thumbnail_data);

上面的代码修改了一张名为photo.jpg的照片的标题和描述,然后使用exif_thumbnail函数获取照片的缩略图,并使用exif_write_data函数将新的Exif信息写回照片文件,最后将缩略图保存到磁盘。

注意事项

需要注意的是,修改照片的Exif信息会改变照片的文件内容,因此会导致照片的MD5值发生变化,这个问题需要在程序设计时予以考虑。

总结

本文介绍了如何使用PHP解析和修改图片的Exif信息,Exif信息包含了照片的拍摄设备、时间、地点、曝光参数等信息,对于一些需要对照片进行分析和处理的工作,Exif信息是非常有用的。PHP提供了exif_read_dataexif_thumbnailexif_write_data等函数来帮助我们解析和修改照片的Exif信息。

后端开发标签