From 9947794ccd9f1fb53c0b8846642d7991bb730733 Mon Sep 17 00:00:00 2001 From: homm Date: Thu, 24 Nov 2016 03:08:57 +0300 Subject: [PATCH 1/3] fix spelling error --- Tests/test_image_resample.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Tests/test_image_resample.py b/Tests/test_image_resample.py index 1336c1009..fb439579c 100644 --- a/Tests/test_image_resample.py +++ b/Tests/test_image_resample.py @@ -255,7 +255,7 @@ class CoreResampleAlphaCorrectTest(PillowTestCase): self.run_levels_case(case.resize((512, 32), Image.BICUBIC)) self.run_levels_case(case.resize((512, 32), Image.LANCZOS)) - def make_dity_case(self, mode, clean_pixel, dirty_pixel): + def make_dirty_case(self, mode, clean_pixel, dirty_pixel): i = Image.new(mode, (64, 64), dirty_pixel) px = i.load() xdiv4 = i.size[0] // 4 @@ -265,7 +265,7 @@ class CoreResampleAlphaCorrectTest(PillowTestCase): px[x + xdiv4, y + ydiv4] = clean_pixel return i - def run_dity_case(self, i, clean_pixel): + def run_dirty_case(self, i, clean_pixel): px = i.load() for y in range(i.size[1]): for x in range(i.size[0]): @@ -275,20 +275,20 @@ class CoreResampleAlphaCorrectTest(PillowTestCase): self.assertEqual(px[x, y][:3], clean_pixel, message) def test_dirty_pixels_rgba(self): - case = self.make_dity_case('RGBA', (255, 255, 0, 128), (0, 0, 255, 0)) - self.run_dity_case(case.resize((20, 20), Image.BOX), (255, 255, 0)) - self.run_dity_case(case.resize((20, 20), Image.BILINEAR), (255, 255, 0)) - self.run_dity_case(case.resize((20, 20), Image.HAMMING), (255, 255, 0)) - self.run_dity_case(case.resize((20, 20), Image.BICUBIC), (255, 255, 0)) - self.run_dity_case(case.resize((20, 20), Image.LANCZOS), (255, 255, 0)) + case = self.make_dirty_case('RGBA', (255, 255, 0, 128), (0, 0, 255, 0)) + self.run_dirty_case(case.resize((20, 20), Image.BOX), (255, 255, 0)) + self.run_dirty_case(case.resize((20, 20), Image.BILINEAR), (255, 255, 0)) + self.run_dirty_case(case.resize((20, 20), Image.HAMMING), (255, 255, 0)) + self.run_dirty_case(case.resize((20, 20), Image.BICUBIC), (255, 255, 0)) + self.run_dirty_case(case.resize((20, 20), Image.LANCZOS), (255, 255, 0)) def test_dirty_pixels_la(self): - case = self.make_dity_case('LA', (255, 128), (0, 0)) - self.run_dity_case(case.resize((20, 20), Image.BOX), (255,)) - self.run_dity_case(case.resize((20, 20), Image.BILINEAR), (255,)) - self.run_dity_case(case.resize((20, 20), Image.HAMMING), (255,)) - self.run_dity_case(case.resize((20, 20), Image.BICUBIC), (255,)) - self.run_dity_case(case.resize((20, 20), Image.LANCZOS), (255,)) + case = self.make_dirty_case('LA', (255, 128), (0, 0)) + self.run_dirty_case(case.resize((20, 20), Image.BOX), (255,)) + self.run_dirty_case(case.resize((20, 20), Image.BILINEAR), (255,)) + self.run_dirty_case(case.resize((20, 20), Image.HAMMING), (255,)) + self.run_dirty_case(case.resize((20, 20), Image.BICUBIC), (255,)) + self.run_dirty_case(case.resize((20, 20), Image.LANCZOS), (255,)) class CoreResamplePassesTest(PillowTestCase): From d4784bffb2d1f398b1eb16b1fe09874b13f78cea Mon Sep 17 00:00:00 2001 From: homm Date: Thu, 24 Nov 2016 03:30:36 +0300 Subject: [PATCH 2/3] return copy of the image if size matches --- PIL/Image.py | 2 +- Tests/test_image_resample.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/PIL/Image.py b/PIL/Image.py index 368186f81..3f8a49e6f 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -1544,7 +1544,7 @@ class Image(object): size = tuple(size) if self.size == size: - return self._new(self.im) + return self.copy() if self.mode in ("1", "P"): resample = NEAREST diff --git a/Tests/test_image_resample.py b/Tests/test_image_resample.py index fb439579c..ebc1ac6e4 100644 --- a/Tests/test_image_resample.py +++ b/Tests/test_image_resample.py @@ -24,6 +24,15 @@ class TestImagingResampleVulnerability(PillowTestCase): with self.assertRaises(ValueError): im.resize((100, -100)) + def test_modify_after_resizing(self): + im = hopper('RGB') + # get copy with same size + copy = im.resize(im.size) + # some in-place operation + copy.paste('black', (0, 0, im.width // 2, im.height // 2)) + # image should be different + self.assertNotEqual(im.tobytes(), copy.tobytes()) + class TestImagingCoreResampleAccuracy(PillowTestCase): def make_case(self, mode, size, color): From bcb6d606a2210b44dac62f7f6d56dead2c9b84e6 Mon Sep 17 00:00:00 2001 From: homm Date: Thu, 24 Nov 2016 04:06:18 +0300 Subject: [PATCH 3/3] fix typo! --- Tests/test_image_resize.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/test_image_resize.py b/Tests/test_image_resize.py index e0af7bb6b..7db409659 100644 --- a/Tests/test_image_resize.py +++ b/Tests/test_image_resize.py @@ -39,14 +39,14 @@ class TestImagingCoreResize(PillowTestCase): self.assertEqual(r.im.bands, im.im.bands) def test_reduce_filters(self): - for f in [Image.LINEAR, Image.BOX, Image.BILINEAR, Image.HAMMING, + for f in [Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS]: r = self.resize(hopper("RGB"), (15, 12), f) self.assertEqual(r.mode, "RGB") self.assertEqual(r.size, (15, 12)) def test_enlarge_filters(self): - for f in [Image.LINEAR, Image.BOX, Image.BILINEAR, Image.HAMMING, + for f in [Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS]: r = self.resize(hopper("RGB"), (212, 195), f) self.assertEqual(r.mode, "RGB") @@ -66,7 +66,7 @@ class TestImagingCoreResize(PillowTestCase): } samples['dirty'].putpixel((1, 1), 128) - for f in [Image.LINEAR, Image.BOX, Image.BILINEAR, Image.HAMMING, + for f in [Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS]: # samples resized with current filter references = {