Mercurial > ec-dotfiles
view bin/recompress @ 92:03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
author | Edho Prima Arief <edho@myconan.net> |
---|---|
date | Thu, 14 Jul 2011 00:34:46 +0700 |
parents | |
children | 4f954c1e2fdc |
line wrap: on
line source
#!/usr/bin/env python import sys, os from PIL import Image # return codes: # 0 = ok # 1 = error opening file (not an image, not a file, unreadable or whatever) # 2 = error saving file (no write permission) # 3 = not a png file def repng(filename): retcode = 0 try: im = Image.open(filename) if im.format == "PNG": try: im.save(filename, optimize=1) except: retcode = 3 else: retcode = 2 except: retcode = 1 return retcode def hbytes(inbyte): units = ["B", "kB", "MB", "GB", "TB", "PB"] outbyte = float(inbyte) current_unit = 0 while outbyte > 1000: outbyte /= 1000 current_unit += 1 return "%.2f %s" % (outbyte, units[current_unit]) if __name__ == "__main__": for filename in sys.argv[1:]: print "Recompressing %s:" % filename, sys.stdout.flush() try: byte_orig = os.path.getsize(filename) re = repng(filename) if re == 0: byte_new = os.path.getsize(filename) print "OK (%s => %s, %.2f%% saving)" % (hbytes(byte_orig), hbytes(byte_new), (byte_orig - byte_new)*100/float(byte_orig)), elif re == 1: print "Not an image or corrupt file", elif re == 2: print "No write permission", elif re == 3: print "Not a PNG file", except: print "(%s: %s)" % (sys.exc_type, sys.exc_value) print "Not a file or no read permission", re = 1 print "[%s]" % re