2012-08-06 29 views
1

比較TIFF和PDF文件我要找的示例代碼或VB,.NET環境第三方工具,可以比較TIFF和PDF文件(視覺比較),並返回true或false。用vb.net

我的要求是將tiff文件轉換爲pdf,我使用iTextSharp,但我現在需要證明轉換後,沒有任何改變使用vb.net程序(爲什麼?)我不知道,但我需要爲他們提供這樣的服務)。

讓我知道如果你們知道任何這樣的工具,我正在尋找,但所有我得到的是將一種格式轉換爲另一種或比較相同格式的文件

+0

我不認爲你可以從語法上證明兩種不同的文件格式產生相同的視覺效果。您可以打印到PCL並比較這些文件,但僅僅因爲文件不相同並不意味着打印出來的圖像與人眼不一樣。 – Paparazzi 2012-08-06 19:22:26

+0

是的,這正是我所說的,但我被要求找出是否有辦法。 – venu 2012-08-07 18:04:19

回答

2

你可以嘗試重新提取TIFF工具從PDF該圖像的原始數據與原來的TIFF文件的原始數據進行比較。

由於PDF格式支持嵌入的TIFF文件,你的客戶可能只是想確保你沒有重新壓縮的圖像爲其它格式,並在這一過程中,質量有所下降。這是一個合理的關注。

充分利用你的圖像文件的原始數據:

由於您使用的iText,1頁TIFF文件你也許可以做到利用該方法Image.rawData()得到這個數據。您可以通過使用該方法TiffImage.getTiffImage

充分利用你的PDF文件中的原始數據創建您的TIFF文件,該Image類的一個實例:

您可以按照流程解釋here,那麼你可以得到的原始數據通過使用方法PdfReader.GetStreamBytes

您可以逐字節比較流,也可以在創建PDF時將它們保存爲文件,以便以後可以使用它們在使用命令行工具時進行比較,也可以計算一個MD5散列並使用它。

我沒有測試過這種方法,但我相信它會工作,因爲沒有涉及TIFF元數據。

+0

是的,聽起來不錯,但是你能告訴我一個樣本還是可以比較tiff格式文件的工具嗎?我知道bitcompare工具可以比較pdf,不確定tiff。 – venu 2012-08-06 16:00:56

2

ImageMagick的compare命令可以做到這一點很容易。

compare file.tif file.pdf -compose src delta.pdf 

,或者通過網頁假設多頁TIFF格式和多頁PDF,比較頁:

compare file.tif[0] file.pdf[0] -compose src delta_page1.pdf 
compare file.tif[1] file.pdf[1] -compose src delta_page2.pdf 
compare file.tif[2] file.pdf[2] -compose src delta_page3.pdf 
[....] 

(頁/圖像ImageMagick的索引與[0]開始,而不是[1]!)。

瞭解delta.pdf:

  1. 產生的delta.pdf將完全白色的,如果沒有視覺上的差異。
  2. 的不同的像素會變成紅色。
  3. 生成的文件將使用默認的72dpi分辨率,可能無法發現非常小的像素差異。

甚至可以簡化這樣的命令:

compare file.tif file.pdf delta.pdf 

所得delta.pdf將顯示(上下文)從所述命令行,爲淺灰色的背景圖象的第一個文件,和重疊的差異作爲紅色像素。當然,從理論上講,你也可以顛倒順序爲每個命令:

compare file.pdf file.tif delta.pdf 

但是,你應該知道,PDF「白」在現實中出現的背景往往是透明的,而TIFF格式是真正的白色。這將導致很多像素差異出現。更好的堅持我先命名的訂單:-)

注1:所有這些比較都假定(當然)具有相同的頁面圖像尺寸和縱橫比。 (否則,你可能需要先縮放兩個圖像中的一個。)

注2:你幾乎總是發現微小的像素的差異,這取決於你的整體處理鏈。這一切都取決於你想通過這種比較發現哪種錯誤。有很多方法可以對此進行微調......

注意3:如果這種方法在原理上適合您,您可以修改輸出格式:您不需要真正使用視覺差異「紅色像素圖像」。您可以改爲計算每個獨特的白色(相等)和紅色(不同)像素,然後根據紅色與白色相比的百分比作出決定,這是「好的」或「不好的」,最後返回「真」或「假」 '相應地(如圖2個PDF的代替1/1 PDF/TIFF例如命令):

樣本命令:

compare \ 
    http://qtrac.eu/boson1.pdf[1] http://qtrac.eu/boson2.pdf[1] -compose src \ 
    -define histogram:unique-colors=true \ 
    -format %c \ 
    histogram:info:- 

示例輸出:

56934: (61937, 0, 7710,52428) #F1F100001E1ECCCC srgba(241,0,30,0.8) 
444056: (65535,65535,65535,52428) #FFFFFFFFFFFFCCCC srgba(255,255,255,0.8) 

此OU tput適合自動單元測試。您可以評估這兩個數字,很容易計算出「紅色像素」與「白色像素」比,然後決定返回PASSED基於一定的閾值失敗(如果你不嚴格需要「零紅」像素)。

+0

我剛剛試了一下,我有「的ImageMagick-6.7.8-Q16」,你在這裏提供良好的工作爲TIF至TIF文件比較的樣本,但是當我嘗試TIF到PDF,它只是簡單地說:PDF文件不可用。 – venu 2012-08-07 16:52:08

+0

@venu:ImageMagick的無法處理的PDF文件本身,它需要一個Ghostscript的安裝,它可以作爲其「*委託*」使用。也許這是問題? – 2012-08-07 20:14:27

+0

@venu:嗯,也許你的ImageMagick無法通過HTTP訪問PDF文件。然後,你必須通過其他方式下載這兩個文件,並運行本地訪問文件的命令:'比較boson1.pdf [1] boson2。pdf [1] -compose src ...' – 2012-08-07 20:16:25