2011-06-17 48 views
3

我需要一个制作移动图像的批处理过程,并决定使用ImageMagick,但不幸的是我的一个要求是所生成的图像在操作系统中是相同的,因为我将它们发回和我的本地系统(Windows)和服务器(Linux)之间。但似乎无论何时我打电话ImageMagick在Windows和Linux上制作不同的图像

convert test.jpg -resize 25% test-small.jpg 

该过程在两台机器上创建不同的图像。我知道这是因为当我使用校验和时,值不完全相同。

有没有人知道为什么会发生这种情况?也许有一些解决方法,无论是通过使用不同的可执行文件,或传递一个参数,跨操作系统产生相同的图像?

+0

一个选项是在你的电脑中安装Linux虚拟机,并做我想到的是在linux – 2011-06-17 03:02:56

+0

的转换,你的意思是像Cygwin的?我被它烧了很多次,所以我真的在寻找一些跨越不同环境的东西。奇怪的是,当我使用jpegtran优化我的jpegs时,它为两个操作系统创建了相同的图像。我想知道它是否与无损失有关。我不是一个图像处理爱好者,所以这对我来说是新的。 – jimlamiell 2011-06-17 03:17:04

+0

我的意思是使用virtualbox或vmplayer,你既可以在windows上安装linux,也可以同时运行两者。例如下载一个ubuntu iso,并创建一个新的虚拟机。您需要指定RAM,HD空间和ubuntu iso映像位置的数量。 – 2011-06-17 03:34:38

回答

1
  1. 的文件有比他们更多的像素 - 如果你要比较的图像,编写适用于只是在解码像素数据的校验和。那至少会告诉你图像看起来是否相同。由于许多因素,文件的内部可能会有所不同。

  2. 调整大小取决于浮点运算,并且您不能指望跨计算机的大小相同。因此,不是只使用校验和,而是想要查看每个像素是否位于另一个文件中相关位置的容差范围内。

在这些链接看看:

1

JPEG算法是非确定性的。无法确保在两个系统之间甚至在同一系统上的两个调用之间生成相同的映像。

+0

PNG也出现这种情况,算法也类似吗? – jimlamiell 2011-06-17 03:40:22

+0

@jimlamiell:对于png,请尝试使用optipng或pngcrush删除尽可能多的元数据。 – Benoit 2011-06-17 15:43:20

0

依托 '校验' 或 '的md5sum' 或类似的比较两个图像不是明智的选择。这只能验证文件是否确实相同。然而,如果你有不同的结果,这可能是由于一些随机元数据值中的一个字节不同(像一个简单的时间戳),而根本没有像素差异。

要发现两个图像之间的像素差,你可以使用ImageMagick的compare这样的:

compare image1.jpg image2.jpg delta.jpg 

对于彩色输入图像,产生的delta.jpg预订购使用image1.jpb作为光 - 灰色的背景,并显示在红色的差异。为了得到没有浅灰色背景上的红色+白色增量映像,使用

compare image1.jpg image2.jpg -compose src delta.jpg 

此techniq的实例图像,可以发现这里

相关问题