【数据压缩】第二次作业——PNG图像格式分析

这篇具有很好参考价值的文章主要介绍了【数据压缩】第二次作业——PNG图像格式分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PNG图像文件分析

概述

PNG格式是一种采用无损压缩算法的位图格式,支持索引、灰度、RGB三种颜色方案以及alpha通道等特性。

PNG能够支持256色调色板技术,产生文件的体积小,最高支持24位真彩色图像以及8位灰度图像,支持存在附加文本信息,以保留图像名称、作者、著作权、创作时间、注释等,支持无损压缩,适合在网络传输中快速显示预览效果后再显示全貌。

图片

本文借助所选PNG图片的二进制表示来加深对PNG图像文件的理解,所选图片为:

【数据压缩】第二次作业——PNG图像格式分析

在vs2019中使用二进制格式打开上面的图片,就可以看到用十六进制显示的PNG文件的信息了

ps:推荐“格式工厂”,可以将视频、音频、图像、文档等转换成需要的格式

PNG文件结构是什么样子的?

PNG二进制文件读取的时候是高位在前低位在后。

PNG图像格式的文件由一个8字节的PNG文件表示域和3个以上的后续数据块(IHDR、IDAT、IEND)组成。数据块又分为关键数据块,也是一个PNG文件必须要包含的数据块,还有可选数据块。

一个标准PNG文件的格式为:

| PNG文件标志 | PNG数据块 | …… | PNG数据块 |

如何能知道这是一个PNG文件?

可以通过头文件的方式来看是否是一个PNG文件。
PNG文件头共8个字节,用来识别该文件是否是PNG文件,这一部分的值为

十进制数 137 80 78 71 13 10 26 10
十六进制数 89 50 4e 47 0d 0a 1a 0a

其中第一个字节0x89超出量ASCII字符的范围,这样可以避免某些软件将PNG文件当作文本文件来处理。

观察”小猪佩奇“的图片:

【数据压缩】第二次作业——PNG图像格式分析

其头部信息与PNG文件的头部信息一样,可以确定是PNG格式的图片

PNG的其他数据如何表示?

PNG定义了两种类型的数据块,一种是关键数据块,也就是标准数据块,定义了4个标准数据块,每个PNG文件都必须包含它们;另一种是可选数据块。

常见的PNG格式数据块有

数据块符号 数据块名称 多数据块 可选否 位置限制
IHDR 文件头数据块 第一块
cHRM 基色和白色点数据块 在PLTE和IDAT之前
gAMA 图像γ数据块 在PLTE和IDAT之前
sBIT 样本有效位数据块 在PLTE和IDAT之前
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 图像结束数据 最后一个数据块

还可能会有iCPCP数据块,是PNG解码时进行特殊的颜色处理信息。

数据块结构

无论是关键数据块还是可选数据块,它们大致都由以下几部分构成:

