symbian-qemu-0.9.1-12/python-2.6.1/Lib/plat-irix5/jpeg.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 # Implement 'jpeg' interface using SGI's compression library
       
     2 
       
     3 # XXX Options 'smooth' and 'optimize' are ignored.
       
     4 
       
     5 # XXX It appears that compressing grayscale images doesn't work right;
       
     6 # XXX the resulting file causes weirdness.
       
     7 from warnings import warnpy3k
       
     8 warnpy3k("the jpeg module has been removed in Python 3.0", stacklevel=2)
       
     9 del warnpy3k
       
    10 
       
    11 class error(Exception):
       
    12     pass
       
    13 
       
    14 options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0}
       
    15 
       
    16 comp = None
       
    17 decomp = None
       
    18 
       
    19 def compress(imgdata, width, height, bytesperpixel):
       
    20     global comp
       
    21     import cl
       
    22     if comp is None: comp = cl.OpenCompressor(cl.JPEG)
       
    23     if bytesperpixel == 1:
       
    24         format = cl.GRAYSCALE
       
    25     elif bytesperpixel == 4:
       
    26         format = cl.RGBX
       
    27     if options['forcegray']:
       
    28         iformat = cl.GRAYSCALE
       
    29     else:
       
    30         iformat = cl.YUV
       
    31     # XXX How to support 'optimize'?
       
    32     params = [cl.IMAGE_WIDTH, width, cl.IMAGE_HEIGHT, height, \
       
    33               cl.ORIGINAL_FORMAT, format, \
       
    34               cl.ORIENTATION, cl.BOTTOM_UP, \
       
    35               cl.QUALITY_FACTOR, options['quality'], \
       
    36               cl.INTERNAL_FORMAT, iformat, \
       
    37              ]
       
    38     comp.SetParams(params)
       
    39     jpegdata = comp.Compress(1, imgdata)
       
    40     return jpegdata
       
    41 
       
    42 def decompress(jpegdata):
       
    43     global decomp
       
    44     import cl
       
    45     if decomp is None: decomp = cl.OpenDecompressor(cl.JPEG)
       
    46     headersize = decomp.ReadHeader(jpegdata)
       
    47     params = [cl.IMAGE_WIDTH, 0, cl.IMAGE_HEIGHT, 0, cl.INTERNAL_FORMAT, 0]
       
    48     decomp.GetParams(params)
       
    49     width, height, format = params[1], params[3], params[5]
       
    50     if format == cl.GRAYSCALE or options['forcegray']:
       
    51         format = cl.GRAYSCALE
       
    52         bytesperpixel = 1
       
    53     else:
       
    54         format = cl.RGBX
       
    55         bytesperpixel = 4
       
    56     # XXX How to support 'smooth'?
       
    57     params = [cl.ORIGINAL_FORMAT, format, \
       
    58               cl.ORIENTATION, cl.BOTTOM_UP, \
       
    59               cl.FRAME_BUFFER_SIZE, width*height*bytesperpixel]
       
    60     decomp.SetParams(params)
       
    61     imgdata = decomp.Decompress(1, jpegdata)
       
    62     return imgdata, width, height, bytesperpixel
       
    63 
       
    64 def setoption(name, value):
       
    65     if type(value) is not type(0):
       
    66         raise TypeError, 'jpeg.setoption: numeric options only'
       
    67     if name == 'forcegrey':
       
    68         name = 'forcegray'
       
    69     if not options.has_key(name):
       
    70         raise KeyError, 'jpeg.setoption: unknown option name'
       
    71     options[name] = int(value)
       
    72 
       
    73 def test():
       
    74     import sys
       
    75     if sys.argv[1:2] == ['-g']:
       
    76         del sys.argv[1]
       
    77         setoption('forcegray', 1)
       
    78     if not sys.argv[1:]:
       
    79         sys.argv.append('/usr/local/images/data/jpg/asterix.jpg')
       
    80     for file in sys.argv[1:]:
       
    81         show(file)
       
    82 
       
    83 def show(file):
       
    84     import gl, GL, DEVICE
       
    85     jpegdata = open(file, 'r').read()
       
    86     imgdata, width, height, bytesperpixel = decompress(jpegdata)
       
    87     gl.foreground()
       
    88     gl.prefsize(width, height)
       
    89     win = gl.winopen(file)
       
    90     if bytesperpixel == 1:
       
    91         gl.cmode()
       
    92         gl.pixmode(GL.PM_SIZE, 8)
       
    93         gl.gconfig()
       
    94         for i in range(256):
       
    95             gl.mapcolor(i, i, i, i)
       
    96     else:
       
    97         gl.RGBmode()
       
    98         gl.pixmode(GL.PM_SIZE, 32)
       
    99         gl.gconfig()
       
   100     gl.qdevice(DEVICE.REDRAW)
       
   101     gl.qdevice(DEVICE.ESCKEY)
       
   102     gl.qdevice(DEVICE.WINQUIT)
       
   103     gl.qdevice(DEVICE.WINSHUT)
       
   104     gl.lrectwrite(0, 0, width-1, height-1, imgdata)
       
   105     while 1:
       
   106         dev, val = gl.qread()
       
   107         if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):
       
   108             break
       
   109         if dev == DEVICE.REDRAW:
       
   110             gl.lrectwrite(0, 0, width-1, height-1, imgdata)
       
   111     gl.winclose(win)
       
   112     # Now test the compression and write the result to a fixed filename
       
   113     newjpegdata = compress(imgdata, width, height, bytesperpixel)
       
   114     open('/tmp/j.jpg', 'w').write(newjpegdata)