<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    生活,在繼續……
    真正的生活,應該是不斷的向前!
    posts - 11,comments - 75,trackbacks - 0

    PNG的文件結構

     
       對于一個PNG文件來說,其文件頭總是由位固定的字節來描述的:

    十進制數

    137 80 78 71 13 10 26 10

    十六進制數

    89 50 4E 47 0D 0A 1A 0A


       其中第一個字節0x89超出了ASCII字符的范圍,這是為了避免某些軟件將PNG文件當做文本文件來處理。文件中剩余的部分由3個以上的PNG的數據塊(Chunk)按照特定的順序組成,因此,一個標準的PNG文件結構應該如下:


    PNG文件標志

    PNG數據塊

    ……

    PNG數據塊


    PNG數據塊(Chunk

          
    PNG定義了兩種類型的數據塊,一種是稱為關鍵數據塊(critical chunk),這是標準的數據塊,另一種叫做輔助數據塊(ancillary chunks),這是可選的數據塊。關鍵數據塊定義了4個標準數據塊,每個PNG文件都必須包含它們,PNG讀寫軟件也都必須要支持這些數據塊。雖然 PNG文件規范沒有要求PNG編譯碼器對可選數據塊進行編碼和譯碼,但規范提倡支持可選數據塊。

       

       下表就是PNG中數據塊的類別,其中,關鍵數據塊部分我們使用深色背景加以區分。

    PNG文件格式中的數據塊

    數據塊符號

    數據塊名稱

    多數據塊

    可選否

    位置限制

    IHDR

    文件頭數據塊

    第一塊

    cHRM

    基色和白色點數據塊

    PLTEIDAT之前

    gAMA

    圖像γ數據塊

    PLTEIDAT之前

    sBIT

    樣本有效位數據塊

    PLTEIDAT之前

    PLTE

    調色板數據塊

    IDAT之前

    bKGD

    背景顏色數據塊

    PLTE之后IDAT之前

    hIST

    圖像直方圖數據塊

    PLTE之后IDAT之前

    tRNS

    圖像透明數據塊

    PLTE之后IDAT之前

    oFFs

    (專用公共數據塊)

    IDAT之前

    pHYs

    物理像素尺寸數據塊

    IDAT之前

    sCAL

    (專用公共數據塊)

    IDAT之前

    IDAT

    圖像數據塊

    與其他IDAT連續

    tIME

    圖像最后修改時間數據塊

    無限制

    tEXt

    文本信息數據塊

    無限制

    zTXt

    壓縮文本數據塊

    無限制

    fRAc

    (專用公共數據塊)

    無限制

    gIFg

    (專用公共數據塊)

    無限制

    gIFt

    (專用公共數據塊)

    無限制

    gIFx

    (專用公共數據塊)

    無限制

    IEND

    圖像結束數據

    最后一個數據塊


       為了簡單起見,我們假設在我們使用的PNG文件中,這4個數據塊按以上先后順序進行存儲,并且都只出現一次。

    數據塊結構
      

       PNG文件中,每個數據塊由4個部分組成,如下:

       

    名稱

    字節數

    說明

    Length (長度)

    4字節

    指定數據塊中數據域的長度,其長度不超過(2311)字節

    Chunk Type Code (數據塊類型碼)

    4字節

    數據塊類型碼由ASCII字母(A-Za-z)組成

    Chunk Data (數據塊數據)

    可變長度

    存儲按照Chunk Type Code指定的數據

    CRC (循環冗余檢測)

    4字節

    存儲用來檢測是否有錯誤的循環冗余碼

       CRC(cyclic redundancy check)域中的值是對Chunk Type Code域和Chunk Data域中的數據進行計算得到的。CRC具體算法定義在ISO 3309ITU-T V.42中,其值按下面的CRC碼生成多項式進行計算:

    x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

       下面,我們依次來了解一下各個關鍵數據塊的結構吧。


    IHDR
       

       文件頭數據塊IHDR(header chunk):它包含有PNG文件中存儲的圖像數據的基本信息,并要作為第一個數據塊出現在PNG數據流中,而且一個PNG數據流中只能有一個文件頭數據塊。


    文件頭數據塊由13字節組成,它的格式如下表所示。

    域的名稱

    字節數

    說明

    Width

    4 bytes

    圖像寬度,以像素為單位

    Height

    4 bytes

    圖像高度,以像素為單位

    Bit depth

    1 byte

    圖像深度:
    索引彩色圖像:1,2,48
    灰度圖像:12,4,816
    真彩色圖像:816

    ColorType

    1 byte

    顏色類型:
    0
    :灰度圖像, 12,4,816
    2
    :真彩色圖像,816
    3
    :索引彩色圖像,12,48
    4
    :帶α通道數據的灰度圖像,816
    6
    :帶α通道數據的真彩色圖像,816

    Compression method

    1 byte

    壓縮方法(LZ77派生算法)

    Filter method

    1 byte

    濾波器方法

    Interlace method

    1 byte

    隔行掃描方法:
    0
    :非隔行掃描
    1
    Adam7(Adam M. Costello開發的7遍隔行掃描方法)

       

     PLTE

       調色板數據塊PLTE(palette chunk)包含有與索引彩色圖像(indexed-color image)相關的彩色變換數據,它僅與索引彩色圖像有關,而且要放在圖像數據塊(image data chunk)之前。


       PLTE
    數據塊是定義圖像的調色板信息,PLTE可以包含1~256個調色板信息,每一個調色板信息由3個字節組成:

    顏色

    字節

    意義

    Red

    1 byte

    0 = 黑色, 255 =

    Green

    1 byte

    0 = 黑色, 255 = 綠色

    Blue

    1 byte

    0 = 黑色, 255 = 藍色

     

       因此,調色板的長度應該是3的倍數,否則,這將是一個非法的調色板。

       
       對于索引圖像,調色板信息是必須的,調色板的顏色索引從0開始編號,然后是1、2……,調色板的顏色數不能超過色深中規定的顏色數(如圖像色深為4的時候,調色板中的顏色數不可以超過2^4=16),否則,這將導致PNG圖像不合法。

       
       真彩色圖像和帶α通道數據的真彩色圖像也可以有調色板數據塊,目的是便于非真彩色顯示程序用它來量化圖像數據,從而顯示該圖像。


    IDAT
       

       圖像數據塊IDAT(image data chunk):它存儲實際的數據,在數據流中可包含多個連續順序的圖像數據塊。

    IDAT存放著圖像真正的數據信息,因此,如果能夠了解IDAT的結構,我們就可以很方便的生成PNG圖像。


    IEND


       圖像結束數據IEND(image trailer chunk):它用來標記PNG文件或者數據流已經結束,并且必須要放在文件的尾部。

    如果我們仔細觀察PNG文件,我們會發現,文件的結尾12個字符看起來總應該是這樣的:

    00 00 00 00 49 45 4E 44 AE 42 60 82


       不難明白,由于數據塊結構的定義,IEND數據塊的長度總是000 00 00 00,除非人為加入信息),數據標識總是IEND49 45 4E 44),因此,CRC碼也總是AE 42 60 82。

    posted on 2005-12-28 19:58 生活,在繼續……勿要停! 閱讀(1839) 評論(0)  編輯  收藏 所屬分類: 圖片格式

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日本一区二区在线免费观看| a毛片免费观看完整| 亚洲第一黄片大全| A级毛片高清免费视频在线播放| 水蜜桃亚洲一二三四在线| 女人张开腿等男人桶免费视频| 337P日本欧洲亚洲大胆艺术图| 亚洲熟妇无码另类久久久| 91精品免费国产高清在线| 久香草视频在线观看免费| 亚洲黄色片免费看| 亚洲精品国产V片在线观看 | 亚洲AV无码国产剧情| 亚洲人成亚洲人成在线观看| 国产在线a免费观看| 99在线视频免费观看| 亚洲熟伦熟女专区hd高清| 亚洲国产精品无码久久久蜜芽| 天天看片天天爽_免费播放| 中文字幕在线免费看线人| 亚洲经典千人经典日产| 亚洲精品综合一二三区在线| 国产精品成人四虎免费视频| 久久久久久久岛国免费播放 | 最好看最新的中文字幕免费| 精品久久久久久亚洲中文字幕| 亚洲精品国产成人专区| 免费国内精品久久久久影院| 国产成人yy免费视频| 成人爽a毛片免费| 麻豆91免费视频| 中文字幕在线日亚洲9| 亚洲AV无码久久| 亚洲免费视频一区二区三区| 91成人免费观看网站| 永久在线观看免费视频| 国产福利在线观看永久免费| 国产精品亚洲专区无码牛牛| 亚洲六月丁香六月婷婷色伊人| 亚洲AV永久精品爱情岛论坛| 国产亚洲精品资在线|