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 / FliImagePlugin.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2001-12-25  |  5KB  |  110 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.2)
  3.  
  4. __version__ = '0.2'
  5. import Image
  6. import ImageFile
  7. import ImagePalette
  8. import string
  9.  
  10. def i16(c):
  11.     return ord(c[0]) + (ord(c[1]) << 8)
  12.  
  13.  
  14. def i32(c):
  15.     return ord(c[0]) + (ord(c[1]) << 8) + (ord(c[2]) << 16) + (ord(c[3]) << 24)
  16.  
  17.  
  18. def _accept(prefix):
  19.     return i16(prefix[4:6]) in [
  20.         44817,
  21.         44818]
  22.  
  23.  
  24. class FliImageFile(ImageFile.ImageFile):
  25.     format = 'FLI'
  26.     format_description = 'Autodesk FLI/FLC Animation'
  27.     
  28.     def _open(self):
  29.         s = self.fp.read(128)
  30.         magic = i16(s[4:6])
  31.         if magic not in [
  32.             44817,
  33.             44818]:
  34.             raise SyntaxError, 'not an FLI/FLC file'
  35.         
  36.         self.mode = 'P'
  37.         self.size = (i16(s[8:10]), i16(s[10:12]))
  38.         duration = i32(s[16:20])
  39.         if magic == 44817:
  40.             duration = duration * 1000 / 70
  41.         
  42.         self.info['duration'] = duration
  43.         palette = map((lambda a: (a, a, a)), range(256))
  44.         s = self.fp.read(16)
  45.         self._FliImageFile__offset = 128
  46.         if i16(s[4:6]) == 61696:
  47.             self._FliImageFile__offset = self._FliImageFile__offset + i32(s)
  48.             s = self.fp.read(16)
  49.         
  50.         if i16(s[4:6]) == 61946:
  51.             s = self.fp.read(6)
  52.             if i16(s[4:6]) == 11:
  53.                 self._palette(palette, 2)
  54.             elif i16(s[4:6]) == 4:
  55.                 self._palette(palette, 0)
  56.             
  57.         
  58.         palette = map((lambda .0: (r, g, b) = .0chr(r) + chr(g) + chr(b)), palette)
  59.         self.palette = ImagePalette.raw('RGB', string.join(palette, ''))
  60.         self.frame = -1
  61.         self._FliImageFile__fp = self.fp
  62.         self.seek(0)
  63.  
  64.     
  65.     def _palette(self, palette, shift):
  66.         i = 0
  67.         for e in range(i16(self.fp.read(2))):
  68.             s = self.fp.read(2)
  69.             i = i + ord(s[0])
  70.             n = ord(s[1])
  71.             if n == 0:
  72.                 n = 256
  73.             
  74.             s = self.fp.read(n * 3)
  75.             for n in range(0, len(s), 3):
  76.                 r = ord(s[n]) << shift
  77.                 g = ord(s[n + 1]) << shift
  78.                 b = ord(s[n + 2]) << shift
  79.                 palette[i] = (r, g, b)
  80.                 i = i + 1
  81.             
  82.         
  83.  
  84.     
  85.     def seek(self, frame):
  86.         if frame != self.frame + 1:
  87.             raise ValueError, 'cannot seek to frame %d' % frame
  88.         
  89.         self.frame = frame
  90.         self.fp = self._FliImageFile__fp
  91.         self.fp.seek(self._FliImageFile__offset)
  92.         s = self.fp.read(4)
  93.         if not s:
  94.             raise EOFError
  95.         
  96.         framesize = i32(s)
  97.         self.decodermaxblock = framesize
  98.         self.tile = [
  99.             ('fli', (0, 0) + self.size, self._FliImageFile__offset, None)]
  100.         self._FliImageFile__offset = self._FliImageFile__offset + framesize
  101.  
  102.     
  103.     def tell(self):
  104.         return self.frame
  105.  
  106.  
  107. Image.register_open('FLI', FliImageFile, _accept)
  108. Image.register_extension('FLI', '.fli')
  109. Image.register_extension('FLI', '.flc')
  110.