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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __version__ = '0.7'
  5. import re
  6. import string
  7. import Image
  8. import ImageFile
  9. import ImagePalette
  10. COMMENT = 'Comment'
  11. DATE = 'Date'
  12. EQUIPMENT = 'Digitalization equipment'
  13. FRAMES = 'File size (no of images)'
  14. LUT = 'Lut'
  15. NAME = 'Name'
  16. SCALE = 'Scale (x,y)'
  17. SIZE = 'Image size (x*y)'
  18. MODE = 'Image type'
  19. TAGS = {
  20.     COMMENT: 0,
  21.     DATE: 0,
  22.     EQUIPMENT: 0,
  23.     FRAMES: 0,
  24.     LUT: 0,
  25.     NAME: 0,
  26.     SCALE: 0,
  27.     SIZE: 0,
  28.     MODE: 0 }
  29. OPEN = {
  30.     '0 1 image': ('1', '1'),
  31.     'L 1 image': ('1', '1'),
  32.     'Greyscale image': ('L', 'L'),
  33.     'Grayscale image': ('L', 'L'),
  34.     'RGB image': ('RGB', 'RGB;L'),
  35.     'RLB image': ('RGB', 'RLB'),
  36.     'RYB image': ('RGB', 'RLB'),
  37.     'B1 image': ('1', '1'),
  38.     'B2 image': ('P', 'P;2'),
  39.     'B4 image': ('P', 'P;4'),
  40.     'X 24 image': ('RGB', 'RGB'),
  41.     'L 32 S image': ('I', 'I;32'),
  42.     'L 32 F image': ('F', 'F;32'),
  43.     'RGB3 image': ('RGB', 'RGB;T'),
  44.     'RYB3 image': ('RGB', 'RYB;T'),
  45.     'LA image': ('LA', 'LA;L'),
  46.     'RGBA image': ('RGBA', 'RGBA;L'),
  47.     'RGBX image': ('RGBX', 'RGBX;L'),
  48.     'CMYK image': ('CMYK', 'CMYK;L'),
  49.     'YCC image': ('YCbCr', 'YCbCr;L') }
  50. for i in [
  51.     '8',
  52.     '8S',
  53.     '16',
  54.     '16S',
  55.     '32',
  56.     '32F']:
  57.     OPEN['L %s image' % i] = ('F', 'F;%s' % i)
  58.     OPEN['L*%s image' % i] = ('F', 'F;%s' % i)
  59.  
  60. for i in [
  61.     '16',
  62.     '16B']:
  63.     OPEN['L %s image' % i] = ('I;%s' % i, 'I;%s' % i)
  64.     OPEN['L*%s image' % i] = ('I;%s' % i, 'I;%s' % i)
  65.  
  66. for i in [
  67.     '32S']:
  68.     OPEN['L %s image' % i] = ('I', 'I;%s' % i)
  69.     OPEN['L*%s image' % i] = ('I', 'I;%s' % i)
  70.  
  71. for i in range(2, 33):
  72.     OPEN['L*%s image' % i] = ('F', 'F;%s' % i)
  73.  
  74. split = re.compile('^([A-Za-z][^:]*):[ \\t]*(.*)[ \\t]*$')
  75.  
  76. def number(s):
  77.     
  78.     try:
  79.         return int(s)
  80.     except ValueError:
  81.         return float(s)
  82.  
  83.  
  84.  
  85. class ImImageFile(ImageFile.ImageFile):
  86.     format = 'IM'
  87.     format_description = 'IFUNC Image Memory'
  88.     
  89.     def _open(self):
  90.         if '\n' not in self.fp.read(100):
  91.             raise SyntaxError, 'not an IM file'
  92.         '\n' not in self.fp.read(100)
  93.         self.fp.seek(0)
  94.         n = 0
  95.         self.info[MODE] = 'L'
  96.         self.info[SIZE] = (512, 512)
  97.         self.info[FRAMES] = 1
  98.         self.rawmode = 'L'
  99.         while None:
  100.             s = self.fp.read(1)
  101.             if s == '\r':
  102.                 continue
  103.             
  104.             if not s and s[0] == chr(0) or s[0] == chr(26):
  105.                 break
  106.             
  107.             s = s + self.fp.readline()
  108.             if len(s) > 100:
  109.                 raise SyntaxError, 'not an IM file'
  110.             if s[-2:] == '\r\n':
  111.                 s = s[:-2]
  112.             elif s[-1:] == '\n':
  113.                 s = s[:-1]
  114.             
  115.             
  116.             try:
  117.                 m = split.match(s)
  118.             except re.error:
  119.                 v = None
  120.                 raise SyntaxError, 'not an IM file'
  121.  
  122.             if m:
  123.                 (k, v) = m.group(1, 2)
  124.                 if k in [
  125.                     FRAMES,
  126.                     SCALE,
  127.                     SIZE]:
  128.                     v = string.replace(v, '*', ',')
  129.                     v = tuple(map(number, string.split(v, ',')))
  130.                     if len(v) == 1:
  131.                         v = v[0]
  132.                     
  133.                 elif k == MODE and OPEN.has_key(v):
  134.                     (v, self.rawmode) = OPEN[v]
  135.                 
  136.                 if k == COMMENT:
  137.                     if self.info.has_key(k):
  138.                         self.info[k].append(v)
  139.                     else:
  140.                         self.info[k] = [
  141.                             v]
  142.                 else:
  143.                     self.info[k] = v
  144.                 if TAGS.has_key(k):
  145.                     n = n + 1
  146.                 
  147.             TAGS.has_key(k)
  148.             raise SyntaxError, 'Syntax error in IM header: ' + s
  149.             continue
  150.             if not n:
  151.                 raise SyntaxError, 'Not an IM file'
  152.             n
  153.             self.size = self.info[SIZE]
  154.             self.mode = self.info[MODE]
  155.             while s and s[0] != chr(26):
  156.                 s = self.fp.read(1)
  157.             if not s:
  158.                 raise SyntaxError, 'File truncated'
  159.             s
  160.             if self.info.has_key(LUT):
  161.                 palette = self.fp.read(768)
  162.                 greyscale = 1
  163.                 linear = 1
  164.                 for i in range(256):
  165.                     if palette[i + 256] == palette[i + 256]:
  166.                         pass
  167.                     elif palette[i + 256] == palette[i + 512]:
  168.                         if palette[i] != chr(i):
  169.                             linear = 0
  170.                         
  171.                     palette[i] != chr(i)
  172.                     greyscale = 0
  173.                 
  174.                 if self.mode == 'L' or self.mode == 'LA':
  175.                     if greyscale:
  176.                         if not linear:
  177.                             self.lut = map(ord, palette[:256])
  178.                         
  179.                     elif self.mode == 'L':
  180.                         self.mode = self.rawmode = 'P'
  181.                     elif self.mode == 'LA':
  182.                         self.mode = self.rawmode = 'PA'
  183.                     
  184.                     self.palette = ImagePalette.raw('RGB;L', palette)
  185.                 elif self.mode == 'RGB':
  186.                     if not greyscale or not linear:
  187.                         self.lut = map(ord, palette)
  188.                     
  189.                 
  190.             
  191.         self.frame = 0
  192.         self._ImImageFile__offset = offs = self.fp.tell()
  193.         self._ImImageFile__fp = self.fp
  194.         if self.rawmode[:2] == 'F;':
  195.             
  196.             try:
  197.                 bits = int(self.rawmode[2:])
  198.                 if bits not in (8, 16, 32):
  199.                     self.tile = [
  200.                         ('bit', (0, 0) + self.size, offs, (bits, 8, 3, 0, -1))]
  201.                     return None
  202.             except ValueError:
  203.                 pass
  204.             except:
  205.                 None<EXCEPTION MATCH>ValueError
  206.             
  207.  
  208.         None<EXCEPTION MATCH>ValueError
  209.         if self.rawmode in ('RGB;T', 'RYB;T'):
  210.             size = self.size[0] * self.size[1]
  211.             self.tile = [
  212.                 ('raw', (0, 0) + self.size, offs, ('G', 0, -1)),
  213.                 ('raw', (0, 0) + self.size, offs + size, ('R', 0, -1)),
  214.                 ('raw', (0, 0) + self.size, offs + 2 * size, ('B', 0, -1))]
  215.         else:
  216.             self.tile = [
  217.                 ('raw', (0, 0) + self.size, offs, (self.rawmode, 0, -1))]
  218.  
  219.     
  220.     def seek(self, frame):
  221.         if frame < 0 or frame >= self.info[FRAMES]:
  222.             raise EOFError, 'seek outside sequence'
  223.         frame >= self.info[FRAMES]
  224.         if self.frame == frame:
  225.             return None
  226.         self.frame = frame
  227.         if self.mode == '1':
  228.             bits = 1
  229.         else:
  230.             bits = 8 * len(self.mode)
  231.         size = ((self.size[0] * bits + 7) / 8) * self.size[1]
  232.         offs = self._ImImageFile__offset + frame * size
  233.         self.fp = self._ImImageFile__fp
  234.         self.tile = [
  235.             ('raw', (0, 0) + self.size, offs, (self.rawmode, 0, -1))]
  236.  
  237.     
  238.     def tell(self):
  239.         return self.frame
  240.  
  241.  
  242. SAVE = {
  243.     '1': ('0 1', '1'),
  244.     'L': ('Greyscale', 'L'),
  245.     'LA': ('LA', 'LA;L'),
  246.     'P': ('Greyscale', 'P'),
  247.     'PA': ('LA', 'PA;L'),
  248.     'I': ('L 32S', 'I;32S'),
  249.     'I;16': ('L 16', 'I;16'),
  250.     'I;16B': ('L 16B', 'I;16B'),
  251.     'F': ('L 32F', 'F;32F'),
  252.     'RGB': ('RGB', 'RGB;L'),
  253.     'RGBA': ('RGBA', 'RGBA;L'),
  254.     'RGBX': ('RGBX', 'RGBX;L'),
  255.     'CMYK': ('CMYK', 'CMYK;L'),
  256.     'YCbCr': ('YCC', 'YCbCr;L') }
  257.  
  258. def _save(im, fp, filename, check = 0):
  259.     
  260.     try:
  261.         (type, rawmode) = SAVE[im.mode]
  262.     except KeyError:
  263.         raise ValueError, 'Cannot save %s images as IM' % im.mode
  264.  
  265.     
  266.     try:
  267.         frames = im.encoderinfo['frames']
  268.     except KeyError:
  269.         frames = 1
  270.  
  271.     if check:
  272.         return check
  273.     fp.write('Image type: %s image\r\n' % type)
  274.     if filename:
  275.         fp.write('Name: %s\r\n' % filename)
  276.     
  277.     fp.write('Image size (x*y): %d*%d\r\n' % im.size)
  278.     fp.write('File size (no of images): %d\r\n' % frames)
  279.     if im.mode == 'P':
  280.         fp.write('Lut: 1\r\n')
  281.     
  282.     fp.write('\x00' * (511 - fp.tell()) + '\x1a')
  283.     if im.mode == 'P':
  284.         fp.write(im.im.getpalette('RGB', 'RGB;L'))
  285.     
  286.     ImageFile._save(im, fp, [
  287.         ('raw', (0, 0) + im.size, 0, (rawmode, 0, -1))])
  288.  
  289. Image.register_open('IM', ImImageFile)
  290. Image.register_save('IM', _save)
  291. Image.register_extension('IM', '.im')
  292.