【图像格式】 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

时间: 2024-10-12 16:43:06

【图像格式】 PPM/PGM/PBM格式编码详解的相关文章

【图像格式】 TGA格式编码详解

【图像格式】 DPX格式编码详解

视频格式编码详解

当我们看到一个视频文件的时候,可以经常看到视频文件后面跟着***.avi,***.mp4等等许多种类,这些类型到底是什么呢,其实他们就是视频的封装格式. 封装格式知多少: 说到封装格式,我们先要了解一下什么是所谓的封装格式.封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中.也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以.笔者查到这些后可以给大家打个比方:封装格式就像是个包装盒,而编码压缩好的视频音频文件就像是盒子里面的东西,你要是拿去送礼,不可

[转]各种字符集和编码详解

在软件的编码和实现中,我们可能会碰到个 一个比较头疼的问题--编码,不同字符间的编码和解码,你确定了解各种字符的编码吗?一个朋友问到了我这个问题,我虽然能回答一两个出来,但是感觉已经有点模糊,混乱了,在网上搜了搜,在书上翻了翻,总结一下吧.首先按照字符编码的历程来看: 1.  ASCII 我们需要了解的最早编码是ASCII码.它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的ASCII字符,而且有整整一位空余下来.如果你技艺高超,可以将该位用

[转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解

混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Server.UrlEncode.Uri.EscapeUriString.Uri.EscapeDataString JavaScript中的还好,只提供了三个,C#中主要用的就有这么多,还没有列出其他编码(HTML),一多就弄不明白,弄不明白就心生恐惧,心生恐惧就变得苦逼,本文就向大家详细解释在JavaSc

Python 之路 Day02 -基础数据类型及编码详解

  基础篇 本章大纲: 字符编码和解释器编码详解 变量命名规则 基础数据类型(一) int 基础数据类型(二)  string 基础数据类型(三) bool 基础数据类型(四) list 基础数据类型(五) tuple 基础数据类型(六) dict 基础数据类型(七) set 补充可迭代对象的循环连接及enumerate输出 字符编码和解释器编码详解 一,编码的重要性: 1.1 文件编码和字符编辑编码及读取编码 #!/usr/bin/env python #-*- coding:utf-8 -*

【转】编码详解(下)

第二部分:JSP相关编码设置 2.1 JSP页面本身的编码形式 <%@ page language="java" import="java.util.*" pageEncoding="utf-8″%>pageEncoding 指的是jsp文件本身在本地保存时的编码方式.注意:在eclipse环境下会根据pageEncoding保存的. 2.2 服务器端发送字节流的编码 <%@ page contentType="text/htm

【转】编码详解(上)

第一部分:编码的种类 编码规范用于规定可见字符和控制字符的二进制表示形式,它分为多种类型:下面详细说说编码的方式: 1.1      ANSI编码 这种编码方式规定了英文占用了一个字节,中文占用两个字节(这个是我们通常所说的编码方式).因为汉字分为多个类型:有简体中文,有繁体中文,还有日语中的汉字.所以ANSI编码又分为:GB2312(简体中文),BIG5(繁体中文),JIS(日文)等各自的编码标准. 1.2 ASCII编码 这是美国上世纪60年代制定的.ASCII码一共规定了128个字符的编码

第二讲:编码详解,防止中文乱码

编码详解 编码支持: ASCII编码:美国信息交换标准代码(American Standard Code for InformationInterchange,简称ASCII)是一种用于信息交换的美国标准代码,它的作用是给英文字母.数字.标点.字符转换成计算机能识别的二进制数规定了一个大家都认可并遵守的标准. GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换 GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码 ANSI是与你使用的w