其他分享
首页 > 其他分享> > php 检测图片是否篡改过

php 检测图片是否篡改过

作者:互联网

在 PHP 中,检测图片是否被篡改过是一项复杂的任务,因为这通常涉及到图像处理和比对技术。以下是一些可能的方法和思路,您可以根据需求进行实现:

方法 1: 校验图像的哈希值

一种简单的方法是对图像计算哈希值,并将其存储起来。每当您需要验证图像时,可以重新计算哈希值并与存储的哈希值进行比较。

<?php
function isImageTampered($originalImagePath, $currentImagePath) {
    $originalHash = hash_file('sha256', $originalImagePath);
    $currentHash = hash_file('sha256', $currentImagePath);
    
    return $originalHash !== $currentHash; // 基于哈希值比较
}

// 示例用法
$originalImage = 'path/to/original/image.jpg';
$currentImage = 'path/to/current/image.jpg';

if (isImageTampered($originalImage, $currentImage)) {
    echo "图片已被篡改!";
} else {
    echo "图片未被篡改。";
}
?>

PHP

方法 2: 使用数字水印

数字水印是嵌入到图像中的信息,可以用于验证图像的完整性。如果您在图像中嵌入了水印,可以在需要时提取这个水印并进行验证。

方法 3: 使用图像比较库

您可以使用图像处理库(如 GD 或 Imagick)来比较两张图像的差异。以下是一个使用 GD 库的示例:

<?php
function compareImages($image1, $image2) {
    $img1 = imagecreatefromjpeg($image1);
    $img2 = imagecreatefromjpeg($image2);

    // 检查文件大小和尺寸是否相同
    if (imagesx($img1) != imagesx($img2) || imagesy($img1) != imagesy($img2)) {
        return true; // 视为篡改
    }

    // 进行逐像素比较
    for ($y = 0; $y < imagesy($img1); $y++) {
        for ($x = 0; $x < imagesx($img1); $x++) {
            if (imagecolorat($img1, $x, $y) !== imagecolorat($img2, $x, $y)) {
                return true; // 发现不匹配,视为篡改
            }
        }
    }
    return false; // 无篡改
}

// 示例使用
$imagePath1 = 'path/to/original/image.jpg';
$imagePath2 = 'path/to/current/image.jpg';

if (compareImages($imagePath1, $imagePath2)) {
    echo "图片已被篡改!";
} else {
    echo "图片未被篡改。";
}
?>

标签:
来源: