From 07af06bf8c1a72799e691f5f30fe7b9c92e8f858 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 29 Jan 2017 18:44:24 +0200 Subject: [PATCH] Expose and test radial_gradient --- PIL/Image.py | 9 +++++++++ Tests/images/radial_gradient_L.png | Bin 0 -> 6540 bytes Tests/images/radial_gradient_P.png | Bin 0 -> 11927 bytes Tests/test_image.py | 26 ++++++++++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 Tests/images/radial_gradient_L.png create mode 100644 Tests/images/radial_gradient_P.png diff --git a/PIL/Image.py b/PIL/Image.py index 682fa6056..ed1d10907 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2576,3 +2576,12 @@ def linear_gradient(mode): :param mode: Input mode. """ return Image()._new(core.linear_gradient(mode)) + + +def radial_gradient(mode): + """ + Generate 256x256 radial gradient from black to white, centre to edge. + + :param mode: Input mode. + """ + return Image()._new(core.radial_gradient(mode)) diff --git a/Tests/images/radial_gradient_L.png b/Tests/images/radial_gradient_L.png new file mode 100644 index 0000000000000000000000000000000000000000..95309d7c097c2babd136bf7cf2e7452acc4f2024 GIT binary patch literal 6540 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 literal 0 HcmV?d00001 diff --git a/Tests/images/radial_gradient_P.png b/Tests/images/radial_gradient_P.png new file mode 100644 index 0000000000000000000000000000000000000000..1990749cc87543bf80f689543b3992112997f468 GIT binary patch literal 11927 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 K7ZrH3c>fQtTtG1Z literal 0 HcmV?d00001 diff --git a/Tests/test_image.py b/Tests/test_image.py index d345ee5da..9034de720 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -342,6 +342,32 @@ class TestImage(PillowTestCase): mode)) self.assert_image_equal(im, im2) + def test_radial_gradient_wrong_mode(self): + # Arrange + wrong_mode = "RGB" + + # Act / Assert + self.assertRaises(ValueError, + lambda: Image.radial_gradient(wrong_mode)) + return + + def test_radial_gradient(self): + + # Arrange + for mode in ["L", "P"]: + + # Act + im = Image.radial_gradient(mode) + + # Assert + self.assertEqual(im.size, (256, 256)) + self.assertEqual(im.mode, mode) + self.assertEqual(im.getpixel((0, 0)), 255) + self.assertEqual(im.getpixel((128, 128)), 0) + im2 = Image.open('Tests/images/radial_gradient_{}.png'.format( + mode)) + self.assert_image_equal(im, im2) + if __name__ == '__main__': unittest.main()