PPM、PGM、PBM图像格式


PPM、PGM、PBM图像格式

背景

PPM1、PGM2、PBM3格式由Jef Poskanzer在20世纪80年代发明,为了便于通过电子邮件,用ASCII码表示单色位图,能够承受一般的文本格式的变动。

第一个处理PBM格式的工具库是Pbmplus。它由这个格式的发明人Jef Poskanzer开发,在1988年发布。主要包含Jef编写的将PBM转化为已存在的其他图像格式的工具。在1988年末,Jef开发出PGM、PPM格式以及相关工具,并加入Pbmplus中。Pbmplus的最终发布日期是1991年12月10日。

在1993年,Netpbm4库开始开发,用来替代不再维护的Pbmplus。它是Pbmplus的简单的重新包装,附加全世界开发者提供的额外功能和修订,可能是目前用的最普遍的处理PBM、PGM和PPM格式的工具库。5

文件格式

这三种格式在颜色的表示上有差异。PBM是单色,PGM是灰度图,PPM使用RGB颜色。

每个文件的开头两个字节(ASCII码)作为文件描述子,指出具体格式和编码形式。具体见下表。

文件描述子 类型 编码
P1 位图 ASCII
P2 灰度图 ASCII
P3 像素图 ASCII
P4 位图 二进制
P5 灰度图 二进制
P6 像素图 二进制

基于ASCII的格式使人可读,并且能够很容易的移植到其他格式。但是二进制格式更有效,不仅因为他节约空间,而且因为他更容易被解析(因为很少有空格)

当使用二进制格式的时候,PBM每像素使用一个比特空间,PGM每个像素使用8个比特空间,PPM每像素使用24比特空间(8比特红色、8比特绿色、8比特蓝色)。

PPM

PPM图像格式分为两部分,分别为头部分和图像数据部分。

  • 头部分:

    由3部分组成,通过换行或空格进行分割,一般PPM的标准是空格。 第1部分:P3或P6,指明PPM的编码格式, 第2部分:图像的宽度和高度,通过ASCII表示, 第3部分:最大像素值,0-255字节表示。

  • 图像数据部分:

    ASCII格式:按RGB的顺序排列,RGB中间用空格隔开,图片每一行用回车隔开。 Binary格式:PPM用24bits代表每一个像素,红绿蓝分别占用8bits。

# 开头表示注释

示例:

1
2
3
4
5
6
7
P3
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0

PGM

PGM图像格式分为两部分,分别为头部分和图像数据部分。

  • 头部分:

    由3部分组成,通过换行或空格进行分割,一般PGM的标准是空格。 第1部分:P2或P5,指明PPM的编码格式, 第2部分:图像的宽度和高度,通过ASCII表示, 第3部分:最大灰度值(Maxval),还是ASCII十进制。必须小于65536,并且大于零。

  • 图像数据部分:

    ASCII格式: Binary格式:

# 开头表示注释

示例:

1
2
3
4
5
6
7
8
9
10
11
P2
# feep.pgm
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

PBM

PBM图像格式分为两部分,分别为头部分和图像数据部分。

  • 头部分:

    由2部分组成,通过换行或空格进行分割,一般PBM的标准是空格。 第1部分:P1或P4,指明PBM的编码格式, 第2部分:图像的宽度和高度,通过ASCII表示,

  • 图像数据部分:

    ASCII格式: Binary格式:

# 开头表示注释

  • 图像数据部分中的每个像素都由一个包含ASCII“ 1”或“ 0”的字节表示,分别表示黑色和白色。在一行的末尾没有填充位。

  • 每行不得超过70个字符。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
P1
# This is an example bitmap of the letter "J"
6 10
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0

ppm软件及在线网站

网站:

ppm-jpg

转换PPM

ppm_png

convert-to-ppm

软件:

ImageMagick

相关文章

libnetpbm

ppm file

PBM, PGM, PNM, and PPM File Format Summary

PBM, PGM, and PPM files

The PNM Format (sourceforge.net)



  1. http://netpbm.sourceforge.net/doc/ppm.html↩︎

  2. http://netpbm.sourceforge.net/doc/pgm.html [^Netpbm history]: https://web.archive.org/web/20090218192135/http://netpbm.sourceforge.net/history.html↩︎

  3. http://netpbm.sourceforge.net/doc/pbm.html↩︎

  4. https://en.wikipedia.org/wiki/Netpbm↩︎

  5. PBM格式 - 维基百科,自由的百科全书 (wikipedia.org)↩︎