Magick.net比较

Magick.net Compare

我正在使用 Magick.NET (Q16-x64 v7.0.0.0011) 比较图像。当我使用 ImageMagick 的命令行版本并在没有任何特殊选项的情况下进行比较时,它会给出一个图像,其中相同的部分显示为背景变亮,差异部分显示为红色。我试图在 Magick.NET 中复制此行为。我尝试了以下代码:

var image1Path = @"D:\Compare Test\image1.jpg";
var image2Path = @"D:\Compare Test\image2.jpg";

var diffImagePath = @"D:\Compare Test\imageDiff.jpg";

using (MagickImage image1 = new MagickImage(image1Path))
using (MagickImage image2 = new MagickImage(image2Path))
using (MagickImage diffImage = new MagickImage())
{
    image1.Compare(image2, ErrorMetric.Absolute, diffImage);
    diffImage.Write(diffImagePath);
}

不过我最终得到的是一个只显示差异的文件。如果你 运行 带有“-compose src”的命令行版本,这似乎是你会得到的。不同之处在于 SetHighlightColor 设置的是什么,图像的其余部分是根据 SetLowlightColor 的纯色。我尝试了几种不同的文件和文件格式,但结果相同。

在以下 SO 问题的答案中引用 "Illustrated Examples":Diff an Image 我得到的是第一个例子。 我想要的是最后一个例子。

如有任何帮助,我们将不胜感激。

用于 last example 的 CLI compare 方法是:

compare img1.png img2.png delta.png

这并没有明确设置一个-compose方法。也就是说,compare 使用了它的默认组合方法,即 SrcOver。所以命令更短,但等同于

compare img1.png img2.png -compose SrcOver delta.png

如果你有兴趣测试ALL可用的组合方式进行比较,你可以运行

compare -list compose

它应该return一个类似这样的列表:

Atop Blend Blur Bumpmap ChangeMask Clear ColorBurn ColorDodge Colorize CopyBlack CopyBlue CopyCyan CopyGreen Copy CopyMagenta CopyOpacity CopyRed CopyYellow Darken DarkenIntensity DivideDst DivideSrc Dst Difference Displace Dissolve Distort DstAtop DstIn DstOut DstOver Exclusion HardLight HardMix Hue In Lighten LightenIntensity LinearBurn LinearDodge LinearLight Luminize Mathematics MinusDst MinusSrc Modulate ModulusAdd ModulusSubtract Multiply None Out Overlay Over PegtopLight PinLight Plus Replace Saturate Screen SoftLight Src SrcAtop SrcIn SrcOut SrcOver VividLight Xor

要实际看到这些方法的效果,试试这个(on Mac OS X or Linux -- DOS cmd/*.bat 你得自己想出来):

for i in $(compare -list compose); do
  compare img1.png img2.png -compose ${i} composed-with-${i}-delta.png
done

你会发现有很多有趣的效果有待发现:)