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