def test_apply(self): lut = ImageFilter.Color3DLUT.generate(5, lambda r, g, b: (r, g, b)) g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) self.assertEqual(im, im.filter(lut))
def test_identities_4_channels(self): g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) # Red channel copied to alpha self.assert_image_equal( Image.merge('RGBA', (im.split() * 2)[:4]), im._new( im.im.color_lut_3d('RGBA', Image.LINEAR, *self.generate_identity_table(4, 17))))
def test_copy_alpha_channel(self): g = Image.linear_gradient('L') im = Image.merge('RGBA', [ g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180), g.transpose(Image.ROTATE_270) ]) self.assert_image_equal( im, im._new( im.im.color_lut_3d('RGBA', Image.LINEAR, *self.generate_identity_table(3, 17))))
def test_linear_gradient(self): # Arrange target_file = "Tests/images/linear_gradient.png" for mode in ["L", "P"]: # Act im = Image.linear_gradient(mode) # Assert self.assertEqual(im.size, (256, 256)) self.assertEqual(im.mode, mode) self.assertEqual(im.getpixel((0, 0)), 0) self.assertEqual(im.getpixel((255, 255)), 255) target = Image.open(target_file).convert(mode) self.assert_image_equal(im, target)
def test_numpy_formats(self): g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = numpy.array(lut.table, dtype=numpy.float32)[:-1] with self.assertRaisesRegex(ValueError, "should have table_channels"): im.filter(lut) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = (numpy.array(lut.table, dtype=numpy.float32).reshape( (7 * 9 * 11), 3)) with self.assertRaisesRegex(ValueError, "should have table_channels"): im.filter(lut) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = numpy.array(lut.table, dtype=numpy.float16) self.assert_image_equal(im, im.filter(lut)) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = numpy.array(lut.table, dtype=numpy.float32) self.assert_image_equal(im, im.filter(lut)) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = numpy.array(lut.table, dtype=numpy.float64) self.assert_image_equal(im, im.filter(lut)) lut = ImageFilter.Color3DLUT.generate((7, 9, 11), lambda r, g, b: (r, g, b)) lut.table = numpy.array(lut.table, dtype=numpy.int32) im.filter(lut) lut.table = numpy.array(lut.table, dtype=numpy.int8) im.filter(lut)
def test_channels_order(self): g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) # Reverse channels by splitting and using table self.assert_image_equal( Image.merge('RGB', im.split()[::-1]), im._new( im.im.color_lut_3d('RGB', Image.LINEAR, 3, 2, 2, 2, [ 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, ])))
def test_identities(self): g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) # Fast test with small cubes for size in [2, 3, 5, 7, 11, 16, 17]: self.assert_image_equal( im, im._new( im.im.color_lut_3d('RGB', Image.LINEAR, *self.generate_identity_table(3, size)))) # Not so fast self.assert_image_equal( im, im._new( im.im.color_lut_3d( 'RGB', Image.LINEAR, *self.generate_identity_table(3, (2, 2, 65)))))
def test_overflow(self): g = Image.linear_gradient('L') im = Image.merge( 'RGB', [g, g.transpose(Image.ROTATE_90), g.transpose(Image.ROTATE_180)]) transformed = im._new( im.im.color_lut_3d('RGB', Image.LINEAR, 3, 2, 2, 2, [ -1, -1, -1, 2, -1, -1, -1, 2, -1, 2, 2, -1, -1, -1, 2, 2, -1, 2, -1, 2, 2, 2, 2, 2, ])).load() self.assertEqual(transformed[0, 0], (0, 0, 255)) self.assertEqual(transformed[50, 50], (0, 0, 255)) self.assertEqual(transformed[255, 0], (0, 255, 255)) self.assertEqual(transformed[205, 50], (0, 255, 255)) self.assertEqual(transformed[0, 255], (255, 0, 0)) self.assertEqual(transformed[50, 205], (255, 0, 0)) self.assertEqual(transformed[255, 255], (255, 255, 0)) self.assertEqual(transformed[205, 205], (255, 255, 0)) transformed = im._new( im.im.color_lut_3d('RGB', Image.LINEAR, 3, 2, 2, 2, [ -3, -3, -3, 5, -3, -3, -3, 5, -3, 5, 5, -3, -3, -3, 5, 5, -3, 5, -3, 5, 5, 5, 5, 5, ])).load() self.assertEqual(transformed[0, 0], (0, 0, 255)) self.assertEqual(transformed[50, 50], (0, 0, 255)) self.assertEqual(transformed[255, 0], (0, 255, 255)) self.assertEqual(transformed[205, 50], (0, 255, 255)) self.assertEqual(transformed[0, 255], (255, 0, 0)) self.assertEqual(transformed[50, 205], (255, 0, 0)) self.assertEqual(transformed[255, 255], (255, 255, 0)) self.assertEqual(transformed[205, 205], (255, 255, 0))