Exemplo n.º 1
0
    def test__new(self):
        from PIL2 import ImagePalette

        im = hopper('RGB')
        im_p = hopper('P')

        blank_p = Image.new('P', (10, 10))
        blank_pa = Image.new('PA', (10, 10))
        blank_p.palette = None
        blank_pa.palette = None

        def _make_new(base_image, im, palette_result=None):
            new_im = base_image._new(im)
            self.assertEqual(new_im.mode, im.mode)
            self.assertEqual(new_im.size, im.size)
            self.assertEqual(new_im.info, base_image.info)
            if palette_result is not None:
                self.assertEqual(new_im.palette.tobytes(),
                                 palette_result.tobytes())
            else:
                self.assertEqual(new_im.palette, None)

        _make_new(im, im_p, im_p.palette)
        _make_new(im_p, im, None)
        _make_new(im, blank_p, ImagePalette.ImagePalette())
        _make_new(im, blank_pa, ImagePalette.ImagePalette())
Exemplo n.º 2
0
    def test_getdata(self):
        # test getheader/getdata against legacy values
        # Create a 'P' image with holes in the palette
        im = Image._wedge().resize((16, 16))
        im.putpalette(ImagePalette.ImagePalette('RGB'))
        im.info = {'background': 0}

        passed_palette = bytes(bytearray([255-i//3 for i in range(768)]))

        GifImagePlugin._FORCE_OPTIMIZE = True
        try:
            h = GifImagePlugin.getheader(im, passed_palette)
            d = GifImagePlugin.getdata(im)

            import pickle
            # Enable to get target values on pre-refactor version
            # with open('Tests/images/gif_header_data.pkl', 'wb') as f:
            #    pickle.dump((h, d), f, 1)
            with open('Tests/images/gif_header_data.pkl', 'rb') as f:
                (h_target, d_target) = pickle.load(f)

            self.assertEqual(h, h_target)
            self.assertEqual(d, d_target)
        finally:
            GifImagePlugin._FORCE_OPTIMIZE = False
Exemplo n.º 3
0
    def test_file(self):

        palette = ImagePalette.ImagePalette("RGB", list(range(256)) * 3)

        f = self.tempfile("temp.lut")

        palette.save(f)

        p = ImagePalette.load(f)

        # load returns raw palette information
        self.assertEqual(len(p[0]), 768)
        self.assertEqual(p[1], "RGB")

        p = ImagePalette.raw(p[1], p[0])
        self.assertIsInstance(p, ImagePalette.ImagePalette)
        self.assertEqual(p.palette, palette.tobytes())
Exemplo n.º 4
0
    def test_rawmode_valueerrors(self):
        # Arrange
        palette = ImagePalette.raw("RGB", list(range(256)) * 3)

        # Act / Assert
        self.assertRaises(ValueError, palette.tobytes)
        self.assertRaises(ValueError, palette.getcolor, (1, 2, 3))
        f = self.tempfile("temp.lut")
        self.assertRaises(ValueError, palette.save, f)
Exemplo n.º 5
0
    def test_getdata(self):
        # Arrange
        data_in = list(range(256)) * 3
        palette = ImagePalette.ImagePalette("RGB", data_in)

        # Act
        mode, data_out = palette.getdata()

        # Assert
        self.assertEqual(mode, "RGB;L")
Exemplo n.º 6
0
    def test_rawmode_getdata(self):
        # Arrange
        data_in = list(range(256)) * 3
        palette = ImagePalette.raw("RGB", data_in)

        # Act
        rawmode, data_out = palette.getdata()

        # Assert
        self.assertEqual(rawmode, "RGB")
        self.assertEqual(data_in, data_out)
Exemplo n.º 7
0
    def test_load_via_imagepalette(self):
        # Arrange
        from PIL2 import ImagePalette
        test_file = "Tests/images/gimp_gradient.ggr"

        # Act
        palette = ImagePalette.load(test_file)

        # Assert
        # load returns raw palette information
        self.assertEqual(len(palette[0]), 1024)
        self.assertEqual(palette[1], "RGBA")
Exemplo n.º 8
0
    def test_sanity(self):
        im = Image.open(TEST_FILE)
        im.load()
        self.assertEqual(im.mode, "RGBA")
        self.assertEqual(im.size, (128, 128))
        self.assertEqual(im.format, "MIC")

        # Adjust for the gamma of 2.2 encoded into the file
        lut = ImagePalette.make_gamma_lut(1 / 2.2)
        im = Image.merge('RGBA', [chan.point(lut) for chan in im.split()])

        im2 = hopper("RGBA")
        self.assert_image_similar(im, im2, 10)
Exemplo n.º 9
0
    def test_palette_save_ImagePalette(self):
        # pass in a different palette, as an ImagePalette.ImagePalette
        # effectively the same as test_palette_save_P

        im = hopper('P')
        palette = ImagePalette.ImagePalette('RGB', list(range(256))[::-1]*3)

        out = self.tempfile('temp.gif')
        im.save(out, palette=palette)

        reloaded = Image.open(out)
        im.putpalette(palette)
        self.assert_image_equal(reloaded, im)
Exemplo n.º 10
0
    def test_getcolor(self):

        palette = ImagePalette.ImagePalette()

        test_map = {}
        for i in range(256):
            test_map[palette.getcolor((i, i, i))] = i

        self.assertEqual(len(test_map), 256)
        self.assertRaises(ValueError, palette.getcolor, (1, 2, 3))

        # Test unknown color specifier
        self.assertRaises(ValueError, palette.getcolor, "unknown")
Exemplo n.º 11
0
    def test_load_1_3_via_imagepalette(self):
        # Arrange
        from PIL2 import ImagePalette
        # GIMP 1.3 gradient files contain a name field
        test_file = "Tests/images/gimp_gradient_with_name.ggr"

        # Act
        palette = ImagePalette.load(test_file)

        # Assert
        # load returns raw palette information
        self.assertEqual(len(palette[0]), 1024)
        self.assertEqual(palette[1], "RGBA")
Exemplo n.º 12
0
    def test_make_linear_lut(self):
        # Arrange
        black = 0
        white = 255

        # Act
        lut = ImagePalette.make_linear_lut(black, white)

        # Assert
        self.assertIsInstance(lut, list)
        self.assertEqual(len(lut), 256)
        # Check values
        for i in range(0, len(lut)):
            self.assertEqual(lut[i], i)
Exemplo n.º 13
0
    def test_make_gamma_lut(self):
        # Arrange
        exp = 5

        # Act
        lut = ImagePalette.make_gamma_lut(exp)

        # Assert
        self.assertIsInstance(lut, list)
        self.assertEqual(len(lut), 256)
        # Check a few values
        self.assertEqual(lut[0], 0)
        self.assertEqual(lut[63], 0)
        self.assertEqual(lut[127], 8)
        self.assertEqual(lut[191], 60)
        self.assertEqual(lut[255], 255)
Exemplo n.º 14
0
    def test_transparent_optimize(self):
        # from issue #2195, if the transparent color is incorrectly
        # optimized out, gif loses transparency
        # Need a palette that isn't using the 0 color, and one
        # that's > 128 items where the transparent color is actually
        # the top palette entry to trigger the bug.

        data = bytes(bytearray(range(1, 254)))
        palette = ImagePalette.ImagePalette("RGB", list(range(256))*3)

        im = Image.new('L', (253, 1))
        im.frombytes(data)
        im.putpalette(palette)

        out = self.tempfile('temp.gif')
        im.save(out, transparency=253)
        reloaded = Image.open(out)

        self.assertEqual(reloaded.info['transparency'], 253)
Exemplo n.º 15
0
 def test_imagepalette(self):
     im = hopper("P")
     im.putpalette(ImagePalette.negative())
     im.putpalette(ImagePalette.random())
     im.putpalette(ImagePalette.sepia())
     im.putpalette(ImagePalette.wedge())
Exemplo n.º 16
0
    def test_sanity(self):

        ImagePalette.ImagePalette("RGB", list(range(256)) * 3)
        self.assertRaises(ValueError, ImagePalette.ImagePalette, "RGB",
                          list(range(256)) * 2)