• PNG图片格式详解


    2-2 PNG图片格式详解

     

    1. PNG格式文件简介

     

    PNG(Portable Network Graphics,便携式网络图形),是一种采用无损压缩算法的位图格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。

     

     

    2. PNG文件结构详解

     

    PNG图像格式文件由以下结构组成:

    • 文件头/文件署名域:一个8字节的PNG文件署名域(即文件头)

    • 数据块:按照特定结构组织的3个以上的数据块组成

     

    2.1 文件署名域

    实际上就是PNG文件的文件头。PNG用8字节的文件署名域来识别该文件是不是PNG文件。

    文件头/文件署名域:89 50 4e 47 0d 0a 1a 0a

     

    2.2 数据块

     

    2.2.1 数据块结构:

    PNG文件中,每个数据块由4个部分组成,如下:

    名称字节数说明
    Length (长度) 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节
    Chunk Type Code (数据块类型码) 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成
    Chunk Data (数据块数据) 可变长度 存储按照Chunk Type Code指定的数据
    CRC (循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码

     

    2.2.2 数据块类型:

    PNG定义了两种类型的数据块:一种是称为关键数据块(必需的数据块),另一种是辅助数据块(可选的数据块)。

    关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。

    1. 关键数据块:

    • IHD:文件头数据块。它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。

    • PLTE:调色板数据块。对于索引图像来说,调色板信息是必须的,它包含有与索引彩色图像相关的彩色变换数据,而且要放在图像数据块IDAT之前。

    • IDAT:图像数据块。它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。

    • IEND:图像结束数据。用来标记PNG文件或者数据流已经结束,必须要放在文件的尾部。

    2. 辅助数据块:

    比较杂,不需要全部了解透。PNG文件格式规范制定的10个辅助数据块是:

    1. bKGD:背景颜色数据块。

    2. cHRM:基色和白色度数据块。

    3. gAMA:图像γ数据块。

    4. hIST:图像直方图数据块。

    5. pHYs:物理像素尺寸数据块。

    6. sBIT:样本有效位数据块。

    7. tEXt:文本信息数据块。

    8. tIME :图像最后修改时间数据块。

    9. tRNS:图像透明数据块。

    10. zTXt :压缩文本数据块。

  • 相关阅读:
    Postgres 的 Range 类型
    Postgres 的 Array 类型
    joi库 学习笔记
    nginx官方文档 之 http负载均衡 学习笔记
    pm2 官方文档 学习笔记
    SSH 学习笔记
    防止活动上线时 微信openid 被伪造的解决办法
    PHP 中 var_export、print_r、var_dump 调试中的区别
    nake_api_protect 请求保护器——防止请求被恶意刷
    接口的防刷办法
  • 原文地址:https://www.cnblogs.com/P201821460033/p/13658573.html
Copyright © 2020-2023  润新知