目录

  • PNG文件格式概述
  • 文件结构
  • PNG数据块结构
  • 实例分析
    • 关键数据块分析
      • (1)IHDR数据块
      • (2)PLTE调色板数据块
      • (3)IDAT图像数据块
      • (4)IEND图像结束数据
    • 辅助数据块分析
      • (1)gAMA图像y数据块
      • (2)cHRM基色和白色点数据块
      • (3)bKGD背景颜色数据块
      • (4)pHYs物理像素尺寸数据块
      • (5)tIME图像最后修改时间数据块
  • 参考文献

PNG文件格式概述

PNG全称流式网络图形格式(Portable Network Graphic Format,PNG),是一种位图文件(bitmap file)存储格式,读成“ping”。

PNG 文件由两部分组成,分别是 PNG 文件标志和数据块(chunks)。
PNG 文件标志作用是识别当前文件是否为PNG文件;数据块分为两类:关键数据块(critical chunk)和辅助数据块(ancillary chunks),关键数据块在 PNG 文件中是必须有的,而辅助数据块是可选的。

文件结构

对于一个PNG文件,其文件头总由固定字节描述:
十进制数 137 80 78 71 13 10 26 10
十六进制数 89 50 4E 47 0D 0A 1A 0A

如下图打开一个PNG文件后可观察到其文件头为 89 50 4E 47 0D 0A 1A 0A,这也证明此文件为PNG文件。

PNG数据块结构

PNG数据块分为两类:关键数据块(critical chunk)和辅助数据块(ancillary chunks)。

关键数据块由四部分组成:文件头数据块(IHDR)、调色板数据块(PLTE)、图像数据块(IDAT)和图像结束数据(IEND)。其中调色板数据块(PLTE)根据图像的色深可选。

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

名称
背景颜色数据块bKGD(background color)。
基色和白色度数据块cHRM(primary chromaticities and white point)。
图像γ数据块gAMA(image gamma)。
图像直方图数据块hIST(image histogram)。
物理像素尺寸数据块pHYs(physical pixel dimensions)。
样本有效位数据块sBIT(significant bits)。
文本信息数据块tEXt(textual data)。
图像最后修改时间数据块tIME (image last-modification time)。
图像透明数据块tRNS (transparency)。
压缩文本数据块zTXt (compressed textual data)。

数据块组成结构:

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

实例分析

打开一个PNG文件,test.png

使用Visual Studio 2019以二进制方式打开文件

关键数据块分析

(1)IHDR数据块


00 00 00 0D -----说明IHDR头块长为13
49 48 44 52 -----IHDR标识
00 00 03 06 ------图像的宽,774像素
00 00 03 06 ------图像的高,774像素
08 ------------------色深,2^8=256,即这是一个256色的图像
02 ------------------颜色类型,灰度图像
00 ------------------PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)
00 ------------------PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)
00 ------------------非隔行扫描
C7 A4 04 83 -----CRC校验码

(2)PLTE调色板数据块


PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成。

此例中,色深为8,则颜色数不超过2^8=256,而调色板长度为1216=192=364,为3的倍数。

(3)IDAT图像数据块


E7 14 EE 56 -----------数据长为3876908630字节

60 2F FD FA -----------IDAT标识

20 20…… --------------压缩的数据

(4)IEND图像结束数据


00 00 00 00 -------------表示数据部分长度为0,即此数据块没有数据部分
49 45 4E 44 -------------数据类型码,49 45 4E 44为IEND标识
AE 42 60 82 -------------CRC校验码

辅助数据块分析

(1)gAMA图像y数据块

(2)cHRM基色和白色点数据块

(3)bKGD背景颜色数据块

(4)pHYs物理像素尺寸数据块

(5)tIME图像最后修改时间数据块

参考文献

【1】数据压缩作业2:PNG文件格式分析_梁启蓉的博客-CSDN博客
【2】PNG文件格式分析_Messi0822的博客-CSDN博客
【3】详解PNG文件结构 - Angel_Kitty - 博客园 (cnblogs.com)

