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 / PcdImagePlugin.py < prev    next >
Text File  |  2001-05-03  |  2KB  |  73 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id$
  4. #
  5. # PCD file handling
  6. #
  7. # History:
  8. #       96-05-10 fl     Created
  9. #       96-05-27 fl     Added draft mode (128x192, 256x384)
  10. #
  11. # Copyright (c) Secret Labs AB 1997.
  12. # Copyright (c) Fredrik Lundh 1996.
  13. #
  14. # See the README file for information on usage and redistribution.
  15. #
  16.  
  17.  
  18. __version__ = "0.1"
  19.  
  20.  
  21. import Image, ImageFile
  22.  
  23.  
  24. class PcdImageFile(ImageFile.ImageFile):
  25.  
  26.     format = "PCD"
  27.     format_description = "Kodak PhotoCD"
  28.  
  29.     def _open(self):
  30.  
  31.         # rough
  32.         self.fp.seek(2048)
  33.         s = self.fp.read(2048)
  34.  
  35.         if s[:4] != "PCD_":
  36.             raise SyntaxError, "not a PCD file"
  37.  
  38.         orientation = ord(s[1538]) & 3
  39.         if orientation == 1:
  40.             self.tile_post_rotate = 90 # hack
  41.         elif orientation == 3:
  42.             self.tile_post_rotate = -90
  43.  
  44.         self.mode = "RGB"
  45.         self.size = 768, 512 # FIXME: not correct for rotated images!
  46.         self.tile = [("pcd", (0,0)+self.size, 96*2048, None)]
  47.  
  48.     def draft(self, mode, size):
  49.  
  50.         if len(self.tile) != 1:
  51.             return
  52.  
  53.         d, e, o, a = self.tile[0]
  54.  
  55.         if size:
  56.             scale = max(self.size[0] / size[0], self.size[1] / size[1])
  57.             for s, o in [(4,0*2048), (2,0*2048), (1,96*2048)]:
  58.                 if scale >= s:
  59.                     break
  60.             # e = e[0], e[1], (e[2]-e[0]+s-1)/s+e[0], (e[3]-e[1]+s-1)/s+e[1]
  61.             # self.size = ((self.size[0]+s-1)/s, (self.size[1]+s-1)/s)
  62.  
  63.         self.tile = [(d, e, o, a)]
  64.  
  65.         return self
  66.  
  67. #
  68. # registry
  69.  
  70. Image.register_open("PCD", PcdImageFile)
  71.  
  72. Image.register_extension("PCD", ".pcd")
  73.