## 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.#from__future__importannotationsimportrefrom.importImage,ImageFile## --------------------------------------------------------------------field=re.compile(rb"([a-z]*) ([^ \r\n]*)")### Image plugin for IM Tools images.
[docs]classImtImageFile(ImageFile.ImageFile):format="IMT"format_description="IM Tools"def_open(self)->None:# Quick rejection: if there's not a LF among the first# 100 bytes, this is (probably) not a text header.assertself.fpisnotNonebuffer=self.fp.read(100)ifb"\n"notinbuffer:msg="not an IM file"raiseSyntaxError(msg)xsize=ysize=0whileTrue:ifbuffer:s=buffer[:1]buffer=buffer[1:]else:s=self.fp.read(1)ifnots:breakifs==b"\x0C":# image data beginsself.tile=[ImageFile._Tile("raw",(0,0)+self.size,self.fp.tell()-len(buffer),self.mode,)]breakelse:# read key/value pairifb"\n"notinbuffer:buffer+=self.fp.read(100)lines=buffer.split(b"\n")s+=lines.pop(0)buffer=b"\n".join(lines)iflen(s)==1orlen(s)>100:breakifs[0]==ord(b"*"):continue# commentm=field.match(s)ifnotm:breakk,v=m.group(1,2)ifk==b"width":xsize=int(v)self._size=xsize,ysizeelifk==b"height":ysize=int(v)self._size=xsize,ysizeelifk==b"pixel"andv==b"n8":self._mode="L"
## --------------------------------------------------------------------Image.register_open(ImtImageFile.format,ImtImageFile)## no extension registered (".im" is simply too common)