PaletteOptimiser

Changeset

87:74063085e8eb
2015-10-10 Paul Boddie raw files shortlog changelog graph Moved initial image processing to the extension module. simpleimage-shedskin
optimiser.py (file) optimiserlib.py (file)
     1.1 --- a/optimiser.py	Sat Oct 10 16:13:09 2015 +0200
     1.2 +++ b/optimiser.py	Sat Oct 10 16:39:08 2015 +0200
     1.3 @@ -72,28 +72,6 @@
     1.4  
     1.5      return im.resize((width, height))
     1.6  
     1.7 -def process_image(pim, saturate, desaturate, darken, brighten):
     1.8 -
     1.9 -    """
    1.10 -    Process image 'pim' using the given options: 'saturate', 'desaturate',
    1.11 -    'darken', 'brighten'.
    1.12 -    """
    1.13 -
    1.14 -    width, height = pim.size
    1.15 -    im = SimpleImage(list(pim.getdata()), pim.size)
    1.16 -
    1.17 -    if saturate or desaturate or darken or brighten:
    1.18 -        for y in range(0, height):
    1.19 -            for x in range(0, width):
    1.20 -                rgb = im.getpixel((x, y))
    1.21 -                if saturate or desaturate:
    1.22 -                    rgb = saturate_rgb(rgb, saturate and 0.5 / saturate or 2 * desaturate)
    1.23 -                if darken or brighten:
    1.24 -                    rgb = amplify_rgb(rgb, brighten and 0.5 / brighten or 2 * darken)
    1.25 -                im.putpixel((x, y), rgb)
    1.26 -
    1.27 -    pim.putdata(im.getdata())
    1.28 -
    1.29  def preview_image(pim, half_resolution_preview=False):
    1.30  
    1.31      "Return a preview copy of image 'pim'."
    1.32 @@ -234,7 +212,9 @@
    1.33          im = PIL.Image.open(input_filename).convert("RGB")
    1.34          im = rotate_and_scale(exif, im, width, height, rotate)
    1.35  
    1.36 -        process_image(im, saturate, desaturate, darken, brighten)
    1.37 +        sim = SimpleImage(list(im.getdata()), im.size)
    1.38 +        process_image(sim, saturate, desaturate, darken, brighten)
    1.39 +        im.putdata(sim.getdata())
    1.40  
    1.41      # Generate a preview if requested.
    1.42  
    1.43 @@ -253,6 +233,7 @@
    1.44          if no_normal_output:
    1.45              im = PIL.Image.open(output_filename).convert("RGB")
    1.46  
    1.47 +        im = SimpleImage(list(im.getdata()), im.size)
    1.48          result = count_colours(im, 4)
    1.49          if result is not None:
    1.50              y, colours = result
     2.1 --- a/optimiserlib.py	Sat Oct 10 16:13:09 2015 +0200
     2.2 +++ b/optimiserlib.py	Sat Oct 10 16:39:08 2015 +0200
     2.3 @@ -230,6 +230,25 @@
     2.4              return (y, l)
     2.5      return None
     2.6  
     2.7 +def process_image(im, saturate, desaturate, darken, brighten):
     2.8 +
     2.9 +    """
    2.10 +    Process image 'im' using the given options: 'saturate', 'desaturate',
    2.11 +    'darken', 'brighten'.
    2.12 +    """
    2.13 +
    2.14 +    width, height = im.size
    2.15 +
    2.16 +    if saturate or desaturate or darken or brighten:
    2.17 +        for y in range(0, height):
    2.18 +            for x in range(0, width):
    2.19 +                rgb = im.getpixel((x, y))
    2.20 +                if saturate or desaturate:
    2.21 +                    rgb = saturate_rgb(rgb, saturate and 0.5 / saturate or 2 * desaturate)
    2.22 +                if darken or brighten:
    2.23 +                    rgb = amplify_rgb(rgb, brighten and 0.5 / brighten or 2 * darken)
    2.24 +                im.putpixel((x, y), rgb)
    2.25 +
    2.26  class SimpleImage:
    2.27  
    2.28      "An image behaving like PIL.Image."
    2.29 @@ -274,4 +293,6 @@
    2.30      get_colours(im, 0) == [(1.0, (0, 0, 0))]
    2.31      count_colours(im, 4)
    2.32  
    2.33 +    process_image(im, 1.0, 0.0, 1.0, 0.0)
    2.34 +
    2.35  # vim: tabstop=4 expandtab shiftwidth=4