📅  最后修改于: 2023-12-03 14:45:20.259000             🧑  作者: Mango
在我们的应用程序中,删除图片是一个非常基本的操作。但是在很多情况下,我们不仅要删除图片本身,还要删除与之相关的一些元数据或属性。这就需要一个能够删除图片元数据或属性的函数。deleteImageProperty()
函数就是为此而生的。
函数原型:
bool deleteImageProperty (string $imagePath, string $propertyName)
函数参数:
$imagePath
:要删除元数据或属性的图片路径(必选参数)。$propertyName
:要删除的元数据或属性名称(必选参数)。函数返回值:
true
。false
。/**
* 删除图片元数据或属性
*
* @param string $imagePath 图片路径
* @param string $propertyName 元数据或属性名称
* @return bool 返回删除结果
*/
function deleteImageProperty (string $imagePath, string $propertyName) {
// 判断图片是否存在
if (!file_exists($imagePath)) {
return false;
}
// 获取图片信息
$imageInfo = getimagesize($imagePath);
// 判断图片类型
switch ($imageInfo[2]) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($imagePath);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($imagePath);
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif($imagePath);
break;
default:
return false;
}
// 删除指定元数据或属性
$deleted = false;
$imageProperties = array_flip(exif_read_data($imagePath, null, true, false));
if (isset($imageProperties[$propertyName])) {
$deleted = exiftool_delete_image_property($imagePath, $propertyName);
} elseif (isset($image[$propertyName])) {
unset($image[$propertyName]);
$deleted = true;
}
// 保存图片
if ($deleted) {
switch ($imageInfo[2]) {
case IMAGETYPE_JPEG:
imagejpeg($image, $imagePath);
break;
case IMAGETYPE_PNG:
imagepng($image, $imagePath);
break;
case IMAGETYPE_GIF:
imagegif($image, $imagePath);
break;
}
}
return $deleted;
}
deleteImageProperty()
函数可以删除指定图片的指定元数据或属性,包括 EXIF 元数据和图片属性,例如:
该函数首先会通过 PHP 内置函数 getimagesize()
获取图片信息,然后根据不同的图片类型使用对应的函数从文件中读取图片数据。接着,通过调用 exiftool_delete_image_property()
函数或直接操作图片数据来删除指定元数据或属性。最后,将修改后的图片保存回文件。
该函数使用了 PHP 内置的 function、getimagesize()、imagecreatefromjpeg()、imagecreatefrompng()、imagecreatefromgif() 等函数,其中 exiftool_delete_image_property()
函数可以使用 ExifTool 来实现,但需要先在系统中安装 ExifTool。