个性化阅读
专注于IT技术分析

如何在PHP中使用Imagick区分(比较)2个图像

本文概述

如今, 有很多高级跨平台的图像文件比较工具, 可以在任何计算机上轻松使用。如果你是PHP开发人员, 则可以使用Imagick在服务器中实现此功能。在本文中, 我们将向你展示如何在PHP中使用Imagick区分以下两个图像(图像A和图像B):

比较imagick的图像

注意

为了提供图像的路径, 我们使用getcwd函数检索当前的工作目录, 因为你可能知道Imagick在相对路径下无法正常工作。相反, 你应该提供图像的绝对路径。

1.与背景上的次要图像进行比较

作为第一个示例, 我们将向你说明如何以最简单的方式区分2张图像。默认情况下, compareImages方法将在第一张图像上抽象地构成图像, 并自动突出显示与第一张红色图像不匹配的内容。

<?php 

// Create an instance of every image to compare
$image1 = new Imagick(getcwd(). "/example_a.png");
$image2 = new Imagick(getcwd(). "/example_b.png");

// Compare the Images
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
// The first item of the result array is an Imagick Image object
// so convert it into its PNG format
$result[0]->setImageFormat("png");

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

先前的代码将在浏览器上生成以下响应:

Imagick撰写差异并突出显示

2.检索具有差异的透明图像

如果你无法欣赏与Imagick基本示例生成的图像之间的差异, 那么你想改为将图像绘制在新的空白图像上。你可以依靠ImageMagick的逻辑来实现此目的, 特别是通过在命令行中使用compose参数。图像合成是以各种方式合并两个(只有两个)图像的过程。从使用Imagick合成图像的所有方式中, 我们将使用一种”清除”方法, 即Src。你可以使用setOption方法将此选项添加到图像。使用lowlight-color选项, 你可以指定结果图像的背景色, 然后最终读取原始图像(图像1)以与另一个图像进行比较。结果对象可用于检索结果图像。

查看以下示例:

<?php 
// Create an empty Imagick object (to be able to set some options later)
$image1 = new Imagick(); 
// Create
$image2 = new Imagick(getcwd(). "/example_b.png");

// Set Lowlight (resulting background) to transparent, not "original image with a bit of opacity"
$image1->setOption('lowlight-color', 'transparent');

// Switch the default compose operator to Src, like in example
$image1->setOption('compose', 'Src');

// Now read the original image (image 1)
$image1->readImage(getcwd(). "/example_a.png");

// Result will not have a background
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);

$result[0]->setImageFormat("png");

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

先前的代码将生成以下图像作为输出:

想象差异图像

如有例外

如果正确配置了Imagick, 则此过程通常不会失败。如果你的代码遇到以下异常:未捕获的异常ImagickException比较图像失败, 我们建议你验证图像的尺寸, 因为如果比较两个尺寸不相同的图像会产生错误(通常会发生错误)不应该发生, 就好像尺寸不一样一样, 微分过程应该突出显示图像的尺寸不一样。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在PHP中使用Imagick区分(比较)2个图像

评论 抢沙发

评论前必须登录!