文档 PNG (.png)

W3C 标准

便携式网络图形(Portable Network Graphics,PNG)是一种无专利限制的光栅图形文件格式,支持无损数据压缩、索引颜色和可变 Alpha 通道透明度。

将 PNG 转换为 JPG

免费的浏览器端 PNG 转 JPG 转换器。在您的设备上即时转换文件。

在线压缩 PNG

隐私保护 - 文件不会离开您的设备

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 PNG 文件:

选择或将文件拖放到此处

隐私保护 - 文件不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (魔数)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 PNG 文件:

十六进制签名 (偏移量 0):

89 50 4E 47 0D 0A 1A 0A

ASCII 表示形式: .PNG....

标准化: W3C 推荐标准 (1996) / ISO/IEC 15948:2004

技术规格

容器架构基于数据块(chunk)的二进制容器,每个数据块带有 4 字节的 CRC32 校验
压缩方式Deflate(LZ77 + 哈夫曼编码),采用 5 种预测扫描行过滤器(None、Sub、Up、Average、Paeth)
字节序大端序(网络字节序),用于数据块长度、尺寸和 CRC
色彩空间sRGB, Display P3, 索引调色板 (1-8 位), 灰度, 真彩色 (24/48 位)
通道与结构RGB + Alpha(每个通道最高 16 位 / 64 位 RGBA)
最大尺寸2,147,483,647 x 2,147,483,647 像素(4 字节无符号整数)
透明度完整的 8 位 / 16 位可变 Alpha 透明通道
流式传输与渐进式加载Adam7 7 遍交错算法支持渐进式二维扫描行渲染。

技术对比矩阵:PNG 对比同类产品

技术属性PNG (当前)WebPAVIFJPEG
压缩类型严格无损(Deflate + 二维预测过滤器)有损(VP8)与无损(VP8L)有损(AV1 intra)与无损严格有损(离散余弦变换)
Alpha 透明度完整的 8 位 / 16 位可变 Alpha 通道支持 8 位 Alpha 通道支持 8 位 / 10 位 / 12 位 Alpha不支持透明通道
文件大小(照片)较大(通常为有损格式的 3 到 6 倍)小(比 JPEG 小 25%-35%)超小(比 JPEG 小 40%-55%)中等基准
文件大小(图形/UI)截图、线稿和文本的文件体积极小极佳的无损模式良好,但编码较慢较差(沿尖锐边缘产生振铃伪影)
浏览器兼容性自 1998 年以来在所有浏览器中 100% 通用支持 97% 以上的现代浏览器93%+ 现代浏览器支持100% 通用

常见损坏模式与十六进制恢复指南

图像查看器显示"致命错误:不是有效的 PNG 文件"或无法打开。

根本原因: 前 8 个字节被 ASCII 传输模式修改(将 0x0D 0x0A 错误转换为 0x0A 或 0x0D 0x0D 0x0A)。

恢复方法: 在十六进制编辑器中打开文件,并验证前 8 个字节是否与"89 50 4E 47 0D 0A 1A 0A"匹配。恢复这 8 个准确的头部字节通常可以修复图像。

pngcheck 报告"IDAT 数据块中出现 CRC 错误"或图像部分加载,底部扫描行损坏。

根本原因: 压缩的 zlib 数据流中的位损坏,或者 IDAT 数据块中的 CRC32 校验和无效。

恢复方法: 使用 pngcheck -f 或 Deflate 流恢复实用程序重新计算有效的 CRC32 值,或者解压损坏块之前仍完好的扫描线。

图像在桌面查看器中渲染正常,但在 iOS 应用程序中失败。

根本原因: iOS 要求使用苹果专有的 CgBI 字节交换格式,或图像包含非标准色彩空间数据块。

恢复方法: 使用“pngcrush -revert-iphone-optimizations”将图像标准化,以恢复标准的 W3C RGBA 顺序。

安全分析与解析器攻击向量

PNG 受到许多操作系统和应用的支持。安全风险包括耗尽解码器内存的攻击和恶意辅助数据块。

已知攻击向量

  • 过大的 tEXt 和 zTXt 元数据块在未沙盒化的解码器中触发内存耗尽(OOM)拒绝服务。
  • 传统 libpng 版本中的堆缓冲区溢出漏洞(例如 png_set_PLTE 中的 CVE-2015-8126)。
  • 像素泛洪解压攻击,即文件体积很小的图像声明了巨大的尺寸(例如 100,000 x 100,000 像素)。
  • 通过隐写术窃取数据,将加密载荷隐藏在辅助私有数据块中(例如 eXIf 或自定义数据块类型)。

防御性最佳实践: 在内存中分配像素缓冲区之前,务必验证图像尺寸。使用内存安全的净化器在用户上传时剥离非必要的辅助数据块(eXIf、tEXt)。

历史渊源与里程碑

2004PNG 在国际上被标准化为 ISO/IEC 15948。
1996PNG 1.0 被发布为 W3C 推荐标准。
1995在 Usenet 的 comp.graphics 上创建,作为 GIF 的开源替代品,以回应 Unisys 强制执行 LZW 专利收费。

核心优势与特点

  • PNG 使用无损压缩,因此对未更改的图像进行编码不会产生压缩损失;但编辑或颜色转换仍可能改变像素值。
  • 平滑的 8 位 Alpha 透明度可在复杂背景上实现自然融合。
  • 伽马校正和色度数据块确保跨不同显示器的一致渲染。

技术局限与劣势

  • 对于摄影内容,与 WebP 或 AVIF 等现代有损格式相比,文件体积明显更大。
  • 标准 PNG 中没有原生的多帧动画(需要 APNG 扩展)。
  • 高位深(每通道 16 位)会产生巨大的未压缩内存解码缓冲区。

趣味技术冷知识

  • 8 字节魔数头部专为检测 FTP 传输造成的 CR/LF 换行符损坏而设计。
  • PNG 非官方的递归缩写是"PNG's Not GIF"。
  • 苹果在 iOS 应用 PNG 中使用了专有的 CgBI 数据块,将 RGBA 反转为 BGRA 以进行直接 GPU 渲染。

常见技术问题

为什么 PNG 文件在图像编辑器中保存时有时会变大?

不同的软件套件使用不同的 Deflate 压缩级别和预测扫描线过滤策略。诸如 Photoshop 之类的程序经常附加未压缩的色彩空间配置文件、XMP 元数据块以及未优化的 IDAT 数据块大小。诸如 File2File.app 压缩器之类的专用工具会重新评估所有 5 种扫描行过滤器,以实现最小的文件大小。

PNG-8 和 PNG-24 之间有什么区别?

PNG-8 使用最多 256 种颜色的索引调色板(类似于 GIF),生成非常小的文件,适合简单的图标。PNG-24 支持 1670 万种颜色(真彩色,每通道 8 位),而 PNG-32 则添加了一个 8 位的 Alpha 透明通道。

为什么 PNG 有 5 种预测扫描行过滤器?

Deflate 压缩重复的字节模式。由于摄影或渐变像素值会逐渐变化,PNG 通过计算相邻像素之间的差值来过滤每条扫描线(None、Sub、Up、Average、Paeth)。这会将渐变数据转换为接近零的字节串,从而在 Deflate 下实现极大程度的压缩。

PNG 是否支持用于商业印刷的 CMYK 色彩空间?

不支持。官方 W3C PNG 规范刻意将色彩类型限制为灰度、索引和 RGB。需要 CMYK 的专业印刷工作流程必须使用 TIFF 或 PDF 容器。