Skip to content

Commit e0b1b38

Browse files
authored
Merge pull request #7900 from scaramallion/dev-j2k-precision
Use I;16 mode for 9-bit JPEG 2000 images
2 parents 5e448b3 + 144959b commit e0b1b38

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

Tests/images/9bit.j2k

9.19 KB
Binary file not shown.

Tests/test_file_jpeg2k.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,3 +446,9 @@ def test_plt_marker() -> None:
446446
hdr = out.read(2)
447447
length = _binary.i16be(hdr)
448448
out.seek(length - 2, os.SEEK_CUR)
449+
450+
451+
def test_9bit():
452+
with Image.open("Tests/images/9bit.j2k") as im:
453+
assert im.mode == "I;16"
454+
assert im.size == (128, 128)

src/PIL/Jpeg2KImagePlugin.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,11 @@ def _parse_codestream(fp):
106106
lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from(
107107
">HHIIIIIIIIH", siz
108108
)
109-
ssiz = [None] * csiz
110-
xrsiz = [None] * csiz
111-
yrsiz = [None] * csiz
112-
for i in range(csiz):
113-
ssiz[i], xrsiz[i], yrsiz[i] = struct.unpack_from(">BBB", siz, 36 + 3 * i)
114109

115110
size = (xsiz - xosiz, ysiz - yosiz)
116111
if csiz == 1:
117-
if (yrsiz[0] & 0x7F) > 8:
112+
ssiz = struct.unpack_from(">B", siz, 38)
113+
if (ssiz[0] & 0x7F) + 1 > 8:
118114
mode = "I;16"
119115
else:
120116
mode = "L"

0 commit comments

Comments
 (0)