使用ImageMagick强调地“Diff”一张图片

6

跟进使用ImageMagick差异化图像

当你在处理表单(而不是图像)时,使用这种技术很难看到变化。我想展示一些黄色高亮的效果,可能比实际变化的像素大10-20个像素(填充)。

因此,不仅仅是这样:

enter image description here

更像这样的东西

enter image description here

在这个堆栈中,似乎我缺少一些可以使其工作的东西。

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \ '(' file2.png -flatten -grayscale Rec709Luminance ')' \ ... 这里吗?... '(' -clone 0-1 -compose darken -composite ')' \ ... 或者这里吗?... -channel RGB -combine diff.png

我也可以将其作为单独的命令运行,不需要快速执行,大部分都将离线运行。

我还尝试学习这里的技术(特别是当像素被扩展时,缩略图缩放如何给出我想要的效果),但这段代码使用的是库,而不是ImageMagick命令行工具。第248行 =>“尽可能使红色可见”

https://github.com/vslavik/diff-pdf/blob/master/diff-pdf.cpp#L218

一个示例表格是标准的W-9表格。我进行了两个微小的更改。
  • 第二部分...将2.向左移动了大约2个像素
  • 第二部分...在4.上,将单词is向右移动了2个像素

enter image description here

enter image description here

比较结果会显示出这些变化(以红色显示,但可能不太明显)

enter image description here

感谢任何帮助

1个回答

7

您可以在Imagemagick中使用-morphology dilate来增加红色区域的大小。例如,使用您提供的两种形式:

convert JW0wZ.png 1nHWT.png -compose difference -composite -morphology dilate disk:10 +level-colors black,red result.gif

这里输入图像描述

更新:

如果你想要透明背景,请尝试:

convert JW0wZ.png 1nHWT.png -compose difference -composite -morphology dilate disk:10 +level-colors "black,red" -fuzz 20% -transparent black result.png

这里输入图片描述

或者更好

convert JW0wZ.png 1nHWT.png -compose difference -composite -morphology dilate disk:10 -alpha copy -background red -alpha shape result2.png

在这里输入图片描述

更新2: 以下是如何将50%的黄色标记覆盖在两个原始图片上的方法。按需要更改值。我创建了一个差异图像并膨胀白色。然后我创建了一个50%的黄色图像。然后我使用差异图像作为掩模,将每个原始图像与黄色合成。请参见https://www.imagemagick.org/Usage/compose/#compose

convert JW0wZ.png 1nHWT.png \
\( -clone 0,1 -compose difference -composite -morphology dilate disk:10 \) \
\( -clone 0 -fill yellow -colorize 100 -channel a -evaluate set 50% +channel \) \
\( -clone 0,3,2 -compose over -composite +write 1.png \) \
\( -clone 1,3,2 -compose over -composite +write 2.png \) \
null:

这里输入图片描述

这里输入图片描述

要查看此内容,如果您使用Unix并安装了X11,则可以执行以下操作:

animate -delay 20 -resize 50% 1.png 2.png

很好,那我可以使用类似于“-transparent black -fill“rgba(255, 215, 0, 0.1)” -opaque red”的东西来将其用作覆盖在原始图像之一上,以进行黄色高亮显示...黄色的rgba(...)显示为不透明,而不是做10%的效果:( - Chris Go
请查看我附加的答案。 - fmw42
请查看我的第二次更新,以了解如何进行黄色叠加。如果这对您有帮助,请考虑点赞。 - fmw42
源PNG文件有什么特别之处吗?我使用的一些源PNG文件没有进行50%的alpha处理,而有些则有...这些PNG文件是使用原始SO问题从PDF中提取的。在Photoshop中打开它们并导出为PNG,然后再次运行似乎可以解决问题,因此可能是pdfimages上的某些问题。 - Chris Go
我认为 pdftocairo 和 pdftoppm 生成的源 PNG 文件输出为“png:IHDR.color_type:2 (真彩色)”,导致叠加层变得不透明。我必须使用 IM 将它们转换为“png:IHDR.color_type:6 (RGBA)”(目前 Photoshop 在导出为 PNG 时正在执行此操作)。 - Chris Go
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接