首页 > 代码库 > 【图像格式】 PPM/PGM/PBM格式编码详解

【图像格式】 PPM/PGM/PBM格式编码详解

PPM(Portable PixMap)是portable像素图片,是由netpbm项目定义的一系列的portable图片格式中的一个。这些图片格式都相

对比较容易处理,跟平台无关,所以称之为portable,就是比较直接的图片格式。比如PPM,其实就是把每一个点的RGB分别保存

来。所以,PPM格式的文件是没有压缩的,相对比较大,但是由于图片格式简单,一般作为图片处理的中间文件(不会丢失文件

息),或者作为简单的图片格式保存。


格式分析


netpbm的几种图片格式是通过其表示的颜色类型来区别的,PBM是单色图,只有黑色和白色,PGM是灰度图片PPM是代表

完整的RGB颜色的图片,有时也统称为PNM格式。


(1) 文件头


文件头由三个部分组成:这几个部分之间用回车或换行分隔(但是PPM标准中要求是空格)


第一部分是文件magic number


每一个netpbm图片由两个字节的magic number (ASCII)组成,来标识文件的类型(PBM/PGM/PPM)以及文件的编码(ASCII或binary)


P1  单色图  ASSII    PBM

P2  灰度图  ASSII    PGM

P3  像素图  ASSII    PPM

P4  单色图  二进制   PBM

P5  灰度图  二进制   PGM

P6  像素图  二进制   PPM


第二部分是图像宽度和高度(空格隔开),用ASCII表示。


第三部分是描述像素的最大颜色组成,允许描述超过一个字节(0-255)的颜色值。


另外,在上面的三个部分里面,都可以使用"#"插入注释,注释是#到行尾(回车或换行)部分。


(2) 图像数据部分


对于ASCII格式,就是按照RGB的顺序排列,以ASCII存储,并且,RGB中间用空格隔开,图片每一行用回车隔开。

对于binary格式,就是每一个像素点的RGB值分别顺序存储并且按二进制写入文件,没有任何分隔。


PPM

例子1:

P6 1024 778 255


例子2:

P6

1024 778

255


例子3:

P6#PPM文件格式

1024 778#宽度和高度

255


通常的习惯,图象从上到下,从左到右被存储。色彩成分按照通常的红-绿-蓝顺序爱存储。


PGM

该格式文件存储灰度图形,也就是这里每个像素使用一个值来表示而不是3个(R,G,B)。同PPM唯一不同的是头部用P2和

P5,分别表示用ASCII和字节码来表示数据。


例如:

P2

24 7

15


PBM

使用ASCII的0或1方式来表示数据,0表示白色,1表示黑色。与PPM、PGM不同的头部是少了第三行,因为第三行的最大色彩

值在这个模式下已经没有意义了。


如下:

P1

# PBM example

24 7

【图像格式】 PPM/PGM/PBM格式编码详解