本说明介绍PPM(Portable PixMap),PGM(Portable GreyMap),PBM(Portable BitMap)文件的格式。这些格式是保存图像数据的方便(简单)的方法,它们同样易于在自己的应用程序中读取。不幸的是,这些标准并不总是可以实现的。
PPM
PPM文件由header和image data两部分组成。
header由至少三个部分组成,通常由回车符、换行符描述,但PPM规范中仅需要空格。
第一行是一个magic标识符,它可以是“P3”或“P6”(不包括双引号!)。
下一行由图像的宽度和高度作为ASCII数字组成。
header的最后一部分给出了像素的颜色分量的最大值,这允许格式描述多于单字节(0-255)的颜色值。
除了上述所需的行之外,注释可以放在任何具有“#”字符的位置,注释扩展到行的末尾。
以下是所有有效的PPM Header:
Header 示例1
P6 1024 788 255
Header 示例2
P6
1024 788
# A comment
255
Header 示例3
P3
1024 # the image width
788 # the image height
# A comment
1023
图像数据本身的格式取决于magic标识符。如果是“P3”,则图像数据以ASCII文本形式给出,每个像素的数值范围从0到header中给出的最大值。每行不应超过70个字符。
PPM 示例4
P3
# example from the man page
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
如果PPM的magic标识符为“P6”,则图像数据以字节格式存储,每个颜色分量(r,g,b)一个字节。注释只能在header的最后一个字段之前发生,并且只有一个字节可能出现在最后一个字段后面,通常是回车符或换行符。“P6”图像文件大小要明显小于“P3”,读取速度要快得多。请注意,“P6”PPM文件只能用于单字节颜色。
虽然格式规范不需要,但是以从顶部到底部,从左到右的顺序存储图像是一种标准惯例。每个像素存储为一个字节,值为0代表黑色,值为255代表白色。“通常”按顺序存储红-绿-蓝色。
PGM
该格式与上述相同,只是存储内容是灰度信息,即一个值代表一个像素而不是三个值(r,g,b)代表一个像素。header部分的唯一区别是“P2”和“P5”作为magic标识符,它们分别对应于图像数据的ASCII和二进制形式。
PGM 示例
P2
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将单位像素图像存储为一系列ASCII“0”或“1”。“0”表示白色,“1”表示黑色。 除了没有header的最后一部分(最大像素值在这种存储方式下没有任何意义),它的header与PPM和PGM格式相同,PBM的magic标识符为“P1”。
PBM 示例
P1
# PBM example
24 7
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 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 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 1 1 1 0 0 1 1 1 1 0 0 1 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