home *** CD-ROM | disk | FTP | other *** search
- #
- # The Python Imaging Library.
- # $Id: DcxImagePlugin.py 2134 2004-10-06 08:55:20Z fredrik $
- #
- # DCX file handling
- #
- # DCX is a container file format defined by Intel, commonly used
- # for fax applications. Each DCX file consists of a directory
- # (a list of file offsets) followed by a set of (usually 1-bit)
- # PCX files.
- #
- # History:
- # 1995-09-09 fl Created
- # 1996-03-20 fl Properly derived from PcxImageFile.
- # 1998-07-15 fl Renamed offset attribute to avoid name clash
- # 2002-07-30 fl Fixed file handling
- #
- # Copyright (c) 1997-98 by Secret Labs AB.
- # Copyright (c) 1995-96 by Fredrik Lundh.
- #
- # See the README file for information on usage and redistribution.
- #
-
- __version__ = "0.2"
-
- import Image, ImageFile
-
- from PcxImagePlugin import PcxImageFile
-
- MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then?
-
- def i32(c):
- return ord(c[0]) + (ord(c[1])<<8) + (ord(c[2])<<16) + (ord(c[3])<<24)
-
- def _accept(prefix):
- return i32(prefix) == MAGIC
-
- ##
- # Image plugin for the Intel DCX format.
-
- class DcxImageFile(PcxImageFile):
-
- format = "DCX"
- format_description = "Intel DCX"
-
- def _open(self):
-
- # Header
- s = self.fp.read(4)
- if i32(s) != MAGIC:
- raise SyntaxError, "not a DCX file"
-
- # Component directory
- self._offset = []
- for i in range(1024):
- offset = i32(self.fp.read(4))
- if not offset:
- break
- self._offset.append(offset)
-
- self.__fp = self.fp
- self.seek(0)
-
- def seek(self, frame):
- if frame >= len(self._offset):
- raise EOFError("attempt to seek outside DCX directory")
- self.frame = frame
- self.fp = self.__fp
- self.fp.seek(self._offset[frame])
- PcxImageFile._open(self)
-
- def tell(self):
- return self.frame
-
-
- Image.register_open("DCX", DcxImageFile, _accept)
-
- Image.register_extension("DCX", ".dcx")
-