我正在使用Magick.NET(Q16-x64 v7.0.0.011)来比较图像。当我使用命令行版本的ImageMagick并在没有任何特殊选项的情况下进行比较时,它会给出一个图像,其中相同的部分显示为亮背景,而不同的部分则显示为红色。我正试图在Magick.NET中复制这种行为。我尝试了以下代码:
var image1Path = @"D:Compare Testimage1.jpg";
var image2Path = @"D:Compare Testimage2.jpg";
var diffImagePath = @"D:Compare TestimageDiff.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问题答案中的"图解示例":区分图像我得到的是第一个例子。我想要的是最后一个例子。
如有任何帮助,我们将不胜感激。
用于最后一个示例的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
它应该返回一个类似的列表:
Atop Blend Blur Bumpmap ChangeMask Clear ColorBurn ColorDodge Colorize CopyBlack CopyBlue CopyCyan CopyGreen CopyMagenta CopyOpacity CopyRed CopyYellow Darken DarkenIntensity DivideDst DivideSrc Dst Difference Displace Dissolve Distort DstAtop DstIn DstOut DstOver Exclusion HardLight HardMix Hue In Lighten Lighting Intensity LinearBurn LinearDodge LinearLight Luminize Mathematics MinusDstMinusSrc Modulate ModulusAdd ModulusSubtract Multiply None-Out Over PegtopLight PinLight Plus Replace Saturate Screen SoftLight Src SrcAtop SrcIn SrcOut SrcOver VividLight Xor
要真正查看这些方法的效果,请尝试以下操作(在Mac OS X或Linux上--DOS cmd
/*.bat
,您必须自己想出):
for i in $(compare -list compose); do
compare img1.png img2.png -compose ${i} composed-with-${i}-delta.png
done
你会发现有一些有趣的效果需要发现:)