home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2134 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  7.5 KB  |  295 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __version__ = '0.9'
  5. import Image
  6. import ImageFile
  7. import ImagePalette
  8.  
  9. def i16(c):
  10.     return ord(c[0]) + (ord(c[1]) << 8)
  11.  
  12.  
  13. def o16(i):
  14.     return chr(i & 255) + chr(i >> 8 & 255)
  15.  
  16.  
  17. def _accept(prefix):
  18.     return prefix[:6] in ('GIF87a', 'GIF89a')
  19.  
  20.  
  21. class GifImageFile(ImageFile.ImageFile):
  22.     format = 'GIF'
  23.     format_description = 'Compuserve GIF'
  24.     global_palette = None
  25.     
  26.     def data(self):
  27.         s = self.fp.read(1)
  28.         if s and ord(s):
  29.             return self.fp.read(ord(s))
  30.  
  31.     
  32.     def _open(self):
  33.         s = self.fp.read(13)
  34.         if s[:6] not in ('GIF87a', 'GIF89a'):
  35.             raise SyntaxError, 'not a GIF file'
  36.         s[:6] not in ('GIF87a', 'GIF89a')
  37.         self.info['version'] = s[:6]
  38.         self.size = (i16(s[6:]), i16(s[8:]))
  39.         self.tile = []
  40.         flags = ord(s[10])
  41.         bits = (flags & 7) + 1
  42.         if flags & 128:
  43.             self.info['background'] = ord(s[11])
  44.             p = self.fp.read(3 << bits)
  45.             for i in range(0, len(p), 3):
  46.                 if p[i] == p[i] and p[i + 1] == p[i + 1]:
  47.                     pass
  48.                 elif not p[i + 1] == p[i + 2]:
  49.                     p = ImagePalette.raw('RGB', p)
  50.                     self.global_palette = self.palette = p
  51.                     break
  52.                     continue
  53.             
  54.         
  55.         self._GifImageFile__fp = self.fp
  56.         self._GifImageFile__rewind = self.fp.tell()
  57.         self.seek(0)
  58.  
  59.     
  60.     def seek(self, frame):
  61.         if frame == 0:
  62.             self._GifImageFile__offset = 0
  63.             self.dispose = None
  64.             self._GifImageFile__frame = -1
  65.             self._GifImageFile__fp.seek(self._GifImageFile__rewind)
  66.         
  67.         if frame != self._GifImageFile__frame + 1:
  68.             raise ValueError, 'cannot seek to frame %d' % frame
  69.         frame != self._GifImageFile__frame + 1
  70.         self._GifImageFile__frame = frame
  71.         self.tile = []
  72.         self.fp = self._GifImageFile__fp
  73.         if self._GifImageFile__offset:
  74.             self.fp.seek(self._GifImageFile__offset)
  75.             while self.data():
  76.                 pass
  77.             self._GifImageFile__offset = 0
  78.         
  79.         if self.dispose:
  80.             self.im = self.dispose
  81.             self.dispose = None
  82.         
  83.         self.palette = self.global_palette
  84.         while None:
  85.             s = self.fp.read(1)
  86.             if not s or s == ';':
  87.                 break
  88.                 continue
  89.             if s == '!':
  90.                 s = self.fp.read(1)
  91.                 block = self.data()
  92.                 if ord(s) == 249:
  93.                     flags = ord(block[0])
  94.                     if flags & 1:
  95.                         self.info['transparency'] = ord(block[3])
  96.                     
  97.                     self.info['duration'] = i16(block[1:3]) * 10
  98.                     
  99.                     try:
  100.                         if flags & 8:
  101.                             self.dispose = Image.core.fill('P', self.size, self.info['background'])
  102.                         elif flags & 16:
  103.                             self.dispose = self.im.copy()
  104.                     except (AttributeError, KeyError):
  105.                         pass
  106.                     except:
  107.                         None<EXCEPTION MATCH>(AttributeError, KeyError)
  108.                     
  109.  
  110.                 None<EXCEPTION MATCH>(AttributeError, KeyError)
  111.                 if ord(s) == 255:
  112.                     self.info['extension'] = (block, self.fp.tell())
  113.                     if block[:11] == 'NETSCAPE2.0':
  114.                         self.info['loop'] = 1
  115.                     
  116.                 
  117.                 while self.data():
  118.                     pass
  119.                 continue
  120.             if s == ',':
  121.                 s = self.fp.read(9)
  122.                 x0 = i16(s[0:])
  123.                 y0 = i16(s[2:])
  124.                 x1 = x0 + i16(s[4:])
  125.                 y1 = y0 + i16(s[6:])
  126.                 flags = ord(s[8])
  127.                 interlace = flags & 64 != 0
  128.                 if flags & 128:
  129.                     bits = (flags & 7) + 1
  130.                     self.palette = ImagePalette.raw('RGB', self.fp.read(3 << bits))
  131.                 
  132.                 bits = ord(self.fp.read(1))
  133.                 self._GifImageFile__offset = self.fp.tell()
  134.                 self.tile = [
  135.                     ('gif', (x0, y0, x1, y1), self._GifImageFile__offset, (bits, interlace))]
  136.                 break
  137.                 continue
  138.             continue
  139.             if not self.tile:
  140.                 raise EOFError, 'no more images in GIF file'
  141.             self.tile
  142.             self.mode = 'L'
  143.             if self.palette:
  144.                 self.mode = 'P'
  145.             
  146.  
  147.     
  148.     def tell(self):
  149.         return self._GifImageFile__frame
  150.  
  151.  
  152.  
  153. try:
  154.     import _imaging_gif
  155. except ImportError:
  156.     _imaging_gif = None
  157.  
  158. RAWMODE = {
  159.     '1': 'L',
  160.     'L': 'L',
  161.     'P': 'P' }
  162.  
  163. def _save(im, fp, filename):
  164.     if _imaging_gif:
  165.         
  166.         try:
  167.             _imaging_gif.save(im, fp, filename)
  168.             return None
  169.         except IOError:
  170.             pass
  171.         except:
  172.             None<EXCEPTION MATCH>IOError
  173.         
  174.  
  175.     None<EXCEPTION MATCH>IOError
  176.     
  177.     try:
  178.         rawmode = RAWMODE[im.mode]
  179.         imOut = im
  180.     except KeyError:
  181.         if Image.getmodebase(im.mode) == 'RGB':
  182.             imOut = im.convert('P')
  183.             rawmode = 'P'
  184.         else:
  185.             imOut = im.convert('L')
  186.             rawmode = 'L'
  187.     except:
  188.         Image.getmodebase(im.mode) == 'RGB'
  189.  
  190.     for s in getheader(imOut, im.encoderinfo):
  191.         fp.write(s)
  192.     
  193.     flags = 0
  194.     
  195.     try:
  196.         interlace = im.encoderinfo['interlace']
  197.     except KeyError:
  198.         interlace = 1
  199.  
  200.     if min(im.size) < 16:
  201.         interlace = 0
  202.     
  203.     if interlace:
  204.         flags = flags | 64
  205.     
  206.     
  207.     try:
  208.         transparency = im.encoderinfo['transparency']
  209.     except KeyError:
  210.         pass
  211.  
  212.     fp.write('!' + chr(249) + chr(4) + chr(1) + o16(0) + chr(int(transparency)) + chr(0))
  213.     fp.write(',' + o16(0) + o16(0) + o16(im.size[0]) + o16(im.size[1]) + chr(flags) + chr(8))
  214.     imOut.encoderconfig = (8, interlace)
  215.     ImageFile._save(imOut, fp, [
  216.         ('gif', (0, 0) + im.size, 0, rawmode)])
  217.     fp.write('\x00')
  218.     fp.write(';')
  219.     
  220.     try:
  221.         fp.flush()
  222.     except:
  223.         pass
  224.  
  225.  
  226.  
  227. def _save_netpbm(im, fp, filename):
  228.     import os
  229.     file = im._dump()
  230.     if im.mode != 'RGB':
  231.         os.system('ppmtogif %s >%s' % (file, filename))
  232.     else:
  233.         os.system('ppmquant 256 %s | ppmtogif >%s' % (file, filename))
  234.     
  235.     try:
  236.         os.unlink(file)
  237.     except:
  238.         pass
  239.  
  240.  
  241.  
  242. def getheader(im, info = None):
  243.     if info:
  244.         pass
  245.     optimize = info.get('optimize', 0)
  246.     s = [
  247.         'GIF87a' + o16(im.size[0]) + o16(im.size[1]) + chr(135) + chr(0) + chr(0)]
  248.     if optimize:
  249.         i = 0
  250.         maxcolor = 0
  251.         for count in im.histogram():
  252.             if count:
  253.                 maxcolor = i
  254.             
  255.             i = i + 1
  256.         
  257.     else:
  258.         maxcolor = 256
  259.     if im.mode == 'P':
  260.         s.append(im.im.getpalette('RGB')[:maxcolor * 3])
  261.     else:
  262.         for i in range(maxcolor):
  263.             s.append(chr(i) * 3)
  264.         
  265.     return s
  266.  
  267.  
  268. def getdata(im, offset = (0, 0), **params):
  269.     
  270.     class collector:
  271.         data = []
  272.         
  273.         def write(self, data):
  274.             self.data.append(data)
  275.  
  276.  
  277.     im.load()
  278.     fp = collector()
  279.     
  280.     try:
  281.         im.encoderinfo = params
  282.         fp.write(',' + o16(offset[0]) + o16(offset[1]) + o16(im.size[0]) + o16(im.size[1]) + chr(0) + chr(8))
  283.         ImageFile._save(im, fp, [
  284.             ('gif', (0, 0) + im.size, 0, RAWMODE[im.mode])])
  285.         fp.write('\x00')
  286.     finally:
  287.         del im.encoderinfo
  288.  
  289.     return fp.data
  290.  
  291. Image.register_open(GifImageFile.format, GifImageFile, _accept)
  292. Image.register_save(GifImageFile.format, _save)
  293. Image.register_extension(GifImageFile.format, '.gif')
  294. Image.register_mime(GifImageFile.format, 'image/gif')
  295.