from threading import Lock import Image, ImageEnhance, ImageOps # PIL from ztimer import ZTimer # provided import time class BasicAppCommand: def __init__(self,action,index): self.action = action self.index = index # index is which mdi window the action occurs in self.timerA = ZTimer() # how long between user input and command execution start self.timerB = ZTimer() # how long between command execution start and finish class BasicApp: def __init__(self): self.inputqueue = [] self.images = [] self.exiting = False self.qlock = Lock() # for threads def exit_threaded(self,i): print 'exiting...' self.exiting = True # for twisted def exit_twisted(self,i): print 'exiting..' from twisted.internet import reactor reactor.stop() def checkuserinput(self): if len(self.inputqueue)>0: self.handleuserinput(self.inputqueue.pop()) def adduserinput(self,command): command.timerA.start() self.inputqueue.insert(0,command) def checkuserinput_threaded(self): if len(self.inputqueue)>0: self.qlock.acquire() i = self.inputqueue.pop() self.qlock.release() self.handleuserinput(i) def adduserinput_threaded(self,command): command.timerA.start() self.qlock.acquire() self.inputqueue.insert(0,command) self.qlock.release() def handleuserinput(self,command): command.timerA.stop() command.timerB.start() getattr(self,command.action)(command.index) command.timerB.stop() # http://www.pythonware.com/library/pil/handbook/index.htm def load(self,i): print '%d: loading..' % (i), self.images.append(Image.open('image%d.jpg' % (i))) def save(self,i): print '%d: saving..' % (i), self.images[i].save('output/image%d-%f.jpg'%(i,time.time())) def heavy(self,i): print '%d: heavy..' % (i), for j in range(10): self.medium(i) def medium(self,i): #print '%d: medium..' % (i), image = self.images[i] image = ImageEnhance.Sharpness(image).enhance(2) image = ImageEnhance.Color(image).enhance(0.8) image = ImageEnhance.Brightness(image).enhance(0.8) image = ImageOps.autocontrast(image) image = ImageOps.equalize(image) self.images[i] = image def resize(self,i): print '%d: resize..' % (i), image = self.images[i] w,h = image.size image.resize((w/10,h/10),Image.ANTIALIAS) self.images[i] = image