php计算两张照片的相似度,范围:0-100

可以是本地图片也可以是网络图片

需要gd库

/**

 * 计算图片相似度

 * @param $imagePath1 string 图片路径1

 * @param $imagePath2 string 图片路径2

 * @return float|int 0(完全两张图片)-100(两张一模一样的图片)

 */

function calculateImageSimilarity($imagePath1, $imagePath2)

{

    // 加载图片1

    $image1 = imagecreatefromstring(file_get_contents($imagePath1));

    if (!$image1) {

        echo "image1加载失败\n";

        return 0; // 加载失败,相似度为 0

    }

    // 加载图片2

    $image2 = imagecreatefromstring(file_get_contents($imagePath2));

    if (!$image2) {

        echo "image2加载失败\n";

        imagedestroy($image1);

        return 0; // 加载失败,相似度为 0

    }

    // 获取图片尺寸

    $width1 = imagesx($image1);

    $height1 = imagesy($image1);

    $width2 = imagesx($image2);

    $height2 = imagesy($image2);

    // 确保两张图片尺寸一致

    if ($width1 != $width2 || $height1 != $height2) {

        echo "图片尺寸不一致\n";

        imagedestroy($image1);

        imagedestroy($image2);

        return 0; // 尺寸不一致,相似度为 0

    }

    // 获取图片1的像素总数

    $totalPixels = $width1 * $height1;

    var_export("totalPixels:" . $totalPixels . "\n");

    // 计算差异像素数

    $diffPixels = 0;

    for ($x = 0; $x < $width1; $x++) {

        for ($y = 0; $y < $height1; $y++) {

            $rgb1 = imagecolorat($image1, $x, $y);

            $rgb2 = imagecolorat($image2, $x, $y);

            // 比较 RGB 值

            $r1 = ($rgb1 >> 16) & 0xFF;

            $g1 = ($rgb1 >> 8) & 0xFF;

            $b1 = $rgb1 & 0xFF;

            $r2 = ($rgb2 >> 16) & 0xFF;

            $g2 = ($rgb2 >> 8) & 0xFF;

            $b2 = $rgb2 & 0xFF;

            // 比较 RGB 值的差异

            $diffPixels += abs($r1 - $r2) + abs($g1 - $g2) + abs($b1 - $b2);

        }

    }

    // 将差异归一化到0-255范围内

    $diffPixels /= 3;

    // 计算相似度

    $similarity = max(0, min(100, 100 - ($diffPixels / ($totalPixels * 255) * 100)));

    var_export("diffPixels:" . $diffPixels . "\n");

    // 释放图片资源

    imagedestroy($image1);

    imagedestroy($image2);

    return $similarity;

}

相关推荐

  1. php计算照片相似范围0-100

    2024-07-13 11:46:03       25 阅读
  2. 【Python3】计算个字符串相似

    2024-07-13 11:46:03       55 阅读
  3. 数据相似计算

    2024-07-13 11:46:03       50 阅读
  4. 几种计算图像/向量相似指标(实现)

    2024-07-13 11:46:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 11:46:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 11:46:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 11:46:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 11:46:03       69 阅读

热门阅读

  1. 打工人如何应对AI对工作岗位的风险

    2024-07-13 11:46:03       25 阅读
  2. AM243-IPC

    AM243-IPC

    2024-07-13 11:46:03      23 阅读
  3. 【2024暑期实习】接到新需求该如何做?

    2024-07-13 11:46:03       22 阅读
  4. MATLAB中Simulink.exportToTemplate用法

    2024-07-13 11:46:03       22 阅读
  5. C#面:中间件的使用场景有哪些?

    2024-07-13 11:46:03       21 阅读
  6. vue3 学习笔记08 -- computed 和 watch

    2024-07-13 11:46:03       24 阅读