Пример #1
0
    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))
Пример #2
0
    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))))
Пример #3
0
    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))))
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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,
                ])))
Пример #7
0
    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)))))
Пример #8
0
    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))