2
# The Python Imaging Library.
9
# 98-03-06 fl Write RGBA images (as RGB, that is)
11
# Copyright (c) Secret Labs AB 1997-98.
12
# Copyright (c) Fredrik Lundh 1996.
14
# See the README file for information on usage and redistribution.
22
import Image, ImageFile
25
# --------------------------------------------------------------------
34
# PIL extensions (for test purposes only)
41
return prefix[0] == "P" and prefix[1] in "0456y"
44
# Image plugin for PBM, PGM, and PPM images.
46
class PpmImageFile(ImageFile.ImageFile):
49
format_description = "Pbmplus image"
51
def _token(self, s = ""):
52
while 1: # read until next whitespace
54
if not c or c in string.whitespace:
64
raise SyntaxError, "not a PPM file"
65
mode = MODES[self._token(s)]
71
self.mode = rawmode = mode
77
if s not in string.whitespace:
81
s = self.fp.readline()
82
s = int(self._token(s))
90
self.size = xsize, ysize
96
# ALTERNATIVE: load via builtin debug function
97
# self.im = Image.core.open_ppm(self.filename)
98
# self.mode = self.im.mode
99
# self.size = self.im.size
102
# --------------------------------------------------------------------
104
def _save(im, fp, filename):
106
rawmode, head = "1;I", "P4"
108
rawmode, head = "L", "P5"
109
elif im.mode == "RGB":
110
rawmode, head = "RGB", "P6"
111
elif im.mode == "RGBA":
112
rawmode, head = "RGB", "P6"
114
raise IOError, "cannot write mode %s as PPM" % im.mode
115
fp.write(head + "\n%d %d\n" % im.size)
118
ImageFile._save(im, fp, [("raw", (0,0)+im.size, 0, (rawmode, 0, 1))])
120
# ALTERNATIVE: save via builtin debug function
124
# --------------------------------------------------------------------
126
Image.register_open("PPM", PpmImageFile, _accept)
127
Image.register_save("PPM", _save)
129
Image.register_extension("PPM", ".pbm")
130
Image.register_extension("PPM", ".pgm")
131
Image.register_extension("PPM", ".ppm")