PHP Conference Japan 2024

Imagick::compareImages

(PECL imagick 2, PECL imagick 3)

Imagick::compareImages比较图像与重建图像

描述

public Imagick::compareImages(Imagick $compare, int $metric): array

返回一个数组,包含重建的图像以及图像之间的差异。

参数

compare

要比较的图像。

metric

提供一个有效的度量类型常量。请参考此 度量常量列表

返回值

返回一个数组,包含重建的图像以及图像之间的差异。

错误/异常

发生错误时抛出 ImagickException。

示例

示例 #1 使用 Imagick::compareImages()

比较图像并显示重建的图像

<?php

$image1
= new imagick("image1.png");
$image2 = new imagick("image2.png");

$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");

header("Content-Type: image/png");
echo
$result[0];

?>

添加注释

用户贡献的注释 2 条注释

6
info at celeste-design dot de
10 年前
如果您收到以下无描述性的错误消息

未捕获的异常“ImagickException”,消息为“比较图像失败”

检查您的图片尺寸!我将一个 21x20 的 png 与一个 20x20 的 png 进行了比较,导致了这个错误。我花了很长时间才发现尺寸必须完全相同。
2
Tim K and Sam M @netflix
10 年前
绝对误差度量标准未列为可用度量标准常量。但是,如果需要,您仍然可以通过传递 AE 的内部常量定义(即 1)来使用它。当您希望使用所需的模糊因子进行比较时,这很有用。示例

<?php
// 初始化图像对象
$image1 = new imagick();
$image2 = new imagick();

// 设置模糊因子(必须在读取图像之前完成)
$image1->SetOption('fuzz', '2%');

// 读取图像
$image1->readImage("php_step29_actual.png");
$image2->readImage("php_step29_correct.png");

// 使用 METRIC=1(绝对误差)比较图像
$result = $image1->compareImages($image2, 1);

// 打印结果
echo "The image comparison 2% Fuzz factor is: " . $result[1];
?>
To Top