diff --git a/Tests/images/tiff_16bit_RGB.tiff b/Tests/images/tiff_16bit_RGB.tiff new file mode 100644 index 00000000000..5eb7c73c245 Binary files /dev/null and b/Tests/images/tiff_16bit_RGB.tiff differ diff --git a/Tests/images/tiff_16bit_RGB_target.png b/Tests/images/tiff_16bit_RGB_target.png new file mode 100644 index 00000000000..9235800043b Binary files /dev/null and b/Tests/images/tiff_16bit_RGB_target.png differ diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 1d30393d4df..4bcf1e116c9 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -631,6 +631,20 @@ def test_save_tiff_with_jpegtables(self): # Should not raise UnicodeDecodeError or anything else im.save(outfile) + def test_16bit_RGB_tiff(self): + im = Image.open("Tests/images/tiff_16bit_RGB.tiff") + + self.assertEqual(im.mode, "RGB") + self.assertEqual(im.size, (100, 40)) + self.assertEqual( + im.tile, + [('tiff_adobe_deflate', (0, 0, 100, 40), 0, ('RGB;16N', 'tiff_adobe_deflate', False))] + ) + im.load() + + self.assert_image_equal_tofile( + im, "Tests/images/tiff_16bit_RGB_target.png") + def test_16bit_RGBa_tiff(self): im = Image.open("Tests/images/tiff_16bit_RGBa.tiff") diff --git a/src/libImaging/Unpack.c b/src/libImaging/Unpack.c index d9a948b3246..02196d25559 100644 --- a/src/libImaging/Unpack.c +++ b/src/libImaging/Unpack.c @@ -1369,12 +1369,12 @@ static struct { {"RGBA", "A", 8, band3}, #ifdef WORDS_BIGENDIAN - {"RGB", "RGB;16N", 64, unpackRGB16B}, + {"RGB", "RGB;16N", 48, unpackRGB16B}, {"RGBA", "RGBa;16N", 64, unpackRGBa16B}, {"RGBA", "RGBA;16N", 64, unpackRGBA16B}, {"RGBX", "RGBX;16N", 64, unpackRGBA16B}, #else - {"RGB", "RGB;16N", 64, unpackRGB16L}, + {"RGB", "RGB;16N", 48, unpackRGB16L}, {"RGBA", "RGBa;16N", 64, unpackRGBa16L}, {"RGBA", "RGBA;16N", 64, unpackRGBA16L}, {"RGBX", "RGBX;16N", 64, unpackRGBA16B},