Hello Lukas,

could be that you found a memleak somewhere in PIL.

Maybe try to add some /del() /to force cleanup of the images - i'm not that sure at the moment but i remember i somewhen have read something somewhere about the need to use del(image) to force a correct cleanup in a special case. In case you're curious if i'm right try this version which cleans used stuff explicitly via del().

also while looking at it i'm not that sure why you don't check the extension by checking against /a[-4:] == ".png" /which i feel like a bit more readable compared to your if condition. Do you want to stop your code from processing files with a "." in the name (like 'mypic 02.05.2007.png') ?

Gregor

def start_image_crush(bla, path, files):
   os.chdir(path)
   print '\nACTUAL DIRECTORY: ' + path + '\n'
   for a in files:
       # directory and file filter
       if string.find(a,'.') > 0 and string.split(a,'.')[1]=='png' and 
len(string.split(a,'.'))==2:
           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)
                   del(nal)
               im.save(string.split(a,'.')[0]+'.png',optimize=1, 
transparency=255)
else: print 'Image still converted. No processing !!!'
           del(im)


Lukas Orsin schrieb:
Thanks for answers.
I am sure no image is broken. If I run my program once again, previously stopped image is processed with no error and no exception. I tested conversion a few times with many little images on two mashines (both 32bit Win 2003 server) and it crashed after allocation 50 - 60 MB of memory. A preliminary test on 64bit Win 2008 server ended well with 200,000 converted images at memory allocation 250 MB in the end.
We think problem takes about memory allocation at mass conversion.

My script is attached.
(usage: python to8bit_folders_upgrade.py c:\temp\images)



------------------------------------------------------------------------

_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig
begin:vcard
fn:Gregor Kopka
n:Kopka;Gregor
org:Kopka.Net;Internet Services
adr:;;Grosse Strasse 10;Ahrensburg;;22926;Deutschland
email;internet:gre...@kopka.net
title:Inhaber
tel;work:+49 4102 823212
tel;fax:+49 4102 823213
tel;cell:+49 174 2550492
x-mozilla-html:FALSE
url:http://kopka.net
version:2.1
end:vcard

_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to