2015-08-27 64 views
0

我想以可重現的方式將JPEG文件轉換爲PPM文件,以便某個JPEG文件將始終轉換爲相同的PPM文件,而不管運行轉換的計算機如何。可重複像素完美JPEG解碼

做一個簡單的

convert -compress none src.jpeg dest.ppm 

將導致略有不同的PPM文件,這取決於ImageMagick的版本中安裝。我想在不同的版本中使用不同的默認值。

可以複製此問題,轉換Ubuntu 12.04盒子和Ubuntu 14.04盒子上的圖像,然後將兩個PPM與compare -compose src img1.ppm img2.ppm進行比較。

有沒有辦法指定影響JPEG解碼的所有參數?還是有一個保證始終產生相同像素值的替代解碼器?

+1

嗯,沒有太知道這一個,但儘量'轉換-compress沒有src.jpeg -colorspace RGB dest.ppm'作爲默認的色彩空間改而回。另一個問題是一個IM可能具有8位而另一個具有16位量化。使用'convert xc:-format'%q「info:' –

+0

檢查你的Q設置。由於JPEG是一種有損格式,系統結構(量子範圍和HDRI)將影響解碼係數值,因此可能會出現一些細微的變化。 – emcconville

回答

0

正如評論所暗示的,這裏有兩個問題需要解決。 DCT量化和顏色空間。

DCT的默認選擇使用機器相關的浮點代碼,這可能會導致小的變化。這可以使用選項-define jpeg:dct-method=islow修復,該選項選擇一個精確的基於整數的DCT。

在過去的版本中對顏色空間的支持已經發生了很大的變化,所以很難獲得可複製的結果。一般來說這樣做是一個問題,但在我看來,只要它們在任何地方都是一樣的,我就能擺脫不忠實的顏色。這可以通過強制imagemagick將源數據解釋爲線性RGB並使用命令-set colorspace RGB -colorspace RGB始終生成線性RGB來實現。

最後一個命令然後

convert src.jpeg \ 
    -define jpeg:dct-method=islow 
    -set colorspace RGB -colorspace RGB \ 
    -compress none dest.ppm