Merge pull request #6041 from mikhail-iurkov/tiff_bits

Drop excess values in BITSPERSAMPLE
This commit is contained in:
Hugo van Kemenade 2022-02-10 09:32:34 +02:00 committed by GitHub
commit 6520d44496
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 7 deletions

Binary file not shown.

View File

@ -90,11 +90,18 @@ class TestFileTiff:
assert_image_similar_tofile(im, "Tests/images/pil136.png", 1)
def test_wrong_bits_per_sample(self):
with Image.open("Tests/images/tiff_wrong_bits_per_sample.tiff") as im:
assert im.mode == "RGBA"
assert im.size == (52, 53)
assert im.tile == [("raw", (0, 0, 52, 53), 160, ("RGBA", 0, 1))]
@pytest.mark.parametrize(
"file_name,mode,w,h,offset",
[
("tiff_wrong_bits_per_sample.tiff", "RGBA", 52, 53, 160),
("tiff_wrong_bits_per_sample_2.tiff", "RGB", 16, 16, 8),
],
)
def test_wrong_bits_per_sample(self, file_name, mode, w, h, offset):
with Image.open("Tests/images/" + file_name) as im:
assert im.mode == mode
assert im.size == (w, h)
assert im.tile == [("raw", (0, 0, w, h), offset, (mode, 0, 1))]
im.load()
def test_set_legacy_api(self):

View File

@ -1309,8 +1309,12 @@ class TiffImageFile(ImageFile.ImageFile):
bps_count = 1
bps_count += len(extra_tuple)
# Some files have only one value in bps_tuple,
# while should have more. Fix it
if bps_count > len(bps_tuple) and len(bps_tuple) == 1:
# while should have more. Or have more values
# than expected. Fix it
bps_actual_count = len(bps_tuple)
if bps_count < bps_actual_count:
bps_tuple = bps_tuple[:bps_count]
elif bps_count > bps_actual_count and bps_actual_count == 1:
bps_tuple = bps_tuple * bps_count
samplesPerPixel = self.tag_v2.get(