当前位置: 首页 > news >正文

PNG文件格式

文章目录

    • 一、概述
    • 二、文件结构
    • 三、文件署名域
    • 四、数据块
      • 1、IDHR文件头数据块
      • 2、调色板数据块
      • 3、IDAT数据块
      • 4、IEND数据块
    • 五、其他辅助数据块(了解即可)
    • 六、动态png——APNG

一、概述

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。(说白了这就是一种方便的、适于网络传播的轻便图片文件格式)

二、文件结构

png文件由文件署名域和数据块组成。

三、文件署名域

8个字节文件署名域用来标识该文件是png文件,即俗称的“文件头”。
16进制表示为:89 50 4E 47 0D 0A 1A 0A。 ^c0d22c

四、数据块

PNG数据块部分由IHDR(文件头数据块)、PLTE(调色板数据块)、IDAT(图像数据块)、IEND(图像结束数据块)四个标准数据块和一些辅助数据块组成。
每个数据块由Length(数据块长度)、Chunk Type Code(数据块类型码)、Chunk Data(数据块数据)和CRC(循环冗余校验码)四部分组成。
请添加图片描述

例:
请添加图片描述

CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC详细算法定义在ISO 3309和ITU-T V.42中,其值按CRC32算法进行计算。
**如果修改了图片的宽高,没有修改CRC编码,那么可以通过计算发现CRC编码不一致。010 editor在打开图片时会检查CRC校验码,如果有问题会提醒。**可利用python脚本爆破(CTF>picture_crc.py)

1、IDHR文件头数据块

文件头数据块包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
数据块中的Chunk Data由13个字节构成:
请添加图片描述

2、调色板数据块

它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。结构如下:
请添加图片描述

3、IDAT数据块

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

4、IEND数据块

它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:
00 00 00 00 49 45 4E 44 AE 42 60 82
不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。 ^96ae22

最后,除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。

五、其他辅助数据块(了解即可)

PNG文件格式规范制定的10个辅助数据块是:

  1. 背景颜色数据块bKGD(background color)。
  2. 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。
  3. 图像γ数据块gAMA(image gamma)。
  4. 图像直方图数据块hIST(image histogram)。
  5. 物理像素尺寸数据块pHYs(physical pixel dimensions)。
  6. 样本有效位数据块sBIT(significant bits)。
  7. 文本信息数据块tEXt(textual data)。 ^cef1ca
  8. 图像最后修改时间数据块tIME (image last-modification time)。
  9. 图像透明数据块tRNS (transparency)。
  10. 压缩文本数据块zTXt (compressed textual data)。

六、动态png——APNG

APNG(Animated Portable Network Graphics)是一个基于PNG(Portable Network Graphics)的位图动画格式,扩展方法类似主要用于网页的GIF 89a,仍对传统PNG保留向下兼容。第1帧是标准的单幅PNG图像,因此只支持原版PNG的软件能正常显示第1帧。剩余的动画帧和帧速数据储存在符合原版PNG标准的扩展数据块里。 APNG与Mozilla社区关系密切,格式标准文档就放在Mozilla网站。

http://www.lqws.cn/news/85249.html

相关文章:

  • 【技术支持】安卓开发中queryUsageStats不准确的问题
  • 【latex】易遗忘的表达
  • cpper 转 Golang
  • 【LLM】AI Agents vs. Agentic AI(概念应用挑战)
  • K-匿名模型
  • 英语中什么时候用that?
  • 电磁场与电磁波公式汇总
  • DeepSeek 部署中的常见问题及解决方案
  • 【Java EE初阶 --- 多线程(初阶)】多线程的实现案例
  • torch.randn vs torch.rand
  • win32相关(虚拟内存和物理内存)
  • 探索大语言模型(LLM):RSE流程详解——从文档中精准识别高相关片段
  • 第17讲、odoo18可视化操作代码生成模块
  • 基于springboot的家政服务预约系统
  • 算法-集合的使用
  • 统计字符数
  • 知识图谱系列(5):表示学习
  • 【Linux】pthread多线程基础
  • 【python深度学习】Day43 复习日
  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • 快手可灵视频V1.6模型API如何接入免费AI开源项目工具
  • gcc编译构建流程-函数未定义问题
  • UE特效Niagara性能分析
  • 数据资产评估进阶:精读资产评估专家指引第9号——数据资产评估指导【附全文阅读】
  • 【Godot引擎】如何使用内置的全局搜索功能提升开发效率
  • selenium-自动更新谷歌浏览器驱动
  • Redis-6.2.9 cluster集群部署和扩容缩容
  • bismark OT CTOT OB CTOB 以及mapping后的bam文件中的XG,XR列的含义
  • 调试的本质:从混沌走向秩序
  • 双指针题解——反转字符串中的单词【LeetCode】