18

好吧,我现在已经在 java 中编写了一个基本的无损 jpeg 连接器,但我想将它生成的文件与原始文件进行比较。

我只能在十六进制编辑器中比较这么多,有没有人知道一种简单的方法,基于软件或基于 Java 的(最好是软件,因为我现在不想再编码了!)我可以比较两个图像并生成“差异图” “哪里的像素不一样?

谢谢。

4

8 回答 8

19

感谢您的建议。

我首先尝试了 Gimp 方法,该方法效果很好,除非图像之间的差异非常小。我找不到“增强差异”选项来使差异明显,直方图也只能粗略表示差异。

最后,我使用了ImageMagick,这是我前段时间安装的,但我忘记了。创建差异/比较图像就像键入一样简单:

 compare first.jpg second.png difference.gif

在命令行中。

这一切都很好地解释了here。

于 2009-03-31T00:31:59.110 回答
5

TortoiseIDiff 是一个免费的图像差异查看器:

http://tortoisesvn.tigris.org/TortoiseIDiff.html

它是 TortoiseSVN 的一部分,但可以在没有 Subversion 的情况下使用。

根据您的项目,并非所有受版本控制的文件都是文本文件。很可能您也会有图像,例如文档/帮助文件的屏幕截图和图表。

对于这些文件,不可能使用通用文件比较工具,因为它们只能处理文本文件并逐行比较。这是 Tortoise Image Diff 工具 (TortoiseIDiff) 的用武之地。它可以并排显示两个图像,甚至可以将图像显示在彼此之间进行 alpha 混合。

于 2009-04-01T14:12:54.807 回答
4

你可以做的比Perceptual Diff差很多。

于 2009-03-28T01:39:45.257 回答
2

最好的方法是使用 Pix for windows(随 DirectX SDK 提供)。支持位图、PNG 和 Jpeg...享受吧!

于 2011-08-19T22:46:13.300 回答
1

使用像 Photoshop 或 Gimp 之类的具有多个图层的图像编辑器。创建一个图像,其中每个源图像位于一个单独的图层中。

此时,您可以通过关闭和打开顶层的可见性来直观地比较图像。

在大多数体面的编辑器中,您还可以将顶层设置为“差异”模式。现在每个图像像素的值是基础图像中像素值的绝对差。您可以使用例如直方图工具来查看图像是否相同。如果它们相同,则所有像素值都将为 0。

于 2009-03-28T00:03:50.467 回答
1

对于这样的东西,我喜欢netpbm/pbmplus工具包。您可以使用djpegpnmtoplainpnm将每个图像转换为简单的 ASCII 格式。然后,您只需读取这两个文件并发出一个新图像,该图像显示像素不同的地方。例如,您可以计算 RGB 空间中新旧像素之间的欧几里德距离,并为零差异发出白色像素,为小差异发出浅灰色,为较大差异发出较暗的像素,等等。ASCII 格式很简单,并且在手册页上有很好的记录,所有标准查看器程序都可以直接查看它。

于 2009-03-28T01:11:47.057 回答
1

最新版本的 Araxis Merge 将进行图像差异 ( http://www.araxis.com/merge/topic_comparing_image_files.html )。

不幸的是,它不是一个免费的应用程序,所以你是否愿意为此付费是另一回事......

于 2009-03-28T01:54:52.710 回答
0

还有一个名为 Resemble.js 的便捷网络应用程序,它可以逐个像素地分析和比较图像。根据您的喜好,图像中的不同像素(如果有)以粉红色或黄色突出显示。

于 2016-04-14T06:55:57.560 回答