2011-06-17 33 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的實例圖像,可以發現這裏

相關問題