diff --git a/Tests/test_image_mode.py b/Tests/test_image_mode.py index 345c0dacb4b..bdfb6883b76 100644 --- a/Tests/test_image_mode.py +++ b/Tests/test_image_mode.py @@ -26,6 +26,17 @@ def test_sanity(self): self.assertEqual(m.basemode, "L") self.assertEqual(m.basetype, "L") + for mode in ("I;16", "I;16S", + "I;16L", "I;16LS", + "I;16B", "I;16BS", + "I;16N", "I;16NS"): + m = ImageMode.getmode(mode) + self.assertEqual(m.mode, mode) + self.assertEqual(str(m), mode) + self.assertEqual(m.bands, ("I",)) + self.assertEqual(m.basemode, "L") + self.assertEqual(m.basetype, "L") + m = ImageMode.getmode("RGB") self.assertEqual(m.mode, "RGB") self.assertEqual(str(m), "RGB") diff --git a/src/PIL/ImageMode.py b/src/PIL/ImageMode.py index 2b3377a14f3..819edf5d2e7 100644 --- a/src/PIL/ImageMode.py +++ b/src/PIL/ImageMode.py @@ -48,9 +48,11 @@ def getmode(mode): modes["La"] = ModeDescriptor("La", ("L", "a"), "L", "L") modes["PA"] = ModeDescriptor("PA", ("P", "A"), "RGB", "L") # mapping modes - modes["I;16"] = ModeDescriptor("I;16", "I", "L", "L") - modes["I;16L"] = ModeDescriptor("I;16L", "I", "L", "L") - modes["I;16B"] = ModeDescriptor("I;16B", "I", "L", "L") + for i16mode in ("I;16", "I;16S", + "I;16L", "I;16LS", + "I;16B", "I;16BS", + "I;16N", "I;16NS"): + modes[i16mode] = ModeDescriptor(i16mode, ("I",), "L", "L") # set global mode cache atomically _modes = modes return _modes[mode] diff --git a/src/PIL/ImageShow.py b/src/PIL/ImageShow.py index ecf1792779a..fb04614528b 100644 --- a/src/PIL/ImageShow.py +++ b/src/PIL/ImageShow.py @@ -63,18 +63,11 @@ class Viewer(object): def show(self, image, **options): # save temporary image to disk - if image.mode[:4] == "I;16": - # @PIL88 @PIL101 - # "I;16" isn't an 'official' mode, but we still want to - # provide a simple way to show 16-bit images. - base = "L" - # FIXME: auto-contrast if max() > 255? - else: - base = Image.getmodebase(image.mode) - if not (base == image.mode or - image.mode in ("1", "RGBA") or + if not (image.mode in ("1", "RGBA") or (self.format == "PNG" and image.mode == "LA")): - image = image.convert(base) + base = Image.getmodebase(image.mode) + if image.mode != base: + image = image.convert(base) return self.show_image(image, **options)