# 
 | 
# The Python Imaging Library. 
 | 
# $Id$ 
 | 
# 
 | 
# IM Tools support for PIL 
 | 
# 
 | 
# history: 
 | 
# 1996-05-27 fl   Created (read 8-bit images only) 
 | 
# 2001-02-17 fl   Use 're' instead of 'regex' (Python 2.1) (0.2) 
 | 
# 
 | 
# Copyright (c) Secret Labs AB 1997-2001. 
 | 
# Copyright (c) Fredrik Lundh 1996-2001. 
 | 
# 
 | 
# See the README file for information on usage and redistribution. 
 | 
# 
 | 
  
 | 
  
 | 
__version__ = "0.2" 
 | 
  
 | 
import re 
 | 
  
 | 
import Image, ImageFile 
 | 
  
 | 
# 
 | 
# -------------------------------------------------------------------- 
 | 
  
 | 
field = re.compile(r"([a-z]*) ([^ \r\n]*)") 
 | 
  
 | 
## 
 | 
# Image plugin for IM Tools images. 
 | 
  
 | 
class ImtImageFile(ImageFile.ImageFile): 
 | 
  
 | 
    format = "IMT" 
 | 
    format_description = "IM Tools" 
 | 
  
 | 
    def _open(self): 
 | 
  
 | 
        # Quick rejection: if there's not a LF among the first 
 | 
        # 100 bytes, this is (probably) not a text header. 
 | 
  
 | 
        if not "\n" in self.fp.read(100): 
 | 
            raise SyntaxError, "not an IM file" 
 | 
        self.fp.seek(0) 
 | 
  
 | 
        xsize = ysize = 0 
 | 
  
 | 
        while 1: 
 | 
  
 | 
            s = self.fp.read(1) 
 | 
            if not s: 
 | 
                break 
 | 
  
 | 
            if s == chr(12): 
 | 
  
 | 
                # image data begins 
 | 
                self.tile = [("raw", (0,0)+self.size, 
 | 
                             self.fp.tell(), 
 | 
                             (self.mode, 0, 1))] 
 | 
  
 | 
                break 
 | 
  
 | 
            else: 
 | 
  
 | 
                # read key/value pair 
 | 
                # FIXME: dangerous, may read whole file 
 | 
                s = s + self.fp.readline() 
 | 
                if len(s) == 1 or len(s) > 100: 
 | 
                    break 
 | 
                if s[0] == "*": 
 | 
                    continue # comment 
 | 
  
 | 
                m = field.match(s) 
 | 
                if not m: 
 | 
                    break 
 | 
                k, v = m.group(1,2) 
 | 
                if k == "width": 
 | 
                    xsize = int(v) 
 | 
                    self.size = xsize, ysize 
 | 
                elif k == "height": 
 | 
                    ysize = int(v) 
 | 
                    self.size = xsize, ysize 
 | 
                elif k == "pixel" and v == "n8": 
 | 
                    self.mode = "L" 
 | 
  
 | 
  
 | 
# 
 | 
# -------------------------------------------------------------------- 
 | 
  
 | 
Image.register_open("IMT", ImtImageFile) 
 | 
  
 | 
# 
 | 
# no extension registered (".im" is simply too common) 
 |