📜  PHP |想象一下 deleteImageProperty()函数(1)

📅  最后修改于: 2023-12-03 14:45:20.259000             🧑  作者: Mango

PHP | 想象一下 deleteImageProperty() 函数

简介

在我们的应用程序中,删除图片是一个非常基本的操作。但是在很多情况下,我们不仅要删除图片本身,还要删除与之相关的一些元数据或属性。这就需要一个能够删除图片元数据或属性的函数。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 元数据和图片属性,例如:

  • 删除图像的标题或说明;
  • 删除拍摄时间或地点等 EXIF 信息;
  • 删除 PNG 图片的透明度;
  • 等等。

该函数首先会通过 PHP 内置函数 getimagesize() 获取图片信息,然后根据不同的图片类型使用对应的函数从文件中读取图片数据。接着,通过调用 exiftool_delete_image_property() 函数或直接操作图片数据来删除指定元数据或属性。最后,将修改后的图片保存回文件。

该函数使用了 PHP 内置的 function、getimagesize()、imagecreatefromjpeg()、imagecreatefrompng()、imagecreatefromgif() 等函数,其中 exiftool_delete_image_property() 函数可以使用 ExifTool 来实现,但需要先在系统中安装 ExifTool。