home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pypil112.zip / PIL-1.1.2.zip / Lib / site-packages / PIL / PpmImagePlugin.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2001-12-25  |  3KB  |  98 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.2)
  3.  
  4. __version__ = '0.2'
  5. import string
  6. import Image
  7. import ImageFile
  8. MODES = {
  9.     'P4': '1',
  10.     'P5': 'L',
  11.     'P6': 'RGB',
  12.     'P0CMYK': 'CMYK',
  13.     'PyP': 'P',
  14.     'PyRGBA': 'RGBA',
  15.     'PyCMYK': 'CMYK' }
  16.  
  17. def _accept(prefix):
  18.     if prefix[0] == 'P':
  19.         pass
  20.     return prefix[1] in '0456y'
  21.  
  22.  
  23. class PpmImageFile(ImageFile.ImageFile):
  24.     format = 'PPM'
  25.     format_description = 'Pbmplus image'
  26.     
  27.     def _token(self, s = ''):
  28.         while 1:
  29.             c = self.fp.read(1)
  30.             if not c or c in string.whitespace:
  31.                 break
  32.             
  33.             s = s + c
  34.         return s
  35.  
  36.     
  37.     def _open(self):
  38.         s = self.fp.read(1)
  39.         if s != 'P':
  40.             raise SyntaxError, 'not a PPM file'
  41.         
  42.         mode = MODES[self._token(s)]
  43.         if mode == '1':
  44.             self.mode = '1'
  45.             rawmode = '1;I'
  46.         else:
  47.             self.mode = rawmode = mode
  48.         for ix in range(3):
  49.             while 1:
  50.                 while 1:
  51.                     s = self.fp.read(1)
  52.                     if s not in string.whitespace:
  53.                         break
  54.                     
  55.                 if s != '#':
  56.                     break
  57.                 
  58.                 s = self.fp.readline()
  59.             s = int(self._token(s))
  60.             if ix == 0:
  61.                 xsize = s
  62.             elif ix == 1:
  63.                 ysize = s
  64.                 if mode == '1':
  65.                     break
  66.                 
  67.             
  68.         
  69.         self.size = (xsize, ysize)
  70.         self.tile = [
  71.             ('raw', (0, 0, xsize, ysize), self.fp.tell(), (rawmode, 0, 1))]
  72.  
  73.  
  74.  
  75. def _save(im, fp, filename):
  76.     if im.mode == '1':
  77.         (rawmode, head) = ('1;I', 'P4')
  78.     elif im.mode == 'L':
  79.         (rawmode, head) = ('L', 'P5')
  80.     elif im.mode == 'RGB':
  81.         (rawmode, head) = ('RGB', 'P6')
  82.     elif im.mode == 'RGBA':
  83.         (rawmode, head) = ('RGB', 'P6')
  84.     else:
  85.         raise IOError, 'cannot write mode %s as PPM' % im.mode
  86.     fp.write(head + '\n%d %d\n' % im.size)
  87.     if head != 'P4':
  88.         fp.write('255\n')
  89.     
  90.     ImageFile._save(im, fp, [
  91.         ('raw', (0, 0) + im.size, 0, (rawmode, 0, 1))])
  92.  
  93. Image.register_open('PPM', PpmImageFile, _accept)
  94. Image.register_save('PPM', _save)
  95. Image.register_extension('PPM', '.pbm')
  96. Image.register_extension('PPM', '.pgm')
  97. Image.register_extension('PPM', '.ppm')
  98.