@@ -322,6 +322,25 @@ def get_algebra(self, data, formula):
322322 # Return rendered image
323323 return self .write_img_to_response (img , stats )
324324
325+ def get_rgb_scale (self ):
326+ if 'scale' not in self .request .GET :
327+ return
328+
329+ # The scale is either a number or two numbers separated by comma.
330+ scale = self .request .GET .get ('scale' ).split (',' )
331+ if len (scale ) == 1 :
332+ scale_min = 0
333+ scale_max = float (scale [0 ])
334+ else :
335+ # Get min an max scale from
336+ scale_min = float (scale [0 ])
337+ scale_max = float (scale [1 ])
338+
339+ return scale_min , scale_max
340+
341+ def get_alpha (self ):
342+ return 'alpha' in self .request .GET
343+
325344 def get_rgb (self , data ):
326345 # Get data arrays from tiles, by band if requested.
327346 for key , tile in data .items ():
@@ -374,33 +393,24 @@ def get_rgb(self, data):
374393 return HttpResponse (result .vsi_buffer , content_type )
375394
376395 # Get scale for the image value range.
377- if 'scale' in self .request .GET :
378- # The scale is either a number or two numbers separated by comma.
379- scale = self .request .GET .get ('scale' ).split (',' )
380- if len (scale ) == 1 :
381- scale_min = 0
382- scale_max = float (scale [0 ])
383- else :
384- # Get min an max scale from
385- scale_min = float (scale [0 ])
386- scale_max = float (scale [1 ])
387-
388- # Clip the image minimum.
389- red [red < scale_min ] = scale_min
390- green [green < scale_min ] = scale_min
391- blue [blue < scale_min ] = scale_min
396+ scale = self .get_rgb_scale ()
397+ if scale is not None :
398+ # Clip the image minimum.
399+ red [red < scale [0 ]] = scale [0 ]
400+ green [green < scale [0 ]] = scale [0 ]
401+ blue [blue < scale [0 ]] = scale [0 ]
392402
393403 # Clip the image maximum.
394- red [red > scale_max ] = scale_max
395- green [green > scale_max ] = scale_max
396- blue [blue > scale_max ] = scale_max
404+ red [red > scale [ 1 ]] = scale [ 1 ]
405+ green [green > scale [ 1 ]] = scale [ 1 ]
406+ blue [blue > scale [ 1 ]] = scale [ 1 ]
397407
398408 # Scale the image.
399- red = 255 * (red - scale_min ) / scale_max
400- green = 255 * (green - scale_min ) / scale_max
401- blue = 255 * (blue - scale_min ) / scale_max
409+ red = 255 * (red - scale [ 0 ] ) / scale [ 1 ]
410+ green = 255 * (green - scale [ 0 ] ) / scale [ 1 ]
411+ blue = 255 * (blue - scale [ 0 ] ) / scale [ 1 ]
402412
403- if 'alpha' in self .request . GET :
413+ if self .get_alpha () :
404414 mode = 'RGBA'
405415 reshape = 4
406416 # Create the alpha channel.
0 commit comments