写在最前
这是老师给的一个自由度非常大的作业… 需要我们自己设计问题并回答,然而我好像提不出什么问题(hmmm),不如就按照 PNG 文件的数据顺序把文件读取出来之后进行辨认、识读跟验证吧。
选用图片由苹果官网下载的 .jpg 文件另存为 .png 而来,原图如下

当我把这张图片放到 Xcode 中打开后我有点后悔了,因为右侧的信息里面并没有我看的参考文章里提到的大部分数据块儿,反而是一些类似网址或索引的东西(如图)。里面提到最多的是 adobe 跟 rdf。Adobe 跟大家都知道 Adobe 是同一个,至于另一个 RDF,我去问了 Google 之后发现是一个用于让电脑读取并理解的一个 「框架」,全称是「Resource Description Framework」,使用 XML 语言书写,是 W3C 的 Semantic Web 活动的一部分,看完网页介绍后大致理解为是为了让数据得以共享的框架。这张图片中出现这些数据应该与图片来源有关。

当然,图片信息中包含了 PNG 文件的必要信息
PNG 文件标识符
前八位为 PNG 文件的标识符,为了防止文件被识别为文本文件,在最开始使用 89 这个超出 ASCII 范围的数值标记

文件头数据块 IHDR
这八个字节的前四字节表示 IHDR 头块的长度为 13,后四个字节即为 IHDR 的 ASCII 码

图片的宽高信息
在文件中得到了图片的宽高信息为 07 A8 04 50,换算成十进制即为 1960 × 1104

打开文件的详细信息进行确认,得到的结果与读取结果一致

图形数据块 IDAT
在右侧区域可以看到从 ASCII 码转换过来的 IDAT 字样,从这里开始一直到最后即为图片的实际内容了,可以尝试自己更改数值(但要一个字节一个字节地更改),因为图片大部分内容相同,所以在这里面看到大量重复数据。【在这里,采用图片是带 Alpha 通道的,所以每个像素提取出来的信息分别是 R、G、B、Alpha(用于控制像素的不透明度)】

图像结束数据 IEND
文件结尾的 IEND (若误人为加入信息)总为 00 00 00 00 49 45 4E 44 AE 42 60 82
其中,00 00 00 00 为 IEND 数据块的长度,若无人为加入信息其总为 0;49 45 4E 44 为IEND 的 ASCII 码;AE 42 60 82 为 CRC 码(循环冗余码),前面两者总不变,CRC 码也总是不变

文章参考:
使用图片的下载地址为:https://www.apple.com.cn/newsroom/2020/03/apple-unveils-new-ipad-pro-with-lidar-scanner-and-trackpad-support-in-ipados/
《PNG文件格式》(二)PNG文件格式分析,地址为https://blog.youkuaiyun.com/hherima/article/details/45847043
《What is RDF》,地址为 https://www.w3schools.com/xml/xml_rdf.asp
关于 W3C’s Semantic Web Activity,参考地址为 https://www.w3.org/2001/sw/
本文深入探讨PNG文件格式,包括标识符、IHDR头块、宽高信息、IDAT图形数据块及IEND图像结束数据块。通过实际案例,展示了如何读取与理解PNG文件中的元数据,如Adobe与RDF相关信息。
1409

被折叠的 条评论
为什么被折叠?



