Skip to content

Commit 93a6e96

Browse files
committed
Renamed Jpeg2K variable to prevent masking Image reduce method
1 parent ef4a0b2 commit 93a6e96

3 files changed

Lines changed: 21 additions & 9 deletions

File tree

Tests/test_file_jpeg2k.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,11 @@ def test_prog_res_rt(self):
110110
self.assert_image_equal(im, test_card)
111111

112112
def test_reduce(self):
113-
with Image.open("Tests/images/test-card-lossless.jp2") as im:
114-
im.reduce = 2
115-
im.load()
116-
self.assertEqual(im.size, (160, 120))
113+
for var in ["reduce", "load_reduce"]:
114+
with Image.open("Tests/images/test-card-lossless.jp2") as im:
115+
setattr(im, var, 2)
116+
im.load()
117+
self.assertEqual(im.size, (160, 120))
117118

118119
def test_layers_type(self):
119120
outfile = self.tempfile("temp_layers.jp2")

Tests/test_image_reduce.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
import unittest
2+
13
from PIL import Image, ImageMath, ImageMode
24

35
from .helper import PillowTestCase, convert_to_comparable
46

7+
codecs = dir(Image.core)
8+
HAVE_JPEG2000 = "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs
9+
510

611
class TestImageReduce(PillowTestCase):
712
# There are several internal implementations
@@ -242,3 +247,8 @@ def test_mode_F(self):
242247
for factor in self.remarkable_factors:
243248
self.compare_reduce_with_reference(im, factor, 0, 0)
244249
self.compare_reduce_with_box(im, factor)
250+
251+
@unittest.skipUnless(HAVE_JPEG2000, "JPEG 2000 support not available")
252+
def test_jpeg2k(self):
253+
with Image.open("Tests/images/test-card-lossless.jp2") as im:
254+
self.assertEqual(im.reduce(2).size, (320, 240))

src/PIL/Jpeg2KImagePlugin.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def _open(self):
176176
if self.size is None or self.mode is None:
177177
raise SyntaxError("unable to determine size/mode")
178178

179-
self.reduce = 0
179+
self.load_reduce = 0
180180
self.layers = 0
181181

182182
fd = -1
@@ -200,13 +200,14 @@ def _open(self):
200200
"jpeg2k",
201201
(0, 0) + self.size,
202202
0,
203-
(self.codec, self.reduce, self.layers, fd, length),
203+
(self.codec, self.load_reduce, self.layers, fd, length),
204204
)
205205
]
206206

207207
def load(self):
208-
if self.reduce:
209-
power = 1 << self.reduce
208+
reduce = self.reduce if not callable(self.reduce) else self.load_reduce
209+
if reduce:
210+
power = 1 << reduce
210211
adjust = power >> 1
211212
self._size = (
212213
int((self.size[0] + adjust) / power),
@@ -216,7 +217,7 @@ def load(self):
216217
if self.tile:
217218
# Update the reduce and layers settings
218219
t = self.tile[0]
219-
t3 = (t[3][0], self.reduce, self.layers, t[3][3], t[3][4])
220+
t3 = (t[3][0], reduce, self.layers, t[3][3], t[3][4])
220221
self.tile = [(t[0], (0, 0) + self.size, t[2], t3)]
221222

222223
return ImageFile.ImageFile.load(self)

0 commit comments

Comments
 (0)