如果您收到以下非描述性错误消息
Uncaught exception 'ImagickException' with message 'Compare images failed'
检查您的图片尺寸!我将一个 21x20 png 与一个 20x20 png 进行了比较,结果导致了该错误。花了很长时间才弄明白尺寸必须完全相同。
(PECL imagick 2, PECL imagick 3)
Imagick::compareImages — 将图像与重建图像进行比较
返回一个包含重建图像和图像之间差异的数组。
在发生错误时抛出 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];
?>
如果您收到以下非描述性错误消息
Uncaught exception 'ImagickException' with message 'Compare images failed'
检查您的图片尺寸!我将一个 21x20 png 与一个 20x20 png 进行了比较,结果导致了该错误。花了很长时间才弄明白尺寸必须完全相同。
*绝对误差* 度量未列为可用的度量常量。但是,如果您需要,仍然可以通过传递 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];
?>