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

本文概述

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

文章图片
注意 为了提供图像的路径, 我们使用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 browserheader("Content-Type: image/png"); echo $result[0];

先前的代码将在浏览器上生成以下响应:
如何在PHP中使用Imagick区分(比较)2个图像

文章图片
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 browserheader("Content-Type: image/png"); echo $result[0];

先前的代码将生成以下图像作为输出:
如何在PHP中使用Imagick区分(比较)2个图像

文章图片
如有例外 如果正确配置了Imagick, 则此过程通常不会失败。如果你的代码遇到以下异常:未捕获的异常ImagickException比较图像失败, 我们建议你验证图像的尺寸, 因为如果比较两个尺寸不相同的图像会产生错误(通常会发生错误)不应该发生, 就好像尺寸不一样一样, 微分过程应该突出显示图像的尺寸不一样。
【如何在PHP中使用Imagick区分(比较)2个图像】编码愉快!

    推荐阅读