⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg.py

📁 minimal python variant for small footprint apps like embedded apps
💻 PY
字号:
# Implement 'jpeg' interface using SGI's compression library# XXX Options 'smooth' and 'optimize' are ignored.# XXX It appears that compressing grayscale images doesn't work right;# XXX the resulting file causes weirdness.error = 'jpeg.error' # Exceptionoptions = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0}comp = Nonedecomp = Nonedef compress(imgdata, width, height, bytesperpixel):	global comp	import cl	if comp is None: comp = cl.OpenCompressor(cl.JPEG)	if bytesperpixel == 1:		format = cl.GRAYSCALE	elif bytesperpixel == 4:		format = cl.RGBX	if options['forcegray']:		iformat = cl.GRAYSCALE	else:		iformat = cl.YUV	# XXX How to support 'optimize'?	params = [cl.IMAGE_WIDTH, width, cl.IMAGE_HEIGHT, height,		  cl.ORIGINAL_FORMAT, format,		  cl.ORIENTATION, cl.BOTTOM_UP,		  cl.QUALITY_FACTOR, options['quality'],		  cl.INTERNAL_FORMAT, iformat,		 ]	comp.SetParams(params)	jpegdata = comp.Compress(1, imgdata)	return jpegdatadef decompress(jpegdata):	global decomp	import cl	if decomp is None: decomp = cl.OpenDecompressor(cl.JPEG)	headersize = decomp.ReadHeader(jpegdata)	params = [cl.IMAGE_WIDTH, 0, cl.IMAGE_HEIGHT, 0, cl.INTERNAL_FORMAT, 0]	decomp.GetParams(params)	width, height, format = params[1], params[3], params[5]	if format == cl.GRAYSCALE or options['forcegray']:		format = cl.GRAYSCALE		bytesperpixel = 1	else:		format = cl.RGBX		bytesperpixel = 4	# XXX How to support 'smooth'?	params = [cl.ORIGINAL_FORMAT, format,		  cl.ORIENTATION, cl.BOTTOM_UP,		  cl.FRAME_BUFFER_SIZE, width*height*bytesperpixel]	decomp.SetParams(params)	imgdata = decomp.Decompress(1, jpegdata)	return imgdata, width, height, bytesperpixeldef setoption(name, value):	if type(value) <> type(0):		raise TypeError, 'jpeg.setoption: numeric options only'	if name == 'forcegrey':		name = 'forcegray'	if not options.has_key(name):		raise KeyError, 'jpeg.setoption: unknown option name'	options[name] = int(value)def test():	import sys	if sys.argv[1:2] == ['-g']:		del sys.argv[1]		setoption('forcegray', 1)	if not sys.argv[1:]:		sys.argv.append('/usr/local/images/data/jpg/asterix.jpg')	for file in sys.argv[1:]:		show(file)def show(file):	import gl, GL, DEVICE	jpegdata = open(file, 'r').read()	imgdata, width, height, bytesperpixel = decompress(jpegdata)	gl.foreground()	gl.prefsize(width, height)	win = gl.winopen(file)	if bytesperpixel == 1:		gl.cmode()		gl.pixmode(GL.PM_SIZE, 8)		gl.gconfig()		for i in range(256):			gl.mapcolor(i, i, i, i)	else:		gl.RGBmode()		gl.pixmode(GL.PM_SIZE, 32)		gl.gconfig()	gl.qdevice(DEVICE.REDRAW)	gl.qdevice(DEVICE.ESCKEY)	gl.qdevice(DEVICE.WINQUIT)	gl.qdevice(DEVICE.WINSHUT)	gl.lrectwrite(0, 0, width-1, height-1, imgdata)	while 1:		dev, val = gl.qread()		if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):			break		if dev == DEVICE.REDRAW:			gl.lrectwrite(0, 0, width-1, height-1, imgdata)	gl.winclose(win)	# Now test the compression and write the result to a fixed filename	newjpegdata = compress(imgdata, width, height, bytesperpixel)	open('/tmp/j.jpg', 'w').write(newjpegdata)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -