【图像处理】png 格式详解

一、PNG格式是什么

PNG(Portable Network Graphics)是一种无损压缩图像格式,支持透明通道、多色深存储,核心由文件标志和数据块组成,兼具兼容性与灵活性,广泛应用于网页、设计等场景。

PNG文件的核心结构分为两部分,整体设计围绕"模块化数据存储"展开,确保解析高效且功能可扩展:

  • 文件标志:固定8字节标识,用于快速识别PNG文件。
  • 数据块(Chunks):存储图像所有信息,分为关键数据块(必需)和辅助数据块(可选),各数据块按严格顺序排列。

二、PNG文件基础组成

2.1 文件标志

  • 十六进制值:89 50 4E 47 0D 0A 1A 0A
  • 核心识别:中间50 4E 47对应ASCII码"PNG",是文件类型的核心标识。
  • 作用:区分PNG与其他图像格式(如BMP、JPG),避免解析错误。

2.2 数据块整体格式

所有PNG数据块遵循相同的4段式结构,总长度=4(长度)+4(类型)+N(数据)+4(CRC)字节:

字段 大小(字节) 描述
Length(长度) 4 指定数据块中"数据部分"的字节数,不包含自身、类型码和CRC字段
Chunk Type Code(类型) 4 4个ASCII字符组成(如IHDR、PLTE),标识数据块功能
Chunk Data(数据) Length 存储该数据块的核心信息(如图像宽高、颜色数据等)
CRC(循环冗余检测) 4 基于"类型码+数据"计算得出,用于验证数据完整性,算法为X³²+X²⁶+X²³+X²²+X¹⁶+X¹²+X¹¹+X¹⁰+X⁸+X⁷+X⁵+X⁴+X²+X+1

三、关键数据块(Critical Chunks)

关键数据块是PNG文件正常解析的基础,数量固定、顺序严格,不可缺失(PLTE除外):

数据块名称 是否允许多个 位置要求 核心功能
文件头数据块(IHDR) 第一个数据块 存储图像基础参数:宽高(4字节各)、色深、颜色类型、压缩方式、隔行扫描方法
调色板数据块(PLTE) 第二个数据块(可选,仅8位及以下色深图像需用) 存储RGB三色值(每组3字节),供索引彩色图像映射颜色
图像数据块(IDAT) PLTE之后(有PLTE时)或IHDR之后(无PLTE时),多块需连续存储 存储经DEFLATE(LZ77变种)压缩的图像实际数据,是图像内容的核心
图像结束数据块(IEND) 最后一个数据块 标记文件结束,固定十六进制值:00 00 00 00 49 45 AE 44 4E 62 60 82

关键数据块拓展说明

  • IHDR颜色类型:0(灰度)、2(真彩色)、3(索引色)、4(灰度+α通道)、6(真彩色+α通道),需与色深匹配(如真彩色色深为8/16位)。
  • IDAT核心限制:数据长度不可为0,否则文件无法打开(实操验证结论)。
  • IEND特性:无实际数据(长度为0),仅作为结束标识,CRC值固定。

四、辅助数据块

辅助数据块共14种,可选包含,用于补充图像的附加信息(如颜色校准、元数据),部分有位置限制:

数据块名称 是否允许多个 位置要求 核心功能
基色和白色点数据块(cHRM) PLTE与IDAT之间 定义图像的基色和白色点参数,用于颜色校准
伽马数据块(gAMA) PLTE与IDAT之间 存储gamma校正值,确保不同设备显示颜色一致
标准RGB颜色数据块(sRGB) PLTE之后、IDAT之前(与iCCP互斥) 指定图像的RGB颜色空间标准
背景颜色数据块(bKGD) PLTE之后、IDAT之前 定义图像的默认背景色
透明数据块(tRNS) PLTE之后、IDAT之前 存储透明通道信息,支持索引色/灰度图的透明设置
物理像素尺寸数据块(pHYs) IDAT之前 定义图像物理尺寸(每米像素数),支持打印/显示比例校准
文本信息数据块(tEXt/iTXt) 无限制 存储图像元数据(如作者、版权、描述),iTXt支持多语言

辅助数据块拓展说明

  • 互斥关系:sRGB与iCCP不可同时存在,需根据使用场景选择(网页常用sRGB)。
  • 实用价值:pHYs用于印刷行业校准尺寸,tRNS实现无损透明(区别于JPG的Alpha通道压缩)。

五、PNG格式的优势与应用场景

5.1 优势

  • 无损压缩:压缩后不损失图像细节,适合截图、图标、设计原稿。
  • 支持透明:通过tRNS或α通道实现不同程度透明(完全透明/半透明)。
  • 多色深支持:从1位(黑白)到16位(真彩色),适配不同需求。
  • 无版权限制:开源格式,无需支付授权费用。

5.2 与其他格式对比

格式 压缩方式 透明支持 适用场景
PNG 无损 支持 图标、截图、设计稿、网页图像
JPG 有损 不支持 照片、大尺寸图像(追求小体积)
BMP 无压缩 不支持 原始图像存储(体积大)

更多资料:https://github.com/0voice

相关推荐
2zcode13 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
棱镜研途21 小时前
【EI检索会议 | SPIE出版】 2026年智能计算与多模态信号处理国际学术会议(CIMSP 2026)
图像处理·算法·计算机视觉·信号处理·多模态·学术会议·智能计算
医疗信息化王工21 小时前
从零到一:基于 GGUF 格式部署 Unlimited-OCR 搭建企业级证件识别服务
图像处理·c#·ocr
2zcode1 天前
项目文档:基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
2zcode2 天前
基于MATLAB图像处理的金属表面缺陷检测与工业量测系统设计与实现
图像处理·数码相机·matlab
2zcode2 天前
基于MATLAB图像处理的饮料瓶识别与价格显示系统设计与实现
开发语言·图像处理·matlab
sali-tec2 天前
C# 基于OpenCv的视觉工作流-章93-YOLO手部姿态
图像处理·人工智能·数码相机·opencv·yolo·计算机视觉
weixin_408099672 天前
OCR批量识别图片方案:从手动处理到自动化API系统(Python/Java/PHP实战)
图像处理·python·ocr·文字识别·api调用·批量识别·石榴智能
2zcode3 天前
免费开源项目文档:基于MATLAB图像处理的药片检测与计数系统设计与实现
开发语言·图像处理·matlab
这张生成的图像能检测吗3 天前
(论文速读)CWNet:用于微光图像增强的因果小波网络
图像处理·人工智能·深度学习·机器学习·低照度图像增强