mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 09:57:43 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
# 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)
 | 
						|
#
 | 
						|
 | 
						|
from . import Image, ImageFile, ImagePalette
 | 
						|
from ._binary import i8, o8
 | 
						|
 | 
						|
__version__ = "0.1"
 | 
						|
 | 
						|
_MAGIC = b"P7 332"
 | 
						|
 | 
						|
# standard color palette for thumbnails (RGB332)
 | 
						|
PALETTE = b""
 | 
						|
for r in range(8):
 | 
						|
    for g in range(8):
 | 
						|
        for b in range(4):
 | 
						|
            PALETTE = PALETTE + (o8((r*255)//7)+o8((g*255)//7)+o8((b*255)//3))
 | 
						|
 | 
						|
 | 
						|
def _accept(prefix):
 | 
						|
    return prefix[:6] == _MAGIC
 | 
						|
 | 
						|
 | 
						|
##
 | 
						|
# Image plugin for XV thumbnail images.
 | 
						|
 | 
						|
class XVThumbImageFile(ImageFile.ImageFile):
 | 
						|
 | 
						|
    format = "XVThumb"
 | 
						|
    format_description = "XV thumbnail image"
 | 
						|
 | 
						|
    def _open(self):
 | 
						|
 | 
						|
        # check magic
 | 
						|
        if not _accept(self.fp.read(6)):
 | 
						|
            raise SyntaxError("not an XV thumbnail file")
 | 
						|
 | 
						|
        # Skip to beginning of next line
 | 
						|
        self.fp.readline()
 | 
						|
 | 
						|
        # skip info comments
 | 
						|
        while True:
 | 
						|
            s = self.fp.readline()
 | 
						|
            if not s:
 | 
						|
                raise SyntaxError("Unexpected EOF reading XV thumbnail file")
 | 
						|
            if i8(s[0]) != 35:  # ie. when not a comment: '#'
 | 
						|
                break
 | 
						|
 | 
						|
        # parse header line (already read)
 | 
						|
        s = s.strip().split()
 | 
						|
 | 
						|
        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(XVThumbImageFile.format, XVThumbImageFile, _accept)
 |