import Image
import random
from optparse import OptionParser
import string, os
import pywin

def quantize_and_invert(alpha):
    if alpha <= 64: # You may change the threshold value into something other.
        return 255
    return 0

def memusage():
    current_process = win32process.GetCurrentProcess()
    memory_info = win32process.GetProcessMemoryInfo(current_process)
    return memory_info["WorkingSetSize"]

def start_image_crush(arg, path, files):
    os.chdir(path)
    print '\nACTUAL DIRECTORY: ' + path + '\n'
    for a in files:
        # directory and file filter
        if a[-4:] == '.png':
            print 'Trying '+ a
            im = Image.open(a)
            if im.mode!='P':
                print '.....processing'
                if im.mode=='RGBA':
                    print "Warning, converting alpha transparency to 1-bit transparency"
                    al = im.split()[3]
                    nal = Image.eval(al, quantize_and_invert)
                    del(al)
                    colors=255
                else:
                    nal = None
                    colors=256
                if im.mode!='RGB':
                    nim = im.convert('RGB')
                else:
                    nim = im
                del(im)
                try:
                    im=nim.convert('P', palette=Image.ADAPTIVE, colors=colors)
                except ValueError, e:
                    print 'Python memusage: ' + str( memusage() ) + ' !!!'
                    raise e
                del(nim)

                if nal:
                    im.paste(255,None,nal)
                    im.save(string.split(a,'.')[0]+'.png',optimize=1, transparency=255)
                    del(nal)
                else:
                    im.save(string.split(a,'.')[0]+'.png',optimize=1)

            else:
                print 'Image still converted. No processing !!!'
            del(im)
           
parser = OptionParser()
(options, args) = parser.parse_args()

start_path=string.replace(args[0],'\\','\\\\')
os.path.walk(start_path,start_image_crush, None)
print 'FINISH'