Skip to content

Commit 8b0244a

Browse files
authored
Merge pull request #5540 from radarhere/numresolution
2 parents 384a4bf + bd298b1 commit 8b0244a

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

Tests/test_file_jpeg2k.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ def test_prog_res_rt():
127127
assert_image_equal(im, test_card)
128128

129129

130+
def test_default_num_resolutions():
131+
for num_resolutions in range(2, 6):
132+
d = 1 << (num_resolutions - 1)
133+
im = test_card.resize((d - 1, d - 1))
134+
with pytest.raises(OSError):
135+
roundtrip(im, num_resolutions=num_resolutions)
136+
reloaded = roundtrip(im)
137+
assert_image_equal(im, reloaded)
138+
139+
130140
def test_reduce():
131141
with Image.open("Tests/images/test-card-lossless.jp2") as im:
132142
assert callable(im.reduce)

Tests/test_imagefile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,4 @@ def test_no_format(self):
248248
def test_oserror(self):
249249
im = Image.new("RGB", (1, 1))
250250
with pytest.raises(OSError):
251-
im.save(BytesIO(), "JPEG2000")
251+
im.save(BytesIO(), "JPEG2000", num_resolutions=2)

src/libImaging/Jpeg2KEncode.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,12 @@ j2k_encode_entry(Imaging im, ImagingCodecState state) {
458458
break;
459459
}
460460

461+
if (!context->num_resolutions) {
462+
while (tile_width < (1 << (params.numresolution - 1U)) || tile_height < (1 << (params.numresolution - 1U))) {
463+
params.numresolution -= 1;
464+
}
465+
}
466+
461467
if (context->cinema_mode != OPJ_OFF) {
462468
j2k_set_cinema_params(im, components, &params);
463469
}

0 commit comments

Comments
 (0)