@@ -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