#! /usr/local/bin/python import cgi,os,sys,stat,time import fcgi import Image,TiffImagePlugin from cStringIO import StringIO def getexif(im): if im.info.has_key('exif'): exif_data=im.app['APP1'][6:] exif_f = StringIO() exif_f.write(exif_data) exif_f.seek(0) return exif_f def getthumb(fp): im=Image.open(fp) exif_f = getexif(im) exif_data = exif_f.getvalue() tag = TiffImagePlugin.ImageFileDirectory(exif_data[:2]) first = tag.i32(exif_data,4) while first != 0: tag.reset() exif_f.seek(first) tag.load(exif_f) # JPEG format thumbs if tag.has_key(0x103) and tag[0x103][0] == 6 and \ tag.has_key(513) and tag.has_key(514): # Got JPEG siz = tag[514][0] print 'Content-Type: image/jpeg' print 'Content-Size:',siz print 'Date:', \ time.strftime('%a, %d %b %Y %H:%M:%S GMT',time.gmtime(time.time())) mtim = os.stat(fp)[stat.ST_MTIME] print 'Last-Modified:', \ time.strftime('%a, %d %b %Y %H:%M:%S GMT',time.gmtime(mtim)) print sys.stdout.flush() exif_f.seek(tag[513][0]) sys.stdout.write(exif_f.read(siz)) return first = tag.next return None def getthumbsiz(fp): im=Image.open(fp) exif_f = getexif(im) exif_data = exif_f.getvalue() tag = TiffImagePlugin.ImageFileDirectory(exif_data[:2]) first = tag.i32(exif_data,4) while first != 0: tag.reset() exif_f.seek(first) tag.load(exif_f) # JPEG format thumbs if tag.has_key(0x103) and tag[0x103][0] == 6 and \ tag.has_key(513) and tag.has_key(514): # Got JPEG siz = tag[514][0] exif_f.seek(tag[513][0]) jf = StringIO(exif_f.read(siz)) jim = Image.open(jf) return jim.size first = tag.next return None print 'Content-type: text/plain' print print 'Sorry no thumbnail' def maini(env=None): if not env: env = os.environ if env.has_key('PATH_INFO'): getthumb(env['PATH_INFO'][1:]) else: print 'Content-Type: text/html' print print '