2009-07-09 64 views
4

我正在寫一個程序來轉換一些數據,主要是一堆Tiff圖像。一些Tiffs似乎與他們有一個小問題。他們在一些觀衆(客戶的舊系統Irfanview)中顯示得很好,但在其他客戶(客戶的新系統,Window的圖片和傳真瀏覽器)中卻沒有。我已經手動查看了二進制數據,並且所有標籤看起來都沒問題。任何人都可以推薦一個可以分析它的應用程序,並告訴我什麼,如果有的話,它是錯的嗎?爲了清楚起見,我只是將有關圖像的數據單獨存儲在數據庫中並複製圖像,我不是自己編輯圖像,所以我很確定我是不要搞亂他們。Tiff分析儀

UDPATE: 任何有興趣,這裏是從好的和壞的文件標籤:

BAD
標籤類型長度值
256圖像寬度短1 1652
257圖像長度短1 704
258比特每樣品SHORT 1 1
259壓縮SHORT 1 4
262 Photometry SHORT 1 0
266填充訂單SHORT 1 1
273地帶偏移LONG 1 210(D2十六進制)
274取向SHORT 1個3
277樣品每像素SHORT 1個1
278行每地帶SHORT 1 450
279地帶字節計數LONG 1 7264(1c60十六進制)
282 X分辨率RATIONAL 1 < 194>1分之200= 200.000
283 Y分辨率RATIONAL 1 < 202>1分之200= 200.000
284的平面配置SHORT 1 1
296分辨率單位SHORT 1 2

良好
標籤類型長度值
254新子文件類型LONG 1 0(0十六進制)
256圖片寬度SHORT 1 1193
257圖像長度SHORT 1 788
258位每個採樣SHORT 1 1
259壓縮SHORT 1 4
262光度SHORT 1 0
266填充訂單SHORT 1 1
270圖像描述ASCII 45 256
273地帶偏移LONG 1 1118(45E十六進制)
274取向SHORT 1個1
277樣品每像素SHORT 1個1
278行每地帶LONG 1 788(314十六進制)
279地帶字節計數LONG 1 496(1F0十六進制)
280最小採樣值SHORT 1 0
281最大采樣值SHORT 1 1
282 X分辨率RATIONAL 1 < 301> 200/1 = 200.000
283 Y分辨率RATIONAL 1 < 309> 200/1 = 200。000
284的平面配置SHORT 1 1
293組4個選項LONG 1 0(0十六進制)
296分辨率單位SHORT 1 2

回答

0

值得給予ImageMagick的一個去。我的理解是TIFF是一種相當複雜的文件格式,並不是每個人都完全實現了這種格式。

1

LibTIFF可能會有所幫助。查看Tiff的問題通常是由使用的壓縮引起的。我會研究這一點。

3

通常,這是因爲TIFF是使用JPEG編碼從6.0標準,該標準被放棄之後不久。看標籤259.如果是6,那就是問題所在。 JPEG應該使用「更新」的方案進行編碼。7.標準庫不會讀取舊版本,包括Windows附帶的版本。

您可以使用libtiff(或任何使用libtiff的庫或程序,其中大多數都會這樣做)來讀取這些內容,但默認情況下在libtiff中禁用方案6(OJPEG)。你將不得不打補丁並重新編譯libtiff來啓用它。 Here's a link with instructions

+0

標籤259是4(添加字符以滿足最小注釋長度要求...嘆息) – Kevin 2009-07-09 14:14:02

0

TIFF是一種非常複雜的格式 - 不僅是它可以編碼的數據的豐富性(各種像素格式,各種編碼器),而且還因爲文件格式本身的豐富性(其可以容納的一般結構任何東西)。這基本上是我們在成像過程中所有想法的垃圾場。 :-)

我會極力從.NET 3.0推薦WPF圖像庫。它的Tiff解碼器雖然不支持所有像素格式,但它非常強大,並且具有訪問所有元數據的簡單界面。

1

錯誤圖像中的RowsPerStrip是450,小於704,圖像長度(高度)。這意味着圖像必須有兩個條。因此,StripOffset和StripByteCounts都必須有兩個計數。這些表示條數據所在的文件偏移量。當這些偏移量丟失時,只有第一個條可以解碼。