名称 字节数 说明
Length(长度) 4字节 指定数据块中数据(Chunk Data)部分的长度,其长度最大为 ( 2 31 − 1 ) (2^{31}-1) (2311)字节
Chunk Type Code(数据块类型码) 4字节 数据块类型码由ASCII字母( A ∼ Z A\sim Z AZ a ∼ z a\sim z az)组成
Chunk Data(数据块数据) 可变长度 存储按照Chunk Type Code指定的数据
CRC(循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码(针对Chunk Type Code和Chunk Data部分数据计算得到)

关键数据块

只展示Chunk Data部分的结构

文件头数据块IHDR

文件头数据块,包含PNG文件中存储的图像数据的基本信息,是数据部分的第一个数据块,并且一个PNG文件中只能有一个文件头数据块,其具体组成如下

域的名称 字节数 说明
Width 4字节 图像宽度,以像素为单位
Height 4字节 图像高度,以像素为单位
Bit depth 1字节 图像深度:(数字代表位深)
索引彩色图像:1,2,4或8
灰度图像:1,2,4,8或16
真彩色图像:8或16
Color Type 1字节 颜色类型:(数字代表位深)
0:灰度图像, 1,2,4,8或16
2:真彩色图像,8或16
3:索引彩色图像,1,2,4或8
4:带 α \alpha α通道数据的灰度图像,8或16
6:带 α \alpha α通道数据的真彩色图像,8或16
Compression method 1字节 压缩方法(LZ77派生算法),仅支持压缩方式0(deflate压缩方式)
Filter method 1字节 滤波器方法,在PNG的白皮书中仅定义了方法0,然而所有的5种方法都被支持
Interlace method 1字节 隔行扫描方法:
0:非隔行扫描
1:Adam7(由Adam M.Costello开发的7遍隔行扫描方法)

α \alpha α通道表示一张图片的透明和半透明度

位深和色彩格式的对应关系与进一步解释:
【数据压缩】第二次作业——PNG图像格式分析

观察“小猪佩奇”图片:

【数据压缩】第二次作业——PNG图像格式分析

  • 红色框中的部分就是数据块长度,图示表示此数据块长度为13个字节
  • 橙色框中的部分数据块类型码,49 48 44 52是IHDR标识,其实就是IHDR在十六进制ASCII码表中的对应值
  • 蓝色部分是数据部分
    • 00 00 04 7B:图像的宽为1147个像素
    • 00 00 02 FC:图像的高为764个像素
    • 08:图像深度,8bit
    • 02:真彩色图像
    • 00:压缩方法
    • 00:滤波器方法
    • 00:非各行扫描
  • 绿色部分的FF 56 2E E3是指CRC数据校验码
调色板数据块PLTE

调色板数据块包含有与索引彩色图像相关的彩色变换数据,它仅与索引彩色图像有关,要放在图像数据块IDAT之前。

真彩色的PNG数据(颜色类型为2/6)也可以有调色板数据块,可以便于非真彩色显示程序用它来量化图像数据从而显示图像。

调色板实际是一个彩色索引查找表,它的值可以是1~256中的任一个数,每个值的信息用3个字节表示。彩色查找表其实是指表示彩色图像本身的像素值和彩色查找表入口地址(可以用索引来类比理解)有一个变换关系,通过彩色图像本身的像素值得到查找表的索引(入口地址),找到对应查找表中用来显示的像素值,这些颜色是真实的,但是不是图像本身的颜色。

调色板的数据块数据表示为

颜色 字节 说明
Red 1字节 0=黑色,255=红色
Green 1字节 0=黑色,255=绿色
Blue 1字节 0=黑色,255=蓝色
  • 调色板的长度应该是3的倍数,否则就是一个非法的调色板。

  • 调色板的条目数不应超过图像位深所能表示的范围(如位深为4,则调色板条目数不能超过 2 4 = 16 2^4=16 24=16),否则会导致图像不合法。

  • 如果调色板条目数少于允许的条目数,那么此时图像数据中任何超出范围的像素值都会被认为是错误的。

  • 另外,对于每个样本颜色,调色板都用8位来表示。

在本张图中没有找到与调色板有关的信息

图像数据块IDAT

存储实际数据,在数据流中可包含多个连续顺序的图像数据块。

观察“小猪佩奇”:

【数据压缩】第二次作业——PNG图像格式分析

其下一个数据块为

【数据压缩】第二次作业——PNG图像格式分析

  • 红色框中的部分是这个数据块的数据长度,为8192个字节
  • 橙色部分为数据块类型码,49 44 41 54为IDAT的类型码
  • 蓝色部分为图像数据部分
  • 通过搜索发现,这张图片中含有很多IDAT标识,说明这张图片中有多个连续的图像数据块,第二张图就是第一张图显示的图像数据块的下一个数据块,第二张图中绿色的部分就是第一张图数据块的CRC校验码
图像结束数据IEND

用来标记PNG文件或者数据流已经结束了,要放在文件的尾部

观察“小猪佩奇”:

【数据压缩】第二次作业——PNG图像格式分析

  • 红色的部分表示数据块数据部分的长度,00 00 00 00表示数据部分长度为0,也就是这一个数据块没有数据部分
  • 橙色部分为数据类型码,49 45 4E 44为IEND标识
  • 绿色部分为CRC校验码
  • 文件结束

辅助数据块

辅助数据块主要包含以下4类、14种:

  • 表示透明信息(Transparency information)的数据块:

    • tRNS chunk(Transparency chunk,透明信息数据块)
  • 表示色彩空间信息(Colour space information)的数据块:

    • gAMA chunk(Image gamma chunk,图像γ数据块)
    • cHRM chunk(Primary chromaticities chunk,基色和白色度数据块)
    • sRGB chunk(Standard RGB colour space chunk,标准RGB色彩空间数据块
    • iCCP chunk(Embedded ICC profile chunk)
  • 表示文本信息(Textual information)的数据块:

    • tEXt chunk(Textual data chunk,文本信息数据块)
    • zTXt chunk(Compressed textual data chunk,压缩文本数据块)
    • iTXt chunk(International textual data chunk)
  • 表示其他信息(Miscellaneous information)的数据块:

    • bKGD chunk(Background colour chunk,背景颜色数据块)
    • pHYs chunk(Physical pixel dimensions chunk,物理像素尺寸数据块)
    • sBIT chunk(Significant bits chunk,样本有效位数据块)
    • sPLT chunk(Suggested palette chunk)
    • hIST chunk(Palette histogram chunk,图像直方图数据块)
    • tIME chunk(Image last-modification time chunk,图像最后修改时间数据块)
物理像素尺寸数据块pHYs

物理像素尺寸数据块,表示了图片的像素尺寸或者宽高比,其定义如下

字节数 说明
4字节 x轴上每米像素的数量,单位:像素
4字节 y轴上每米像素的数量,单位:像素
1字节 单位,1表示以米为单位,0表示未知单位

观察“小猪佩奇”:
【数据压缩】第二次作业——PNG图像格式分析

  • 红色代表数据块的长度,为9个字节
  • 橙色代表数据块的类型码,70 48 59 73是pHYs数据块的标识
  • 蓝色表示数据
    • 00 00 0B 13:x轴上每米2835个像素
    • 00 00 0B 13:y轴上每米2835个像素
    • 01:以米为单位
  • 绿色表示CRC校验码
图像透明数据块tRNS

α \alpha α通道是指一张图片的透明和半透明度。

对于颜色类型为4或6的图片来讲,其 α \alpha α通道的值就跟在对应的灰度值或 R 、 G 、 B R、G、B RGB值的后面,因此不需要有tRNS数据块;对于颜色类型为0或2的图片来说,用2个字节来代表采样值,只有被采样的灰度值或 R 、 G 、 B R、G、B RGB的值被视为透明,其余的值都为完全不透明;对于颜色类型为3的图片来说,每个样点是调色板的索引,大小为1个字节,它是指调色板索引对应像素的 α \alpha α值,同样的,0是全透明,255是全不透明, 无论图像位深如何,tRNS块包含的alpha值不能超过调色板数目,但tRNS块包含的alpha值可以少于调色板数目,此时所有剩下的条目的alpha值被设为255。

标准RGB色彩空间数据块sRGB和图像Y数据块gAMA

查看图片:

【数据压缩】第二次作业——PNG图像格式分析

除了上面分析的数据块以外,该图片还具有sRGB和gAMA数据块。

如果存在sRGB块,图像样本符合sRGB颜色空间[IEC 61966-2-1],并应使用由国际颜色联盟[ICC-1]和[ICC-1A]定义的指定渲染意图来显示。

其数据块部分只有1个字节:

名称 长度 说明
Rendering intent 1字节 0:Perceptual,用于牺牲色度精度以更好地适应输出设备的图像,例如照片;
1:Relative colorimetric,用于需要颜色外观匹配(相对于输出设备白点)的图像,例如标志;
2:Saturation,用于牺牲亮度和色调以保持合适的饱和度的图像,例如图表和图形;
3:Absolute colorimetric,用于需要保留绝对色度的图像,例如用于不同输出设备的图像预览(校样)。

为了与不使用sRGB块的解码器兼容,通常也会跟一个gAMA块以及可选的cHRM块。

当sRGB块存在时,能够识别它并能够进行颜色管理的解码器忽略gAMA和cHRM块,而使用sRGB块。建议sRGB和iCCP块不要同时出现在PNG数据流中。

gAMA和cHRM只能取下面的值:

名称 数据块取值
gAMA 45455
cHRM White point x:31270
White point y:32900
Red x:64000
Red y:33000
Green x:30000
Green y:60000
Blue x:15000
Blue y:6000

观察该图片:

【数据压缩】第二次作业——PNG图像格式分析文章来源地址https://www.toymoban.com/news/detail-403510.html

  • 红色框中表示的分别是sRGB和gAMA数据块的长度,sRGB的长度为1个字节,gAMA的长度为4个字节
  • 橙色框中表示数据块的类型码,73 52 47 42表示sRGB,67 41 4D 41表示gAMA
  • 蓝色框中表示数据块数据,sRGB数据块的数据为0x00,说明是Perceptual,用于牺牲色度精度以更好地适应输出设备的图像;gAMA数据块的数据为0xB18F,十进制为45455
  • 绿色数据块为CRC校验码

参考文献

  1. 维基百科https://zh.wikipedia.org/wiki/PNG
  2. PNG格式https://dev.gameres.com/Program/Visual/Other/PNGFormat.htm
  3. 常见文件格式文件头https://blog.csdn.net/zhembrace/article/details/52717559
  4. PNG格式详解https://www.cnblogs.com/grayi/p/15203516.html
  5. PNG文件格式详解https://blog.csdn.net/bisword/article/details/2777121
  6. PNG文件实例分析https://guoxiaodong.blog.csdn.net/article/details/45848171
  7. PNG文件格式分析https://www.freesion.com/article/5444396354/
  8. PNG文件分析https://blog.csdn.net/szzheng/article/details/105177740
  9. PNGhttps://www.w3.org/TR/PNG/index-noobject.html#11pHYs

到了这里,关于【数据压缩】第二次作业——PNG图像格式分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web前端(第二次作业)

    1、计算用户指定的数值内的奇数和。例如用户输入的是 10,则计算 1 + 3 + 5 + 7 + 9 的和 运行截图: 2.使用递归计算 1 ~ 100 的和 运行结果;

    2024年01月17日
    浏览(48)
  • 网络服务第二次作业

      [root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf  Virtualhost 192.168.101.200:80           #虚拟主机IP及端口         DocumentRoot  /www/openlab        #网页文件存放目录         ServerName www.openlab.com      #服务器域名 /VirtualHost Directory /www         AllowOverride none                      

    2024年02月11日
    浏览(41)
  • web前端第二次作业

    1,计算用户指定的数值内的奇数和 效果运行图: 代码: 2,使用递归计算 1 ~ 100 的和 效果运行图: 代码:

    2024年01月16日
    浏览(47)
  • 软件工程实践第二次作业---文件读取

    这个作业属于哪个课程 软件工程-23年春季学期 这个作业要求在哪里 软件工程实践第二次作业—文件读取 这个作业的目标 完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序 其他参考文献 《构建之法》《源代码管理》 0.Gitcode项目

    2024年03月15日
    浏览(66)
  • 图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)

    一、浏览器网页展示图片方法 1.1、HTML img 标签 img 标签常用属性 序号 属性 描述 1 src 用于指定图片的 URL 或路径。 2 alt 用于当图片无法展示时显示的替代文本,seo优化时要注意添加这个属性。 3 width/height 用于指定图片展示的宽度和高度。如果只指定其中一个值,那么另一个

    2024年02月11日
    浏览(67)
  • 算法设计与分析第二章作业

    题目 思路 判断最大子段和,可以用分治的思想,每次将序列一分为二,选择两个序列的最大子段和。 但是这里还有一种可能,就是子段可以横跨两个子序列,所以我们的最大子段和就是: MAX(左边序列最大字段和,横跨两序列的最大子段和,右边序列的最大子段和)。 对

    2024年02月05日
    浏览(51)
  • WebP格式图像:起源、优势、兼容性及在线压缩方法

    关于作者: 还是大剑师兰特 :曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。 热门专栏 精彩推荐

    2024年03月12日
    浏览(56)
  • 又一起数据泄露事件五个月内的第二次

      据报道,T-Mobile 在发现攻击者从 2023 年 2 月下旬开始的一个多月内访问了数百名客户的个人信息后,披露了 2023 年的第二次数据泄露事件。 与之前报告的数据泄露事件(最近一次影响了 3700 万人)相比,此次事件仅影响了 836 名客户。  然而,暴露的信息量非常大,使相关

    2024年02月03日
    浏览(60)
  • 【ACDC数据集】:预处理ACDC心脏3D MRI影像数据集到VOC数据集格式,nii转为jpg,label转为png

    【Segment Anything Model】做分割的专栏链接,欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的介绍和预处理,持续更新中。 跟我要处理好的数据集的,我都给了。请自行注意检查数据集是否是你想要的,我只处理了原数据集的第一部分 也就是frame01部分。并且测试集

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包