diff options
Diffstat (limited to 'PIL/McIdasImagePlugin.py')
-rw-r--r-- | PIL/McIdasImagePlugin.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/PIL/McIdasImagePlugin.py b/PIL/McIdasImagePlugin.py new file mode 100644 index 0000000..b3b48ec --- /dev/null +++ b/PIL/McIdasImagePlugin.py @@ -0,0 +1,74 @@ +# +# The Python Imaging Library. +# $Id: McIdasImagePlugin.py 2134 2004-10-06 08:55:20Z fredrik $ +# +# Basic McIdas support for PIL +# +# History: +# 97-05-05 fl Created (8-bit images only) +# +# Thanks to Richard Jones <richard.jones@bom.gov.au> for specs +# and samples. +# +# 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 string + +import Image, ImageFile + +def i16(c,i=0): + return ord(c[1+i])+(ord(c[i])<<8) + +def i32(c,i=0): + return ord(c[3+i])+(ord(c[2+i])<<8)+(ord(c[1+i])<<16)+(ord(c[i])<<24) + +def _accept(s): + return i32(s) == 0 and i32(s, 4) == 4 + +## +# Image plugin for McIdas area images. + +class McIdasImageFile(ImageFile.ImageFile): + + format = "MCIDAS" + format_description = "McIdas area file" + + def _open(self): + + # parse area file directory + s = self.fp.read(256) + if not _accept(s): + raise SyntaxError, "not an McIdas area file" + + # get mode + if i32(s, 40) != 1 or i32(s, 52) != 1: + raise SyntaxError, "unsupported McIdas format" + + self.mode = "L" + + # get size + self.size = i32(s, 36), i32(s, 32) + + # setup image descriptor + prefix = i32(s, 56) + offset = i32(s, 132) + + self.tile = [("raw", (0, 0) + self.size, offset, + ("L", prefix + self.size[0], 1))] + + # FIXME: should store the navigation and calibration blocks + # somewhere (or perhaps extract some basic information from + # them...) + +# -------------------------------------------------------------------- +# registry + +Image.register_open("MCIDAS", McIdasImageFile, _accept) + +# no default extension |