#!/usr/bin/python
# Color-fade a batch of images
import Image,os,sys,progressbar,math
data_directory=sys.argv[1]
default_widgets=[progressbar.Percentage(), ' ', progressbar.Bar(), progressbar.ETA()]
steps=5

def fade(f1,f2,n):
 print f1,f2
 i1,i2=Image.open(data_directory+f1),Image.open(data_directory+f2)
 assert i1.size==i2.size
 i3=Image.new('RGBA',i1.size)
 p1, p2, p3 = i1.load(), i2.load(), i3.load()
 area=reduce(lambda x,y : x*y,i1.size)
 for step in range(steps):
  fnum=n*steps+step
  ofn='pxfade%04d.jpg' % fnum
  if os.path.isfile(ofn): continue
  pbar = progressbar.ProgressBar(widgets=['Frame %04d: ' % fnum] + default_widgets).start()
  for x in range(i1.size[0]):
   for y in range(i1.size[1]):
    pxfade=lambda (px1,px2) : int(px1+float(px2-px1)*math.sin((float(step)/float(steps))*(math.pi/2)))
    p3[x,y]=tuple(map(pxfade,zip(p1[x,y],p2[x,y])))
    pbar.update(float(i1.size[1]*x+y)/float(area)*100)
  i3.save(ofn)
  pbar.finish()

file_list=os.listdir(data_directory)
jpg_list=filter(lambda x : '.jpg' == x.lower()[-4:],file_list)
jpg_list.sort()
for n,(f1,f2) in enumerate(zip(jpg_list,jpg_list[1:])): fade( f1,f2, n )