From 758c8930679a5d123bfac267a345d1b93949f1cc Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 18 Sep 2014 08:46:22 -0700 Subject: [PATCH 1/3] Convert lena->hopper --- Tests/test_imageenhance.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/test_imageenhance.py b/Tests/test_imageenhance.py index 433c49cf6..5edf46b12 100644 --- a/Tests/test_imageenhance.py +++ b/Tests/test_imageenhance.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, lena +from helper import unittest, PillowTestCase, hopper from PIL import Image from PIL import ImageEnhance @@ -10,10 +10,10 @@ class TestImageEnhance(PillowTestCase): # FIXME: assert_image # Implicit asserts no exception: - ImageEnhance.Color(lena()).enhance(0.5) - ImageEnhance.Contrast(lena()).enhance(0.5) - ImageEnhance.Brightness(lena()).enhance(0.5) - ImageEnhance.Sharpness(lena()).enhance(0.5) + ImageEnhance.Color(hopper()).enhance(0.5) + ImageEnhance.Contrast(hopper()).enhance(0.5) + ImageEnhance.Brightness(hopper()).enhance(0.5) + ImageEnhance.Sharpness(hopper()).enhance(0.5) def test_crash(self): From 5ea966d8698ff2adcff9b514f053babc7463450f Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 18 Sep 2014 08:49:13 -0700 Subject: [PATCH 2/3] Test for alpha preservation in ImageEnhance, #899 --- Tests/test_imageenhance.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Tests/test_imageenhance.py b/Tests/test_imageenhance.py index 5edf46b12..58042db85 100644 --- a/Tests/test_imageenhance.py +++ b/Tests/test_imageenhance.py @@ -22,6 +22,34 @@ class TestImageEnhance(PillowTestCase): ImageEnhance.Sharpness(im).enhance(0.5) + def _half_transparent_image(self): + # returns an image, half transparent, half solid + im = hopper('RGB') + + transparent = Image.new('L', im.size, 0) + solid = Image.new('L', (im.size[0]//2, im.size[1]), 255) + transparent.paste(solid, (0,0)) + im.putalpha(transparent) + + return im + + def _check_alpha(self,im, original, op, amount): + self.assertEqual(im.getbands(), original.getbands()) + self.assert_image_equal(im.split()[-1], original.split()[-1], + "Diff on %s: %s" % (op, amount)) + + def test_alpha(self): + # Issue https://github.com/python-pillow/Pillow/issues/899 + # Is alpha preserved through image enhancement? + + original = self._half_transparent_image() + + for op in ['Color', 'Brightness', 'Contrast', 'Sharpness']: + for amount in [0,0.5,1.0]: + self._check_alpha(getattr(ImageEnhance,op)(original).enhance(amount), + original, op, amount) + + if __name__ == '__main__': unittest.main() From 394f6d32491bb7e0a0c87545e49768476bbc2793 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 18 Sep 2014 08:49:37 -0700 Subject: [PATCH 3/3] Fix for alpha preservation in ImageEnhance, #899 --- PIL/ImageEnhance.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/PIL/ImageEnhance.py b/PIL/ImageEnhance.py index f802dc1d3..a196d5b09 100644 --- a/PIL/ImageEnhance.py +++ b/PIL/ImageEnhance.py @@ -47,8 +47,11 @@ class Color(_Enhance): """ def __init__(self, image): self.image = image - self.degenerate = image.convert("L").convert(image.mode) + self.intermediate_mode = 'L' + if 'A' in image.getbands(): + self.intermediate_mode = 'LA' + self.degenerate = image.convert(self.intermediate_mode).convert(image.mode) class Contrast(_Enhance): """Adjust image contrast. @@ -62,6 +65,9 @@ class Contrast(_Enhance): mean = int(ImageStat.Stat(image.convert("L")).mean[0] + 0.5) self.degenerate = Image.new("L", image.size, mean).convert(image.mode) + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1]) + class Brightness(_Enhance): """Adjust image brightness. @@ -74,6 +80,9 @@ class Brightness(_Enhance): self.image = image self.degenerate = Image.new(image.mode, image.size, 0) + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1]) + class Sharpness(_Enhance): """Adjust image sharpness. @@ -85,3 +94,6 @@ class Sharpness(_Enhance): def __init__(self, image): self.image = image self.degenerate = image.filter(ImageFilter.SMOOTH) + + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1])