Mercurial > ec-dotfiles
diff bin/recompress @ 113:9b91e702c19c
Latestest merge.
author | Edho Prima Arief <edho@myconan.net> |
---|---|
date | Wed, 19 Oct 2011 06:51:43 +0000 |
parents | 97e24e89388f |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/recompress Wed Oct 19 06:51:43 2011 +0000 @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +import sys, os +from PIL import Image + + +# Raises a generic exception (exception.Exception) if input is not a PNG file. +def repng(filename): + im = Image.open(filename) + if im.format == "PNG": + im.save(filename, "PNG", optimize=1) + else: + raise Exception("Not a PNG image file") + +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]) + +def sane_fn(filename): + import re + return re.sub(r"[\x00-\x1F\x7F\n\r]", "?", filename) + +def main(files): + for filename in files: + print "Recompressing %s:" % sane_fn(filename), + sys.stdout.flush() + try: + byte_orig = os.path.getsize(filename) + repng(filename) + 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)), + re = 0 + except: + print "Failed", + print "(%s: %s)" % (sys.exc_type, sys.exc_value), + re = 1 + finally: + print "[%s]" % re + +if __name__ == "__main__": + main(sys.argv[1:])