PaletteOptimiser

Change of optimiser.py

51:2163b1916849
optimiser.py
     1.1 --- a/optimiser.py	Tue Oct 06 22:22:52 2015 +0200
     1.2 +++ b/optimiser.py	Wed Oct 07 00:35:48 2015 +0200
     1.3 @@ -41,15 +41,19 @@
     1.4  def invert(srgb):
     1.5      return tuple(map(lambda x: 1.0 - x, srgb))
     1.6  
     1.7 +cache = {}
     1.8 +
     1.9  def combination(rgb):
    1.10 -    rgb = square(scale(rgb))
    1.11 -    rgbi = invert(rgb)
    1.12 -    pairs = zip(rgbi, rgb)
    1.13 -    d = []
    1.14 -    for corner in corners:
    1.15 -        rs, gs, bs = scale(corner)
    1.16 -        d.append((pairs[0][int(rs)] * pairs[1][int(gs)] * pairs[2][int(bs)], corner))
    1.17 -    return balance(d)
    1.18 +    if not cache.has_key(rgb):
    1.19 +        rgb = square(scale(rgb))
    1.20 +        rgbi = invert(rgb)
    1.21 +        pairs = zip(rgbi, rgb)
    1.22 +        d = []
    1.23 +        for corner in corners:
    1.24 +            rs, gs, bs = scale(corner)
    1.25 +            d.append((pairs[0][int(rs)] * pairs[1][int(gs)] * pairs[2][int(bs)], corner))
    1.26 +        cache[rgb] = balance(d)
    1.27 +    return cache[rgb]
    1.28  
    1.29  def complements(rgb):
    1.30      r, g, b = rgb
    1.31 @@ -213,15 +217,12 @@
    1.32          if saturate or desaturate or darken or brighten:
    1.33              for y in range(0, height):
    1.34                  for x in range(0, width):
    1.35 +                    rgb = im.getpixel((x, y))
    1.36                      if saturate or desaturate:
    1.37 -                        rgb = im.getpixel((x, y))
    1.38                          rgb = saturate_rgb(rgb, saturate and math.pow(0.5, saturate) or math.pow(2, desaturate))
    1.39 -                        im.putpixel((x, y), rgb)
    1.40 -
    1.41                      if darken or brighten:
    1.42 -                        rgb = im.getpixel((x, y))
    1.43                          rgb = amplify_rgb(rgb, brighten and math.pow(0.5, brighten) or math.pow(2, darken))
    1.44 -                        im.putpixel((x, y), rgb)
    1.45 +                    im.putpixel((x, y), rgb)
    1.46  
    1.47      if preview:
    1.48          imp = im.copy()