# HG changeset patch # User Paul Boddie # Date 1443659053 -7200 # Node ID d33be469e542d053c25ae5ef48b4bd9131782e01 # Parent ac7b9012ab35f99a49021b01d5a35907a8a8e013 Fixed saturation and added desaturation support. diff -r ac7b9012ab35 -r d33be469e542 optimiser.py --- a/optimiser.py Thu Oct 01 02:13:26 2015 +0200 +++ b/optimiser.py Thu Oct 01 02:24:13 2015 +0200 @@ -68,11 +68,11 @@ def sign(x): return x >= 0 and 1 or -1 -def saturate(rgb): - return tuple(map(saturate_value, rgb)) +def saturate_rgb(rgb, exp): + return tuple([saturate_value(x, exp) for x in rgb]) -def saturate_value(x): - return 127.5 + sign(x - 127.5) * 127.5 * math.sqrt(abs(x - 127.5) / 127.5) +def saturate_value(x, exp): + return 127.5 + sign(x - 127.5) * 127.5 * pow(abs(x - 127.5) / 127.5, exp) def test(): size = 512 @@ -118,6 +118,7 @@ input_filename, output_filename = sys.argv[1:3] rotate = "-r" in sys.argv[3:] saturate = "-s" in sys.argv[3:] + desaturate = "-d" in sys.argv[3:] x = EXIF.process_file(open(input_filename)) im = PIL.Image.open(input_filename) @@ -131,8 +132,8 @@ c = {} for x in range(0, width): rgb = im.getpixel((x, y)) - if saturate: - rgb = saturate(rgb) + if saturate or desaturate: + rgb = saturate_rgb(rgb, saturate and 0.5 or 2) value = get_value((x, y), rgb, width, height) im.putpixel((x, y), value) if not c.has_key(value):