一、 介紹
TIFF全名Tag Image File Format, 是一種以標(biāo)記(Tag)為主要結(jié)構(gòu)的位置圖像文件格式。TIFF圖像是靠指針連接來組織數(shù)據(jù)的,文件頭和數(shù)據(jù)可以任意數(shù)據(jù)的存儲。TIFF由四種類型:TIFF-B,二色;TIFF-G,黑白灰度;TIFF-P,帶調(diào)色板的彩色圖形;TIFF-R,適合RGB色彩的圖形。 二、 組成 TIFF一般來說由四部分組成:文件頭(IFH)、文件目錄(IFD)、目錄內(nèi)容(DE)、圖像數(shù)據(jù);如下圖,下面具體說明。 三、 具體格式 1. 文件頭部分 TIFF圖像文件開頭部分的8個字節(jié)比較固定,包含的信息有: (1)、0-1這兩個字節(jié)為標(biāo)識域,固定的為0x4949或者0x4d4d,分別表示小段字節(jié)順序和大端字節(jié)順序。 (2)、2-3這兩個字節(jié)為TIFF的版本號,一般固定的為0x2a (3)、4-7這四個字節(jié)存放圖像文件目錄(IFD)的偏移量,次偏移量是以文件頭開始的。注,只存放單個圖像的TIFF文件只有一個IFD。IFD中存放著與該圖像有關(guān)的特征,即標(biāo)簽(Tag)。 0 2 4 II/MM(表示字節(jié)序) | | 文件目錄在整個文件的偏移量,是一個指針,指向IFD的開始部分 |
5 8 注意這里的值不一定就是緊接頭后的0A地址,可以是任意的。 2. 文件目錄部分 TIFF格式的圖像文件目錄(IFD)由三部分組成,包括IFD中域(Tag)的個數(shù),放在前面兩個字節(jié)處;域存放具體內(nèi)容(DE),每個域由12個字節(jié)構(gòu)成,TIFF6.0標(biāo)準(zhǔn)規(guī)定每個Tag域要以升序的方式排列;末尾的四個字節(jié)是指向下一個IFD的偏移值。 0 2 14 每個項的12個字節(jié),其是連續(xù)的,有前兩個字節(jié)說明其項的總數(shù)。對于不同的TIFF格式文件,這里的不同。 3. 目錄項 每個目錄項(DE)由12個字節(jié)組成,格式如下: TAG(0-1字節(jié)) | TAG的數(shù)據(jù)類型(2-3字節(jié)) | 數(shù)據(jù)長度 (4-7字節(jié)) | 數(shù)據(jù)值或值的偏移(文件范圍)(8-11字節(jié)) |
TAG的值由TIFF標(biāo)準(zhǔn)定義,TIFF 6.0定義了64個Tag類型;不同的TAG表示不同的意思,例如: 1、0x0100表示圖像水平方向上的像素個數(shù)(ImageWidth); 2、識別碼0x0101為圖像垂直方向上像素個數(shù)(ImageLength); 3、0x0102為每個數(shù)據(jù)取樣(sample)的位數(shù)(BitPerSample),支持CMYK色彩空間的在8-11字節(jié)給出數(shù)據(jù)偏移量,無壓縮格式時,其數(shù)據(jù)值為0x080808。 4、SamplePerPixel 標(biāo)志嗎為0x0115,每個像素取樣數(shù)。支持CMYK色彩空間的在8-11字節(jié)給出數(shù)據(jù)值為4。 5、RowPerStrip標(biāo)志嗎為0x0116,每個帶狀數(shù)據(jù)的圖像行數(shù)。等于ImageLength中圖像垂直方向像素的個數(shù),單個TIFF圖像文件只有一個帶狀數(shù)據(jù)。 6、StripOffsets 0x0111每個帶狀數(shù)據(jù)在文件的偏移。即圖像數(shù)據(jù)所在的位置。在CMYK色彩模式下,一個像素用4個字節(jié)表示,其順序為C、M、Y、K;RGB彩色模式下一個像素用3個字節(jié)表示,順序為R、G、B;灰色圖像用1個字節(jié)表示。 7、StripByteCounts 0x0117 每個帶狀數(shù)據(jù)在文件中所占的字節(jié)數(shù),在沒有壓縮的時候,改數(shù)值等于圖像寬度和高度相乘的字節(jié)數(shù)。 8、PhotometricInterPretation0x0106 圖像所采用的色彩系統(tǒng),8-11字節(jié)的數(shù)值為0時,是單色或者灰色的圖像,0為白色,數(shù)值為1時,是單色或者灰色圖像,1為白色, 數(shù)值為2時,圖像數(shù)據(jù)以RGB方式存儲,數(shù)值為5時,圖像數(shù)據(jù)以CMYK的方式存儲等。 由于顯示器是RGB色彩模式成像的,如果顯示CMYK模式的圖像,還要進(jìn)行色彩空間的轉(zhuǎn)換。 R=(255-K)*(255-C)/255 G=(255-K)*(255-M)/255 B=(255-K)*(255-Y)/255 TAG的數(shù)據(jù)類型表示數(shù)據(jù)值的類型;例如使用long類型來表示寬度。 數(shù)據(jù)長度是以數(shù)據(jù)類型為單位的,真正的數(shù)據(jù)長度是:數(shù)據(jù)長度*sizeof(數(shù)據(jù)類型) 數(shù)據(jù)值或值的偏移:如果數(shù)據(jù)長度小于4個字節(jié),一般直接以該字段來表示其值,如果其值大于4個字節(jié),就指定一個文件范圍的偏移地址,從那里開始的“數(shù)據(jù)長度*sizeof(數(shù)據(jù)類型)”個字節(jié)表示該標(biāo)志的值。 4. 圖像數(shù)據(jù): 緊接上面數(shù)據(jù)之后就是圖像數(shù)據(jù)了;圖像數(shù)據(jù)的存儲形式有不同的形式,有以像素位來存儲的,也有以顏色面來存儲的;具體的存儲方式在目錄項中定義。 四、 一些TAG值 TAG值 | | | | | | | | | | | | BitsPerSample,對于RGB是8,8,8,通過偏移來表示 | | | | | | | | | | | | 每像素的顏色成分,對于RGB這個值一般是3,如果需要其他有ExtraSamples標(biāo)志 | | | | | | 每帶中壓縮之后的數(shù)據(jù)字節(jié)常長度 | | | 每個分量(R,G,B)是怎么存儲的,1表示按照RGBRGB的順序來存儲 | | | Xresolution和Yresolution的單位 |
更多的參考TIFF標(biāo)準(zhǔn) 五、 一個TIFF文件格式分析
|