diff --git a/Tests/images/16bit.s.tif b/Tests/images/16bit.s.tif new file mode 100644 index 000000000..f36e68d61 Binary files /dev/null and b/Tests/images/16bit.s.tif differ diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 2a9132d48..4c6ae4af3 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -198,6 +198,11 @@ class TestFileTiff(PillowTestCase): self.assertEqual(b[0], b'\x01') self.assertEqual(b[1], b'\xe0') + def test_16bit_s(self): + im = Image.open('Tests/images/16bit.s.tif') + im.load() + self.assertEqual(im.mode, 'I;16S') + def test_12bit_rawmode(self): """ Are we generating the same interpretation of the image as Imagemagick is? """ diff --git a/libImaging/Access.c b/libImaging/Access.c index 292968f1c..05eb10c7c 100644 --- a/libImaging/Access.c +++ b/libImaging/Access.c @@ -227,6 +227,7 @@ ImagingAccessInit() ADD("I;16", line_16, get_pixel_16L, put_pixel_16L); ADD("I;16L", line_16, get_pixel_16L, put_pixel_16L); ADD("I;16B", line_16, get_pixel_16B, put_pixel_16B); + ADD("I;16S", line_16, get_pixel_16L, put_pixel_16L); ADD("I;32L", line_32, get_pixel_32L, put_pixel_32L); ADD("I;32B", line_32, get_pixel_32B, put_pixel_32B); ADD("F", line_32, get_pixel_32, put_pixel_32); diff --git a/libImaging/Storage.c b/libImaging/Storage.c index 72285970a..8a897b0c9 100644 --- a/libImaging/Storage.c +++ b/libImaging/Storage.c @@ -115,7 +115,7 @@ ImagingNewPrologueSubtype(const char *mode, int xsize, int ysize, int size) im->linesize = xsize * 4; im->type = IMAGING_TYPE_INT32; - } else if (strcmp(mode, "I;16") == 0 || strcmp(mode, "I;16L") == 0 \ + } else if (strcmp(mode, "I;16") == 0 || strcmp(mode, "I;16L") == 0 || strcmp(mode, "I;16S") == 0 \ || strcmp(mode, "I;16B") == 0 || strcmp(mode, "I;16N") == 0) { /* EXPERIMENTAL */ /* 16-bit raw integer images */ diff --git a/libImaging/Unpack.c b/libImaging/Unpack.c index c7b9a606c..b6011a8a0 100644 --- a/libImaging/Unpack.c +++ b/libImaging/Unpack.c @@ -1405,6 +1405,7 @@ static struct { /* storage modes */ {"I;16", "I;16", 16, copy2}, {"I;16B", "I;16B", 16, copy2}, + {"I;16S", "I;16S", 16, copy2}, {"I;16L", "I;16L", 16, copy2}, {"I;16", "I;16N", 16, unpackI16N_I16}, // LibTiff native->image endian.