From 513e2a12dd5108b37b9789f52d0710206a32cf28 Mon Sep 17 00:00:00 2001 From: homm Date: Wed, 19 Nov 2014 03:03:49 +0300 Subject: [PATCH] resize test rework --- Tests/test_imaging_stretch.py | 73 +++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/Tests/test_imaging_stretch.py b/Tests/test_imaging_stretch.py index aaf1a4d1d..b4e66433d 100644 --- a/Tests/test_imaging_stretch.py +++ b/Tests/test_imaging_stretch.py @@ -1,51 +1,58 @@ """ -Tests for ImagingCore.stretch functionality. +Tests for resize functionality. """ from itertools import permutations -from helper import unittest, PillowTestCase +from helper import unittest, PillowTestCase, hopper from PIL import Image -im = Image.open("Tests/images/hopper.ppm").copy() +class TestImagingCoreResize(PillowTestCase): + def resize(self, im, size, f): + # Image class independend version of resize. + im.load() + return im._new(im.im.resize(size, f)) -class TestImagingStretch(PillowTestCase): - - def stretch(self, im, size, f): - return im._new(im.im.stretch(size, f)) - - def test_modes(self): - self.assertRaises(ValueError, im.convert("1").im.stretch, - (15, 12), Image.ANTIALIAS) - self.assertRaises(ValueError, im.convert("P").im.stretch, - (15, 12), Image.ANTIALIAS) - for mode in ["L", "I", "F", "RGB", "RGBA", "CMYK", "YCbCr"]: - s = im.convert(mode).im - r = s.stretch((15, 12), Image.ANTIALIAS) + def test_nearest_mode(self): + for mode in ["1", "P", "L", "I", "F", "RGB", "RGBA", "CMYK", "YCbCr", + "I;16"]: # exotic mode + im = hopper(mode) + r = self.resize(im, (15, 12), Image.NEAREST) self.assertEqual(r.mode, mode) - self.assertEqual(r.size, (15, 12)) - self.assertEqual(r.bands, s.bands) + self.assertEqual(r.size, (15, 12) ) + self.assertEqual(r.im.bands, im.im.bands) + + def test_convolution_modes(self): + self.assertRaises(ValueError, self.resize, hopper("1"), + (15, 12), Image.BILINEAR) + self.assertRaises(ValueError, self.resize, hopper("P"), + (15, 12), Image.BILINEAR) + self.assertRaises(ValueError, self.resize, hopper("I;16"), + (15, 12), Image.BILINEAR) + for mode in ["L", "I", "F", "RGB", "RGBA", "CMYK", "YCbCr"]: + im = hopper(mode) + r = self.resize(im, (15, 12), Image.BILINEAR) + self.assertEqual(r.mode, mode) + self.assertEqual(r.size, (15, 12) ) + self.assertEqual(r.im.bands, im.im.bands) def test_reduce_filters(self): - # There is no Image.NEAREST because im.stretch implementation - # is not NEAREST for reduction. It should be removed - # or renamed to supersampling. - for f in [Image.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: - r = im.im.stretch((15, 12), f) + for f in [Image.LINEAR, Image.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: + 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.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: - r = im.im.stretch((764, 414), f) + for f in [Image.LINEAR, Image.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: + r = self.resize(hopper("RGB"), (212, 195), f) self.assertEqual(r.mode, "RGB") - self.assertEqual(r.size, (764, 414)) + self.assertEqual(r.size, (212, 195)) def test_endianness(self): # Make an image with one colored pixel, in one channel. - # When stretched, that channel should be the same as a GS image. + # When resized, that channel should be the same as a GS image. # Other channels should be unaffected. # The R and A channels should not swap, which is indicitive of # an endianness issues. @@ -57,10 +64,10 @@ class TestImagingStretch(PillowTestCase): } samples['dirty'].putpixel((1, 1), 128) - for f in [Image.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: + for f in [Image.LINEAR, Image.BILINEAR, Image.BICUBIC, Image.ANTIALIAS]: # samples resized with current filter - resized = dict( - (name, self.stretch(ch, (4, 4), f)) + references = dict( + (name, self.resize(ch, (4, 4), f)) for name, ch in samples.items() ) @@ -72,12 +79,12 @@ class TestImagingStretch(PillowTestCase): for channels in set(permutations(channels_set)): # compile image from different channels permutations im = Image.merge(mode, [samples[ch] for ch in channels]) - stretched = self.stretch(im, (4, 4), f) + resized = self.resize(im, (4, 4), f) - for i, ch in enumerate(stretched.split()): + for i, ch in enumerate(resized.split()): # check what resized channel in image is the same # as separately resized channel - self.assert_image_equal(ch, resized[channels[i]]) + self.assert_image_equal(ch, references[channels[i]]) if __name__ == '__main__':