comparison bin/recompress @ 94:9790bc126ea6

Epic simplified error handling in true try/except/finally spirit.
author Edho Prima Arief <edho@myconan.net>
date Thu, 14 Jul 2011 00:49:33 +0700
parents 4f954c1e2fdc
children a5324d2cc0eb
comparison
equal deleted inserted replaced
93:4f954c1e2fdc 94:9790bc126ea6
8 # 0 = ok 8 # 0 = ok
9 # 1 = error opening file (not an image, not a file, unreadable or whatever) 9 # 1 = error opening file (not an image, not a file, unreadable or whatever)
10 # 2 = error saving file (no write permission) 10 # 2 = error saving file (no write permission)
11 # 3 = not a png file 11 # 3 = not a png file
12 def repng(filename): 12 def repng(filename):
13 retcode = 0
14 im = Image.open(filename) 13 im = Image.open(filename)
15 if im.format == "PNG": 14 if im.format == "PNG":
16 im.save(filename, optimize=1) 15 im.save(filename, "PNG", optimize=1)
17 else: 16 else:
18 retcode = 1 17 raise Exception("Not a PNG image file")
19 return retcode
20 18
21 def hbytes(inbyte): 19 def hbytes(inbyte):
22 units = ["B", "kB", "MB", "GB", "TB", "PB"] 20 units = ["B", "kB", "MB", "GB", "TB", "PB"]
23 outbyte = float(inbyte) 21 outbyte = float(inbyte)
24 current_unit = 0 22 current_unit = 0
31 for filename in sys.argv[1:]: 29 for filename in sys.argv[1:]:
32 print "Recompressing %s:" % filename, 30 print "Recompressing %s:" % filename,
33 sys.stdout.flush() 31 sys.stdout.flush()
34 try: 32 try:
35 byte_orig = os.path.getsize(filename) 33 byte_orig = os.path.getsize(filename)
36 re = repng(filename) 34 repng(filename)
37 if re == 0: 35 byte_new = os.path.getsize(filename)
38 byte_new = os.path.getsize(filename) 36 print "OK (%s => %s, %.2f%% saving)" % (hbytes(byte_orig), hbytes(byte_new), (byte_orig - byte_new)*100/float(byte_orig)),
39 print "OK (%s => %s, %.2f%% saving)" % (hbytes(byte_orig), hbytes(byte_new), (byte_orig - byte_new)*100/float(byte_orig)), 37 re = 0
40 elif re == 1:
41 print "Not a PNG image file",
42 except: 38 except:
43 print "Failed", 39 print "Failed",
44 print "(%s: %s)" % (sys.exc_type, sys.exc_value), 40 print "(%s: %s)" % (sys.exc_type, sys.exc_value),
45 re = 1 41 re = 1
46 print "[%s]" % re 42 finally:
43 print "[%s]" % re
47 44