ImageMagick在Windows和Linux上生成不同的图像
ImageMagick在Windows和Linux上生成不同的图像
我需要一个批处理程序来制作移动图像,并决定使用ImageMagick,但不幸的是我的一个要求是生成的图像在各个操作系统上都相同,因为我在本地系统(Windows)和服务器(Linux)之间来回传输它们。然而,似乎无论我在哪台机器上调用下面的命令时:\n
convert test.jpg -resize 25% test-small.jpg
\n该过程在两台机器上创建的图像是不同的。我知道这是因为当我使用校验和时,值并不完全相同。\n有人知道为什么会发生这种情况吗?也许有一些方法可以解决这个问题,比如使用不同的可执行文件或传递一个参数,可以在各个操作系统上生成相同的图像?
ImageMagick在Windows和Linux上制作不同的图像
问题的出现原因:
依赖于“checksum”或“md5sum”或类似的方法来比较两个图像并不明智。这只能验证文件是否完全相同。然而,如果您得到了不同的结果,可能只是因为一些随机元数据值中的一个字节不同(比如一个简单的时间戳),而根本没有像素差异。
解决方法:
要发现两个图像之间的像素差异,可以使用ImageMagick的compare命令,如下所示:
compare image1.jpg image2.jpg delta.jpg
对于彩色输入图像,生成的delta.jpg将使用image1.jpg作为浅灰色背景,并以红色显示差异。如果要获得没有浅灰色背景的红色+白色差异图像,请使用以下命令:
compare image1.jpg image2.jpg -compose src delta.jpg
可以在这里找到这种技术的示例图像:
- [ImageMagick: “Diff” an Image](https://stackoverflow.com/a/11362152/359307)
左侧:带有文本的图像
中间:原始图像
右侧:红色像素中的差异(=文本)
问题出现的原因是在Windows和Linux操作系统上,使用ImageMagick创建的图像可能会有所不同。这可能是由于以下原因导致的:
1. 文件中的像素数量不同 - 如果要比较图像,请编写一个仅针对解码后的像素数据工作的校验和。这至少可以告诉您图像是否看起来相同。文件的内部可能因为许多因素而不同。
2. 调整大小取决于浮点运算,而您不能保证在不同的计算机上结果相同。因此,除了使用校验和外,您可能还希望查看每个像素是否与另一个文件中的相关像素在容差范围内。
解决这个问题的方法是参考以下链接:
- http://pdiff.sourceforge.net/
- http://www.phpied.com/image-diff/
这些链接可能提供了一些关于比较和处理在不同操作系统上使用ImageMagick创建的图像的方法。