| # | 
| # The Python Imaging Library. | 
| # $Id$ | 
| # | 
| # XV Thumbnail file handler by Charles E. "Gene" Cash | 
| # (gcash@magicnet.net) | 
| # | 
| # see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, | 
| # available from ftp://ftp.cis.upenn.edu/pub/xv/ | 
| # | 
| # history: | 
| # 98-08-15 cec  created (b/w only) | 
| # 98-12-09 cec  added color palette | 
| # 98-12-28 fl   added to PIL (with only a few very minor modifications) | 
| # | 
| # To do: | 
| # FIXME: make save work (this requires quantization support) | 
| # | 
|   | 
| __version__ = "0.1" | 
|   | 
| import string | 
| import Image, ImageFile, ImagePalette | 
|   | 
| # standard color palette for thumbnails (RGB332) | 
| PALETTE = "" | 
| for r in range(8): | 
|     for g in range(8): | 
|         for b in range(4): | 
|             PALETTE = PALETTE + (chr((r*255)/7)+chr((g*255)/7)+chr((b*255)/3)) | 
|   | 
| ## | 
| # Image plugin for XV thumbnail images. | 
|   | 
| class XVThumbImageFile(ImageFile.ImageFile): | 
|   | 
|     format = "XVThumb" | 
|     format_description = "XV thumbnail image" | 
|   | 
|     def _open(self): | 
|   | 
|         # check magic | 
|         s = self.fp.read(6) | 
|         if s != "P7 332": | 
|             raise SyntaxError, "not an XV thumbnail file" | 
|   | 
|         # Skip to beginning of next line | 
|         self.fp.readline() | 
|   | 
|         # skip info comments | 
|         while 1: | 
|             s = self.fp.readline() | 
|             if not s: | 
|                 raise SyntaxError, "Unexpected EOF reading XV thumbnail file" | 
|             if s[0] != '#': | 
|                 break | 
|   | 
|         # parse header line (already read) | 
|         s = string.split(s.strip()) | 
|   | 
|         self.mode = "P" | 
|         self.size = int(s[0]), int(s[1]) | 
|   | 
|         self.palette = ImagePalette.raw("RGB", PALETTE) | 
|   | 
|         self.tile = [ | 
|             ("raw", (0, 0)+self.size, | 
|              self.fp.tell(), (self.mode, 0, 1) | 
|              )] | 
|   | 
| # -------------------------------------------------------------------- | 
|   | 
| Image.register_open("XVThumb", XVThumbImageFile) |