| # | 
| # The Python Imaging Library. | 
| # $Id$ | 
| # | 
| # GD file handling | 
| # | 
| # History: | 
| # 1996-04-12 fl   Created | 
| # | 
| # Copyright (c) 1997 by Secret Labs AB. | 
| # Copyright (c) 1996 by Fredrik Lundh. | 
| # | 
| # See the README file for information on usage and redistribution. | 
| # | 
|   | 
|   | 
| # NOTE: This format cannot be automatically recognized, so the | 
| # class is not registered for use with Image.open().  To open a | 
| # gd file, use the GdImageFile.open() function instead. | 
|   | 
| # THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE.  This | 
| # implementation is provided for convenience and demonstrational | 
| # purposes only. | 
|   | 
|   | 
| __version__ = "0.1" | 
|   | 
| import ImageFile, ImagePalette | 
|   | 
| def i16(c): | 
|     return ord(c[1]) + (ord(c[0])<<8) | 
|   | 
| ## | 
| # Image plugin for the GD uncompressed format.  Note that this format | 
| # is not supported by the standard <b>Image.open</b> function.  To use | 
| # this plugin, you have to import the <b>GdImageFile</b> module and | 
| # use the <b>GdImageFile.open</b> function. | 
|   | 
| class GdImageFile(ImageFile.ImageFile): | 
|   | 
|     format = "GD" | 
|     format_description = "GD uncompressed images" | 
|   | 
|     def _open(self): | 
|   | 
|         # Header | 
|         s = self.fp.read(775) | 
|   | 
|         self.mode = "L" # FIXME: "P" | 
|         self.size = i16(s[0:2]), i16(s[2:4]) | 
|   | 
|         # transparency index | 
|         tindex = i16(s[5:7]) | 
|         if tindex < 256: | 
|             self.info["transparent"] = tindex | 
|   | 
|         self.palette = ImagePalette.raw("RGB", s[7:]) | 
|   | 
|         self.tile = [("raw", (0,0)+self.size, 775, ("L", 0, -1))] | 
|   | 
| ## | 
| # Load texture from a GD image file. | 
| # | 
| # @param filename GD file name, or an opened file handle. | 
| # @param mode Optional mode.  In this version, if the mode argument | 
| #     is given, it must be "r". | 
| # @return An image instance. | 
| # @exception IOError If the image could not be read. | 
|   | 
| def open(fp, mode = "r"): | 
|   | 
|     if mode != "r": | 
|         raise ValueError("bad mode") | 
|   | 
|     if type(fp) == type(""): | 
|         import __builtin__ | 
|         filename = fp | 
|         fp = __builtin__.open(fp, "rb") | 
|     else: | 
|         filename = "" | 
|   | 
|     try: | 
|         return GdImageFile(fp, filename) | 
|     except SyntaxError: | 
|         raise IOError("cannot identify this image file") |