便携式灰度图 (.pgm)

Netpbm 标准

便携式灰度图格式 (PGM) 是 Netpbm 系列的灰度图像规范,广泛用于计算机视觉、机器人技术、光学检测和数字图像处理算法。

检查与元数据

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

选择或将文件拖放到此处

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

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

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

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

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

50 32 / 50 35

ASCII 表示形式: P2 / P5

标准化: Netpbm 库规范

技术规格

容器架构Netpbm 格式,ASCII 文本(P2)或二进制(P5),包含宽度、高度、最大灰度值和像素流
压缩方式未压缩的原始二进制字节,或可供人阅读的 ASCII 数字文本
字节序大端序(P5 模式下的 16 位二进制样本)
色彩空间线性灰度或 sRGB 灰度
通道与结构单通道灰度(8 位或 16 位精度)
最大尺寸实际上不受限制(支持任意 64 位坐标空间)
透明度无
流式传输与渐进式加载支持按行顺序逐行流式读取

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

技术属性PGM (当前)PBMPPMPNG
色彩模式灰度(8 位 / 16 位)1 位单色RGB 真彩色(24 位 / 48 位)灰度、RGB、RGBA
Netpbm 同类格式PGM(便携式灰度图)PBM(便携式位图)PPM(便携式像素图)非 Netpbm 的 W3C 标准格式
魔数P2(ASCII)/ P5(二进制)P1(ASCII)/ P4(二进制)P3(ASCII)/ P6(二进制)‰PNG....
压缩未压缩未压缩未压缩无损 Deflate

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

图像反相显示,或过曝成一片白色。

根本原因: 标头中的“maxval”参数与数据不匹配(例如,数据为 255 级却声明 maxval 为 1)。

恢复方法: 更正 maxval 标头行,或使用 File2File.app Netpbm 转换器转码。

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

PGM 解码器必须仔细校验解析出的像素数是否与声明的尺寸相符,以防缓冲区越界。

已知攻击向量

  • 分配 width * height * (maxval > 255 ? 2 : 1) 大小的缓冲区时发生整数溢出。
  • 读取格式错误的 ASCII 数字词元时发生缓冲区过读。
  • 伪造标头尺寸可触发巨量内存分配,导致拒绝服务。

防御性最佳实践: 读取像素流之前,应限制最大允许尺寸和内存分配量。

历史渊源与里程碑

2000二进制 P5 模式采用 16 位深度(maxval 最高 65535),用于科学成像。
1993PGM 并入 Netpbm 工具包,成为标准的中间灰度格式。
1989Jef Poskanzer 创建 PGM,以补充 PBM 并提供完整的 256 级灰度支持。

核心优势与特点

  • PGM 的结构紧凑,基础读取器可能较易实现,但处理样本深度、文件头和格式错误的输入仍需谨慎。
  • 原生支持 16 位灰度,非常适合高度图、深度图和热成像。
  • ASCII 模式(P2)允许直接在标准文本编辑器中查看和修改原始像素值。

技术局限与劣势

  • 不压缩:与 PNG 等压缩格式相比,文件体积更大。
  • 缺少物理尺寸、色彩空间或地理位置元数据。
  • 严格限制为单通道:无法存储彩色数据或 Alpha 透明度。

趣味技术冷知识

  • OpenCV、ROS(机器人操作系统)和机器视觉系统经常使用 PGM 存储 SLAM 导航地图。
  • 游戏开发者常用 16 位 PGM 文件作为地形高度图,因为原始高程数据未经压缩且易于加载。
  • 标头中的“maxval”参数定义最大亮度值(通常 8 位为 255,16 位为 65535)。

常见技术问题

PGM 格式用于什么?

PGM 主要用于计算机视觉(OpenCV)、机器人技术(ROS 地图文件)、科学成像和 3D 地形高度图生成。

P2 和 P5 PGM 文件有什么区别?

P2 是纯 ASCII 文本,每个像素都以数字书写;P5 则将像素存储为紧凑的二进制字节。

如何将 PGM 转换为 JPG 或 PNG?

将您的 PGM 文件上传到 File2File.app,即可在浏览器中直接将其转换为 PNG 或 JPG,并完全保护隐私。