From 768668c1d7b1d78929e33a667bf1faa0592efceb Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 20 Dec 2017 13:53:14 +0000 Subject: [PATCH] Added RGB*;16N Unpackers --- PIL/TiffImagePlugin.py | 7 ++++++- Tests/test_file_libtiff.py | 2 +- libImaging/Unpack.c | 13 +++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 140074cb0..39adfae70 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -1278,8 +1278,13 @@ class TiffImageFile(ImageFile.ImageFile): # we're expecting image byte order. So, if the rawmode # contains I;16, we need to convert from native to image # byte order. - if self.mode in ('I;16B', 'I;16') and 'I;16' in rawmode: + if rawmode == 'I;16': rawmode = 'I;16N' + if '16B' in rawmode: + rawmode = rawmode.replace('16B', '16N') + if '16L' in rawmode: + rawmode = rawmode.replace('16L', '16N') + # Offset in the tile tuple is 0, we go from 0,0 to # w,h, and we only do this once -- eds diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 79f02d636..dc3b10845 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -577,7 +577,7 @@ class TestFileLibTiff(LibTiffTestCase): self.assertEqual(im.mode, "RGBA") self.assertEqual(im.size, (100, 40)) - self.assertEqual(im.tile, [('tiff_lzw', (0, 0, 100, 40), 0, ('RGBa;16B', 'tiff_lzw', False))]) + self.assertEqual(im.tile, [('tiff_lzw', (0, 0, 100, 40), 0, ('RGBa;16N', 'tiff_lzw', False))]) im.load() self.assert_image_equal_tofile(im, "Tests/images/tiff_16bit_RGBa_target.png") diff --git a/libImaging/Unpack.c b/libImaging/Unpack.c index c7b9a606c..691eec7c1 100644 --- a/libImaging/Unpack.c +++ b/libImaging/Unpack.c @@ -1301,6 +1301,19 @@ static struct { {"RGBA", "B", 8, band2}, {"RGBA", "A", 8, band3}, +#ifdef WORDS_BIGENDIAN + {"RGB", "RGB;16N", 64, unpackRGB16B}, + {"RGBA", "RGBa;16N", 64, unpackRGBa16B}, + {"RGBA", "RGBA;16N", 64, unpackRGBA16B}, + {"RGBX", "RGBX;16N", 64, unpackRGBA16B}, +#else + {"RGB", "RGB;16N", 64, unpackRGB16L}, + {"RGBA", "RGBa;16N", 64, unpackRGBa16L}, + {"RGBA", "RGBA;16N", 64, unpackRGBA16L}, + {"RGBX", "RGBX;16N", 64, unpackRGBA16B}, +#endif + + /* true colour w. alpha premultiplied */ {"RGBa", "RGBa", 32, copy4}, {"RGBa", "BGRa", 32, unpackBGRA},