PNG文件格式

article/2025/7/1 12:52:31

文章目录

    • 一、概述
    • 二、文件结构
    • 三、文件署名域
    • 四、数据块
      • 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.hkcw.cn/article/xGkLwpPiwA.shtml

相关文章

Python_day43

DAY 43 复习日 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 关于 Dataset 从谷歌图片中抓取了 1000 多张猫和狗的图片。问题陈述是构建一个模型,该模型可以尽可能准确地在图像…

【Quest开发】bug记录——Link界面无音频选项

此方法适用于这个不见了的情况 打开设备管理器,点击卸载 再到Oculus\Support\oculus-drivers找到oculus-driver点击重装驱动,重启电脑即可修复

汇编语言学习(二)——寄存器

目录 一、通用寄存器 二、数据存储 三、汇编指令 四、物理地址 五 、段寄存器 一、通用寄存器 在8086 CPU中,通用寄存器共有四个,分别是 AX、BX、CX 和 DX,它们通常用于存放一般性的数据,均为 16 位寄存器,可以存…

Error creating bean with name *.PageHelperAutoConfiguration 异常解析

一、问题报错 微服务安装成功,启动失败,报错如下: 二、 Spring Boot应用启动错误分析 错误概述 这是一个Spring Boot应用启动过程中出现的Bean创建错误。根据错误堆栈,主要问题在于无法创建PageHelper分页插件的自动配置类。 …

【Zephyr 系列 3】多线程与调度机制:让你的 MCU 同时干多件事

好的,下面是Zephyr 系列第 3 篇:聚焦 多线程与调度机制的实践应用,继续面向你这样的 Ubuntu + 真板实战开发者,代码清晰、讲解通俗、结构规范,符合 CSDN 高质量博客标准。 🧠关键词:Zephyr、线程调度、k_thread、k_sleep、RTOS、BluePill 📌适合人群:想从裸机开发进…

AI万能写作v1.0.12

AI万能写作是一款高度自动化、智能化、个性化的AI智能软件,旨在通过人工智能技术进行内容整合创作,为用户提供便捷高效的写作辅助。这款APP能够一键生成各类素材内容,帮助用户快速获取思路和灵感,成为写作、学习、工作以及日常生活…

【Linux网络篇】:HTTP协议深度解析---基础概念与简单的HTTP服务器实现

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.三个预备知识认识域名认识URL认识URL编码和解码 二.http请求…

【JAVA后端入门基础001】Tomcat 是什么?通俗易懂讲清楚!

📚博客主页:代码探秘者 ✨专栏:《JavaSe》 其他更新ing… ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏作者水平有限,欢迎各位大佬指点&…

系统思考:成长与投资不足

最近认识了一位95后年轻创业者,短短2年时间,他的公司从十几个人发展到几百人,规模迅速扩大。随着团队壮大,用户池也在持续扩大,但令人困惑的是,业绩增长却没有明显提升,甚至人效持续下滑。尽管公…

PHP7+MySQL5.6 查立得轻量级公交查询系统

# PHP7MySQL5.6 查立得轻量级公交查询系统 ## 系统简介 本系统是一个基于PHP7和MySQL5.6的轻量级公交查询系统(40KB级),支持线路查询、站点查询和换乘查询功能。系统采用原生PHPMySQL开发,无需第三方框架,适合手机端访问。 首发版本&#x…

【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理

基于 MSYS2(MINGW64)中 Python 的 Poetry 虚拟环境包编译失败处理笔记 一、背景 在基于 MSYS2(MINGW64)中 Python 创建的 Poetry 虚拟环境里,安装 Suna 开源项目相关包时编译失败,阻碍项目正常部署。 后端…

docker可视化工具

一、portainer(不常用) 1、安装portainer [rootlocalhost /]# docker run -d -p 8088:9000 --name portainer --restartalways -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --privilegedtrue portainer/portainer-c…

#16 学习日志软件测试

#16 #13布置的任务都没有wanc 反思一下 一个是贪玩 一个是懒 还有一个原因是学习方式 单看视频容易困 然后是一个进度宝贝 java ai 编程 完 挑着看的 廖雪峰教程 完 速看 很多过时 javaweb ai笔记 见到13.aop 小林coding 看到4.并发 java guide 还没开始 若依框架 笔…

【数据集】NCAR CESM Global Bias-Corrected CMIP5 Output to Support WRF/MPAS Research

目录 数据概述🔍 数据集简介:🧪 数据处理方法:📅 时间范围(Temporal Coverage):📈 模拟情景(Scenarios):🌡️ 关键变量(Variables):📏 垂直层级(Vertical Levels):💾 数据格式与获取方式:数据下载及处理参考🌍 数据集名称: NCAR CESM Global B…

如何用AI写作?

过去半年,我如何用AI高效写作,节省数倍时间 过去六个月,我几乎所有文章都用AI辅助完成。我的朋友——大多是文字工作者,对语言极为敏感——都说看不出我的文章是AI写的还是亲手创作的。 我的AI写作灵感部分来自丘吉尔。这位英国…

dvwa4——File Inclusion

LOW: 先随便点开一个文件,可以观察到url栏变成这样,说明?page是dvwa当前关卡用来加载文件的参数 http://10.24.8.35/DVWA/vulnerabilities/fi/?pagefile1.php 我们查看源码 ,没有什么过滤,直接尝试访问其他文件 在url栏的pag…

mysql数据库实现分库分表,读写分离中间件sharding-sphere

一 概述 1.1 sharding-sphere 作用: 定位关系型数据库的中间件,合理在分布式环境下使用关系型数据库操作,目前有三个产品 1.sharding-jdbc,sharding-proxy 1.2 sharding-proxy实现读写分离的api版本 4.x版本 5.x版本 1.3 说明…

Doris环境部署与应用开发

部署的方式有几种,可以下载github上的源码编译,这里直接下载官方最新的二进制包,差不多有4G。 wget -c https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.0.5-bin-x64.tar.gz tar -zxvf apache-doris-3.0.5-bin-x64.tar.gz mv apache-doris-3.0.…

Dify在Windows 11上的安装实战

一、引言 随着人工智能技术的飞速发展,大语言模型(LLM)的应用场景日益丰富,从智能客服到内容生成,再到复杂的数据分析,LLM正逐步渗透到各行各业。Dify,作为一个专注于AI应用开发的开源平台&…

C++之动态数组vector

Vector 一、什么是 std::vector?二、std::vector 的基本特性(一)动态扩展(二)随机访问(三)内存管理 三、std::vector 的基本操作(一)定义和初始化(二&#xf…