From fb49794d6e3c1cf989831d36f99649f5ff87543e Mon Sep 17 00:00:00 2001 From: Junxiao Shi Date: Sat, 1 Jun 2024 14:56:34 +0000 Subject: [PATCH] TIFF sample format table --- src/PIL/TiffImagePlugin.py | 46 ++++++++++++++++++++++++++++++++------ src/_imaging.c | 4 ++-- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index b89144803..d2ab012f0 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -60,6 +60,7 @@ from ._deprecate import deprecate from .TiffTags import TYPES logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) # XXX hack202406 # Set these to true to force use of libtiff for reading or writing. READ_LIBTIFF = False @@ -182,6 +183,43 @@ OPEN_INFO = { (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), (II, 0, (1,), 1, (16,), ()): ("I;16", "I;16"), (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), + (II, 1, (1, 1), 1, (16, 16), (0,)): ("I;16", "I;16"), + ( + II, + 1, + (1, 1, 1), + 1, + (16, 16, 16), + ( + 0, + 0, + ), + ): ("I;16", "I;16"), + ( + II, + 1, + (1, 1, 1, 1), + 1, + (16, 16, 16, 16), + ( + 0, + 0, + 0, + ), + ): ("I;16", "I;16"), + ( + II, + 1, + (1, 1, 1, 1, 1), + 1, + (16, 16, 16, 16, 16), + ( + 0, + 0, + 0, + 0, + ), + ): ("I;16", "I;16"), (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), (II, 1, (1,), 2, (16,), ()): ("I;16", "I;16R"), (II, 1, (2,), 1, (16,), ()): ("I", "I;16S"), @@ -1379,13 +1417,7 @@ class TiffImageFile(ImageFile.ImageFile): logger.debug("- size: %s", self.size) sample_format = self.tag_v2.get(SAMPLEFORMAT, (1,)) - if len(sample_format) > 1 and max(sample_format) == min(sample_format) == 1: - # SAMPLEFORMAT is properly per band, so an RGB image will - # be (1,1,1). But, we don't support per band pixel types, - # and anything more than one band is a uint8. So, just - # take the first element. Revisit this if adding support - # for more exotic images. - sample_format = (1,) + logger.debug("- sample_format: %s", sample_format) bps_tuple = self.tag_v2.get(BITSPERSAMPLE, (1,)) extra_tuple = self.tag_v2.get(EXTRASAMPLES, ()) diff --git a/src/_imaging.c b/src/_imaging.c index caf02029d..ded88c2f2 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -94,8 +94,8 @@ #include /* Configuration stuff. Feel free to undef things you don't need. */ -#define WITH_IMAGECHOPS /* ImageChops support */ -#define WITH_IMAGEDRAW /* ImageDraw support */ +#define WITH_IMAGECHOPS /* ImageChops support */ +#define WITH_IMAGEDRAW /* ImageDraw support */ // XXX hack202406 disable unmodified code path // #define WITH_MAPPING /* use memory mapping to read some file formats */ #define WITH_IMAGEPATH /* ImagePath stuff */