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())
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
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())
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)
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")
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)
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")
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)
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)
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")
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")
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)
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)
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)
def test_imagepalette(self): im = hopper("P") im.putpalette(ImagePalette.negative()) im.putpalette(ImagePalette.random()) im.putpalette(ImagePalette.sepia()) im.putpalette(ImagePalette.wedge())
def test_sanity(self): ImagePalette.ImagePalette("RGB", list(range(256)) * 3) self.assertRaises(ValueError, ImagePalette.ImagePalette, "RGB", list(range(256)) * 2)