数据压缩(二)——PNG文件结构分析
一、PNG文件简介
PNG(Portable Network Graphics)即便携式网络图形,是一种采用无损压缩算法的位图片形格式,其设计目的是试图代替GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比较高,生成文件体积小。
二、PNG文件的特性
1.体积小,网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大范围的使用文件较大的bmp格式文件。
2.无损压缩,PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
3.索引彩色模式,PNG-8格式与GIF图像类似,同样采用8位调色板将RGB彩色图像转换为索引彩色图像。图像中保存的不再是各个像素的彩色信息,而是从图像中挑选出来的具有代表性的颜色编号,每一编号对应一种颜色,图像的数据量也因此减少,这对彩色图像的传播非常有利。
4.更优化的网络传输显示,PNG图像在浏览器上采用流式浏览,即使经过交错处理的图像会在完全下载之前提供浏览者一个基本的图像内容,然后再逐渐清晰起来。它允许连续读出和写入图像数据,这个特性很适合于在通信过程中显示和生成图像。
5.支持透明效果,PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
6.PNG同时还支持真彩和灰度级图像的Alpha通道透明度。最高支持24位真彩色图像以及8位灰度图像。支持Alpha通道的透明/半透明特性。支持图像亮度的Gamma校准信息。支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等信息。
三、PNG文件结构
PNG图象格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
1、PNG文件署名
PNG文件署名由8个固定字节组成,是一个PNG文件的标识。
十进制 | 137 80 78 71 13 10 26 10 |
十六进制 | 89 50 4E 47 0D 0A 1A 0A |
2、数据块
PNG文件定义了两种类型的数据块,分别是关键数据块和辅助数据块。其中关键数据属于必须的数据块,定义了4个标准数据块,即文件头数据块(IHDR)、调色板数据块(PLTE)、图像数据块(IDAT)和图像结束数据(IEND),而辅助数据块属于可选的数据块,包含了一些数据块辅助信息。
数据块名称 |
允许多 个数据块 |
位 置 |
文件头数据块(IHDR) | 不允许 | 第一个数据块 |
调色板数据块(PLTE) | 不允许 | 第二个数据块,可选 |
图像数据块(IDAT) | 允许 | 如果有调色板数据块(PLTE),则是第三个数据块,如果没有调色板数据块(PLTE),则时第二个数据块。如果有多个图像数据块,则必须按图像数据连续存储 |
图像结束数据(IEND) | 不允许 | 最后一个数据块 |
每个数据块格式相同,由以下4个部分组成:
名称 | 字节数 | 说明 |
Length (长度) | 4字节 | 指定数据块中数据域的长度,其长度不超过(231-1)字节 |
Chunk Type Code (数据块类型码) | 4字节 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data (数据块数据) | 可变长度 | 存储按照Chunk Type Code指定的数据 |
CRC (循环冗余检测) | 4字节 |
存储用来检测是否有错误的循环冗余码 |
四、实例分析
利用FlexHEX分析以下PNG格式文件:
1、PNG文件头
2、数据块
(1)文件头数据块(IHDR)
值 | 含义 | 说明 |
00 00 00 0D | 长度 | 13字节 |
49 48 44 52 | 标识数据块类型 | 文件头数据块标识 |
00 00 03 78 | 宽 | 888个像素点 |
00 00 03 A8 | 高 | 936个像素点 |
08 | 比特深度 | 256色图像 |
02 | 颜色类型 | 真彩色图像 |
00 | 压缩方法 | 目前均为0 |
00 | 滤波 | 目前均为0 |
00 | 扫描方式 | 非隔行扫描 |
0C 32 C1 36 | CRC校验码 | 循环冗余 |
(2)辅助数据块
值 | 含义 | 说明 |
00 00 00 09 | 长度 | 9字节 |
70 48 59 73 | 标识数据块类型 | 辅助数据块标识 |
00 9A 9C 18 | CRC校验码 | 循环冗余 |
(3)调色板数据块(PLTE)
该数据块属于可选数据块,在本示例当中未包含本数据块
(4)图像数据块(IDAT)
值 | 含义 | 说明 |
00 00 20 00 | 长度 | 8192字节 |
49 44 41 54 | 标识数据块类型 | 图像数据块标识 |
(5)图像结束数据(IEND)
该数据块未图像结束的标识,固定未00 00 00 49 45 4E 44 AE 42 60 82
数据压缩(二)——PNG文件结构分析相关推荐
- QQWry.dat文件结构分析(zz)
TITLE : QQWry.dat文件结构分析 AUTHOR : lionel@nkbbs.org DATE : 2004/12/18 CONTENT: 最近写一个程序,其中一 ...
- midi文件结构分析及生成方法_移动短信技术
从网上找的,已经将用BC写的改成了VC的,由于对音乐的理解比乐盲还差,对于程序中转换是否有问题我也不得而知,反正用VC生成的MIDI文件听起来惨不忍睹. 对于制作MIDI音乐来说,比播放MIDI文件本 ...
- MIDI文件结构分析及生成方法大全
从网上找的,已经将用BC写的改成了VC的,由于对音乐的理解比乐盲还差,对于程序中转换是否有问题我也不得而知,反正用VC生成的MIDI文件听起来惨不忍睹. 对于制作MIDI音乐来说,比播放MIDI文件本 ...
- MIDI文件结构分析及生成方法
一.MIDI文件结构分析 MIDI文件包含首部块(Header Chunk)和音轨块(Track Chunk)两部分.其格式一般如下: MThd <数据长度> <Header数据&g ...
- VS2013 解决方案文件结构分析
VS2013 解决方案文件结构分析 参考文章: (1)VS2013 解决方案文件结构分析 (2)https://www.cnblogs.com/haogj/p/4248030.html 备忘一下.
- 十二、文件上传与下载
一.如何实现文件上传 要实现Web开发中的文件上传功能,通常需完成两步操作:一是在Web页面中添加上传输入项,二是在Servlet中读取上传文件的数据,并保存到本地硬盘中. 由于大多数文件的上传都是通 ...
- Java笔记(十二) 文件基础技术
文件基础技术 一.文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分.如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可 ...
- 嵌入式Linux自学笔记(二)——文件IO
一.简介 本节讨论Unix系统中大多数文件用到的5个函数:open,read,write,lseek,close.本节描述的函数经常被称为不带缓冲的IO.不带缓冲指的是每个read和write都调用内 ...
- Class文件结构分析
Class文件结构分析 1. Class文件的结构概览图 2. 每一项数据说明 类型 名称 数量 说明 u4 magic 1 魔数:确定一个文件是否是Class文件 u2 minor_version ...
- c语言压缩文本文件北京理工大学,北京理工大学C语言程序设计第十二章文件.ppt...
北京理工大学C语言程序设计第十二章文件 2000年1月25日 北京理工大学 / 第十二章 文件 第一节 文件概述 第二节 文件的处理 第三节 文件的顺序读写操作 第四节 文件的随机读写操作 第五节 文 ...
最新文章
- 2021年大数据Kafka(十二):❤️Kafka配额限速机制❤️
- JAVA多线程之Runnable和Thread比较
- (转)[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
- 内向女生适合学计算机吗,适合内向女生学的专业有哪些
- linux查端口占用
- python 在数字前面自动补0
- 包含天,时,分,秒的倒计时
- 欢迎大家讨论一个关于界面显示的问题!!
- SCPPO(十二):SQL误操作如何恢复?
- android模拟qq登陆,模拟qq登录
- android切图的公式,APP的切图原理
- GIS招聘 | 云南省自然资源厅所属事业单位
- 在VMware ESXi中使用固态硬盘
- 关于matlab好文推荐
- 清明节全国哀悼,那么网站全部变灰是怎么实现的?
- 函数调用雷劈数C语言,雷劈数??
- SpringCloud和SpringCloudAlibaba的区别
- HDU - 1069 C - Monkey and Banana
- IPV6公网ip的获取,搞定
- 【数据库】DBMS几种进程模型优劣与举例
热门文章
- 魔众一物一码溯源防伪系统 v1.1.0 页面SEO优化,系统升级调整
- [双语阅读]阿汤哥爱女苏芮当选好莱坞最红明星宝贝
- 程序员辅助工具,某些时候能有意外的收获
- 毕设-希尔伯特-黄变换(特征提取)
- 企业案例 | 以阿里巴巴为例,解析大数据采集中的日志采集
- python关闭word文件_使用Python退出Word文档的问题
- kangle+php_kangle_init.php
- 完美世界3D格斗手游[格斗宝贝]今日公測
- 分享我的百度网盘超级会员取消自动续费流程
- 右手第四版引导页源码 - 彩虹云任务引导页模板