# HG changeset patch # User Paul Boddie # Date 1443658406 -7200 # Node ID ac7b9012ab35f99a49021b01d5a35907a8a8e013 # Parent 99d5a002b1ce54b1e6ea56cc611437bce52b7bf6 Added image saturation support. diff -r 99d5a002b1ce -r ac7b9012ab35 optimiser.py --- a/optimiser.py Wed Sep 30 18:19:47 2015 +0200 +++ b/optimiser.py Thu Oct 01 02:13:26 2015 +0200 @@ -65,6 +65,15 @@ def get_best(rgb, values): return nearest(rgb, values)[0][1] +def sign(x): + return x >= 0 and 1 or -1 + +def saturate(rgb): + return tuple(map(saturate_value, rgb)) + +def saturate_value(x): + return 127.5 + sign(x - 127.5) * 127.5 * math.sqrt(abs(x - 127.5) / 127.5) + def test(): size = 512 for r in (0, 63, 127, 191, 255): @@ -108,6 +117,7 @@ input_filename, output_filename = sys.argv[1:3] rotate = "-r" in sys.argv[3:] + saturate = "-s" in sys.argv[3:] x = EXIF.process_file(open(input_filename)) im = PIL.Image.open(input_filename) @@ -121,6 +131,8 @@ c = {} for x in range(0, width): rgb = im.getpixel((x, y)) + if saturate: + rgb = saturate(rgb) value = get_value((x, y), rgb, width, height) im.putpixel((x, y), value) if not c.has_key(value):