【数据压缩2】PNG文件格式分析相关推荐

  1. 【数据压缩】TGA文件格式分析

    一.TGA文件格式简介 TGA(Truevision Graphics Adapter)文件格式,通常又称为Targa(Truevision Advanced Raster Graphics Adap ...

  2. 数据压缩4 | TGA文件格式分析

    目录 一.简介 二.结构 1. TGA文件头 2. 图像/颜色表数据 3. 开发者区域,扩展区域,文件尾 三.压缩算法 三.总结 一.简介 TGA是由美国Truevision公司为其显示卡开发的一种图 ...

  3. 【数据压缩】MP4文件格式分析

    预设问题:什么是MP4,MP4的封装格式是什么?该容器包含哪些元数据信息?包含哪些节目信息?如何从该容器中提取音频.视频.字幕数据,并交给解码器 解码,有时间戳否?通过什么方式保证同步? MP4指的是 ...

  4. 【数据压缩】WAV文件和AVI文件格式分析

    一.WAV文件和AVI文件格式简介 WAV的英文全称是Waveform Audio File Format ,它采用 RIFF (Resource Interchange File Format)文件 ...

  5. [数据压缩]WAV文件格式分析及AVI数据结构分析

    目录 WAV文件格式分析 WAV概述 WAV文件格式分析 根据实例的WAV文件结构分析 AVI数据结构 音频与视频的数据放置方式 视频帧与音频帧的字节数 参考引用 WAV文件格式分析 WAV概述 Wa ...

  6. 【数据压缩3】AVI文件格式分析及问题回答+WAV文件格式分析

    目录 AVI文件问题回答 1.AVI文件音频和视频的数据是如何放置的,交织放置还是连续放置? 2.AVI文件一个视频帧大约占据多少字节?一个音频数据块大约占用多少字节? WAV文件格式分析 文件概述 ...

  7. zt BMP 文件格式分析

    看到这文章不错,于是帖了上来.呵呵 BMP文件格式分析(zz) 前两天要做一个读取bmp文件的小程序,顺便查找了一些关于BMP格式的文章,现在post上来. 简介 BMP(Bitmap-File)图形 ...

  8. PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法

    在日常应用中,某些程序往往会被第三方程序下钩子(hook).如果被下钩子的进程是我们的进程,并且第三方钩子严重影响了我们的逻辑和流程,我们就需要把这些钩子摘掉(Unhook).本件讲述一种在32位系统 ...

  9. PE文件和COFF文件格式分析——导出表的应用——通过导出表隐性加载DLL

    通过导出表隐性加载DLL?导出表?加载DLL?还隐性?是的.如果觉得不可思议,可以先看<PE文件和COFF文件格式分析--导出表>中关于"导出地址表"的详细介绍.(转载 ...

最新文章

  1. matlab算法开发与C++调用
  2. Metasploit技巧命令支持tips
  3. 0代码就能做Python数据分析,这个Jupyter插件,用起来就像Excel一样简单
  4. Spark2.2.0 分布式离线搭建
  5. WTL 出现的SetMsgHandled和IsMsgHandled 错误
  6. python rm 条件_删除文件 (rm)
  7. php tp 支付宝 支付,php实现的支付宝网页支付功能示例【基于TP5框架】
  8. 信息图表是如何炼成的(三):阶层结构与isometric
  9. MySQL5.7的下载以及安装
  10. OC_内存管理(二)对象复制、循环引用问题、自动释放池
  11. 昂达v891w可以用u盘linux,安卓、Win8随便用 昂达V891w双系统平板测试(转载)
  12. linux4.12内核 bridge简介
  13. 一文了解中央银行数字货币CBDC的总体框架
  14. [乡土民间故事_徐苟三传奇]第七回_赵财主之母配孟德
  15. linux 学习决心书
  16. 雅诗兰黛公司宣布线上业务部门领导层更新
  17. 电商系统常用的产品颜色,尺码选择JS程序实现
  18. golang cond
  19. 房地产特征价格评估的次市场效应模型: 一种概率方法撰写
  20. 大卫·华尔兹(David Waltz)---搜索和人工智能之父

热门文章

  1. 程序和功能 无法卸载
  2. 在Edge浏览器中,使用IE模式【Win11】
  3. jQuery模板引擎: jQuery-tmpl 和 JsRender 使用介绍
  4. 噬血代码进不了游戏_《噬血代码》新情报:游戏难度虽高,但练级可以解决
  5. Java 多线程实现蜜蜂和熊的问题
  6. 智能建筑计算机网络系统设计的主要内容及遵循的原则,第十三章智能建筑计算机网络工程设计...
  7. 顺序表中删除指定值时间复杂度为O(n)空间复杂度为O(1)
  8. 父爱是水 父爱无声
  9. 用nginx搭建symbol proxy
  10. 统计多个文件夹内多个Excel的数据行数