ImageMagick在Windows和Linux上制作不同的图像

ImageMagick在Windows和Linux上制作不同的图像,windows,linux,imagemagick,image-manipulation,Windows,Linux,Imagemagick,Image Manipulation,我需要一个批处理过程来制作移动图像,并决定使用ImageMagick,但不幸的是,我的要求之一是生成的图像在操作系统中是相同的,因为我在本地系统(Windows)和服务器(Linux)之间来回发送它们。然而,似乎每当我打电话时 convert test.jpg -resize 25% test-small.jpg 该过程在两台机器上创建不同的图像。我知道这一点,因为当我使用校验和时,值并不完全相同 有人知道为什么会发生这种情况吗?也许可以通过某种方式来解决,或者使用不同的可执行文件,或者传入一

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

convert test.jpg -resize 25% test-small.jpg
该过程在两台机器上创建不同的图像。我知道这一点,因为当我使用校验和时,值并不完全相同


有人知道为什么会发生这种情况吗?也许可以通过某种方式来解决,或者使用不同的可执行文件,或者传入一个参数,该参数将在操作系统中生成相同的图像?

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

  • 文件中包含的像素不止这些——如果要比较图像,请编写一个仅对解码像素数据有效的校验和。这至少会告诉你这些图像看起来是否相同。由于许多因素,文件的内部可能会有所不同

  • 调整大小取决于浮点运算,不能指望在所有机器上都是一样的。因此,您可能希望查看每个像素与另一个文件中的相关像素是否在公差范围内,而不是仅使用校验和

  • 请看以下链接:


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

    要发现两幅图像之间的像素差异,您可以使用ImageMagick的
    比较
    ,如下所示:

    compare  image1.jpg  image2.jpg  delta.jpg
    
    对于彩色输入图像,生成的delta.jpg将使用image1.jpb作为浅灰色背景,并以红色显示差异。要获得没有浅灰色背景的红色+白色增量图像,请使用

    compare  image1.jpg  image2.jpg  -compose src  delta.jpg
    
    此技术的示例图像可在此处找到:


    • 左:带有文本的图像中心:原始图像右:红色像素的差异(=文本)。

    一种选择是在您的计算机中安装linux虚拟机,并在linuxI中进行转换。您的意思是像Cygwin一样吗?我已经被它烧了很多次了,所以我真的在寻找一种在他们各自的环境中能够跨越的东西。奇怪的是,当我使用jpegtran优化我的JPEG时,它为两个操作系统创建了相同的图像。我想知道这是否与无损性有关。我不是一个图像处理爱好者,所以这对我来说是新鲜事。我的意思是使用virtualbox或vmplayer,两者都可以在windows中安装linux,同时运行。e、 下载一个ubuntu iso,并创建一个新的虚拟机。您需要指定RAM、HD空间和ubuntu iso图像位置的数量。PNG也会出现这种情况,算法是否与此类似?@jimlamiell:对于PNG,请尝试optipng或pngcrush以尽可能多地删除元数据。