PaletteOptimiser

Changeset

22:d33be469e542
2015-10-01 Paul Boddie raw files shortlog changelog graph Fixed saturation and added desaturation support.
optimiser.py (file)
     1.1 --- a/optimiser.py	Thu Oct 01 02:13:26 2015 +0200
     1.2 +++ b/optimiser.py	Thu Oct 01 02:24:13 2015 +0200
     1.3 @@ -68,11 +68,11 @@
     1.4  def sign(x):
     1.5      return x >= 0 and 1 or -1
     1.6  
     1.7 -def saturate(rgb):
     1.8 -    return tuple(map(saturate_value, rgb))
     1.9 +def saturate_rgb(rgb, exp):
    1.10 +    return tuple([saturate_value(x, exp) for x in rgb])
    1.11  
    1.12 -def saturate_value(x):
    1.13 -    return 127.5 + sign(x - 127.5) * 127.5 * math.sqrt(abs(x - 127.5) / 127.5)
    1.14 +def saturate_value(x, exp):
    1.15 +    return 127.5 + sign(x - 127.5) * 127.5 * pow(abs(x - 127.5) / 127.5, exp)
    1.16  
    1.17  def test():
    1.18      size = 512
    1.19 @@ -118,6 +118,7 @@
    1.20      input_filename, output_filename = sys.argv[1:3]
    1.21      rotate = "-r" in sys.argv[3:]
    1.22      saturate = "-s" in sys.argv[3:]
    1.23 +    desaturate = "-d" in sys.argv[3:]
    1.24  
    1.25      x = EXIF.process_file(open(input_filename))
    1.26      im = PIL.Image.open(input_filename)
    1.27 @@ -131,8 +132,8 @@
    1.28          c = {}
    1.29          for x in range(0, width):
    1.30              rgb = im.getpixel((x, y))
    1.31 -            if saturate:
    1.32 -                rgb = saturate(rgb)
    1.33 +            if saturate or desaturate:
    1.34 +                rgb = saturate_rgb(rgb, saturate and 0.5 or 2)
    1.35              value = get_value((x, y), rgb, width, height)
    1.36              im.putpixel((x, y), value)
    1.37              if not c.has_key(value):