diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index e26c242b0..b8e74d99e 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -1,6 +1,6 @@ from helper import unittest, PillowTestCase -from PIL import ImagePalette +from PIL import ImagePalette, Image ImagePalette = ImagePalette.ImagePalette @@ -125,6 +125,19 @@ class TestImagePalette(PillowTestCase): self.assertEqual(rawmode, "RGB") self.assertEqual(data_in, data_out) + def test_2bit_palette(self): + # issue #2258, 2 bit palettes are corrupted. + outfile = self.tempfile('temp.png') + + rgb = b'\x00' * 2 + b'\x01' * 2 + b'\x02' * 2 + img = Image.frombytes('P', (6, 1), rgb) + img.putpalette('\xFF\x00\x00' '\x00\xFF\x00' '\x00\x00\xFF') # RGB + img.save(outfile, format='PNG') + + reloaded = Image.open(outfile) + + self.assert_image_equal(img, reloaded) + if __name__ == '__main__': unittest.main() diff --git a/libImaging/Pack.c b/libImaging/Pack.c index c768bc27d..621936351 100644 --- a/libImaging/Pack.c +++ b/libImaging/Pack.c @@ -194,6 +194,7 @@ packP2(UINT8* out, const UINT8* in, int pixels) case 2: out[0] = (in[0] << 6) | ((in[1] & 3) << 4); + break; case 1: out[0] = (in[0] << 6); }