# 
 | 
# The Python Imaging Library. 
 | 
# $Id$ 
 | 
# 
 | 
# Microsoft Image Composer support for PIL 
 | 
# 
 | 
# Notes: 
 | 
#       uses TiffImagePlugin.py to read the actual image streams 
 | 
# 
 | 
# History: 
 | 
#       97-01-20 fl     Created 
 | 
# 
 | 
# Copyright (c) Secret Labs AB 1997. 
 | 
# Copyright (c) Fredrik Lundh 1997. 
 | 
# 
 | 
# See the README file for information on usage and redistribution. 
 | 
# 
 | 
  
 | 
  
 | 
__version__ = "0.1" 
 | 
  
 | 
  
 | 
import Image, TiffImagePlugin 
 | 
from OleFileIO import * 
 | 
  
 | 
  
 | 
# 
 | 
# -------------------------------------------------------------------- 
 | 
  
 | 
  
 | 
def _accept(prefix): 
 | 
    return prefix[:8] == MAGIC 
 | 
  
 | 
## 
 | 
# Image plugin for Microsoft's Image Composer file format. 
 | 
  
 | 
class MicImageFile(TiffImagePlugin.TiffImageFile): 
 | 
  
 | 
    format = "MIC" 
 | 
    format_description = "Microsoft Image Composer" 
 | 
  
 | 
    def _open(self): 
 | 
  
 | 
        # read the OLE directory and see if this is a likely 
 | 
        # to be a Microsoft Image Composer file 
 | 
  
 | 
        try: 
 | 
            self.ole = OleFileIO(self.fp) 
 | 
        except IOError: 
 | 
            raise SyntaxError, "not an MIC file; invalid OLE file" 
 | 
  
 | 
        # find ACI subfiles with Image members (maybe not the 
 | 
        # best way to identify MIC files, but what the... ;-) 
 | 
  
 | 
        self.images = [] 
 | 
        for file in self.ole.listdir(): 
 | 
            if file[1:] and file[0][-4:] == ".ACI" and file[1] == "Image": 
 | 
                self.images.append(file) 
 | 
  
 | 
        # if we didn't find any images, this is probably not 
 | 
        # an MIC file. 
 | 
        if not self.images: 
 | 
            raise SyntaxError, "not an MIC file; no image entries" 
 | 
  
 | 
        self.__fp = self.fp 
 | 
        self.frame = 0 
 | 
  
 | 
        if len(self.images) > 1: 
 | 
            self.category = Image.CONTAINER 
 | 
  
 | 
        self.seek(0) 
 | 
  
 | 
    def seek(self, frame): 
 | 
  
 | 
        try: 
 | 
            filename = self.images[frame] 
 | 
        except IndexError: 
 | 
            raise EOFError, "no such frame" 
 | 
  
 | 
        self.fp = self.ole.openstream(filename) 
 | 
  
 | 
        TiffImagePlugin.TiffImageFile._open(self) 
 | 
  
 | 
        self.frame = frame 
 | 
  
 | 
    def tell(self): 
 | 
  
 | 
        return self.frame 
 | 
  
 | 
# 
 | 
# -------------------------------------------------------------------- 
 | 
  
 | 
Image.register_open("MIC", MicImageFile, _accept) 
 | 
  
 | 
Image.register_extension("MIC", ".mic") 
 |