def test_mask_partial_image_transparent(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([5, 5, 30, 30])) assert_img_colors_eq(result.as_image().getcolors(), [(7500, (255, 255, 255, 0)), (2500, (100, 0, 200, 255))])
def test_mask_outside_of_image_bgcolor(self): img = ImageSource( Image.new("RGB", (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(bgcolor=(200, 30, 120)) ) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([20, 20, 30, 30])) eq_(result.as_image().getcolors(), [((100 * 100), (200, 30, 120))])
def test_mask_partial_image_bgcolor(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(bgcolor=(200, 30, 120))) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([5, 5, 30, 30])) eq_(result.as_image().getcolors(), [(7500, (200, 30, 120)), (2500, (100, 0, 200))])
def render(self, tile_request, use_profiles=False, coverage=None, decorate_img=None): if tile_request.format != self.format: raise RequestError( 'invalid format (%s). this tile set only supports (%s)' % (tile_request.format, self.format), request=tile_request, code='InvalidParameterValue') tile_coord = self._internal_tile_coord(tile_request, use_profiles=use_profiles) coverage_intersects = False if coverage: tile_bbox = self.grid.tile_bbox(tile_coord) if coverage.contains(tile_bbox, self.grid.srs): pass elif coverage.intersects(tile_bbox, self.grid.srs): coverage_intersects = True else: return self.empty_response() dimensions = self.checked_dimensions(tile_request) try: with self.tile_manager.session(): tile = self.tile_manager.load_tile_coord(tile_coord, dimensions=dimensions, with_metadata=True) if tile.source is None: return self.empty_response() # Provide the wrapping WSGI app or filter the opportunity to process the # image before it's wrapped up in a response if decorate_img: tile.source = decorate_img(tile.source) if coverage_intersects: if self.empty_response_as_png: format = 'png' image_opts = ImageOptions(transparent=True, format='png') else: format = self.format image_opts = tile.source.image_opts tile.source = mask_image_source_from_coverage( tile.source, tile_bbox, self.grid.srs, coverage, image_opts) return TileResponse(tile, format=format, image_opts=image_opts) format = None if self._mixed_format else tile_request.format return TileResponse(tile, format=format, image_opts=self.tile_manager.image_opts) except SourceError as e: raise RequestError(e.args[0], request=tile_request, internal=True)
def test_mask_outside_of_image_transparent(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([20, 20, 30, 30])) eq_(result.as_image().getcolors(), [((100 * 100), (255, 255, 255, 0))])
def test_shapely_mask_with_transform_partial_image_transparent(self): img = ImageSource(Image.new("RGB", (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) p = Polygon([(0, 0), (222000, 0), (222000, 222000), (0, 222000)]) # ~ 2x2 degres result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage(p, "EPSG:3857")) # 20*20 = 400 eq_(result.as_image().getcolors(), [(10000 - 400, (255, 255, 255, 0)), (400, (100, 0, 200, 255))])
def test_mask_outside_of_image_bgcolor(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(bgcolor=(200, 30, 120))) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([20, 20, 30, 30])) assert_img_colors_eq(result.as_image().getcolors(), [((100 * 100), (200, 30, 120))])
def test_wkt_mask_partial_image_transparent(self): img = ImageSource(Image.new("RGB", (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) # polygon with hole geom = "POLYGON((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4))" result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage(geom)) # 60*61 - 20*21 = 3240 eq_(result.as_image().getcolors(), [(10000 - 3240, (255, 255, 255, 0)), (3240, (100, 0, 200, 255))])
def test_shapely_mask_with_transform_partial_image_transparent(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) p = Polygon([(0, 0), (222000, 0), (222000, 222000), (0, 222000)]) # ~ 2x2 degres result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage(p, 'EPSG:3857')) # 20*20 = 400 assert_img_colors_eq(result.as_image().getcolors(), [(10000-400, (255, 255, 255, 0)), (400, (100, 0, 200, 255))])
def test_wkt_mask_partial_image_transparent(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) # polygon with hole geom = 'POLYGON((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4))' result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage(geom)) # 60*60 - 20*20 = 3200 assert_img_colors_eq(result.as_image().getcolors(), [(10000-3200, (255, 255, 255, 0)), (3200, (100, 0, 200, 255))])
def render(self, tile_request, use_profiles=False, coverage=None, decorate_img=None): if tile_request.format != self.format: raise RequestError('invalid format (%s). this tile set only supports (%s)' % (tile_request.format, self.format), request=tile_request, code='InvalidParameterValue') tile_coord = self._internal_tile_coord(tile_request, use_profiles=use_profiles) coverage_intersects = False if coverage: tile_bbox = self.grid.tile_bbox(tile_coord) if coverage.contains(tile_bbox, self.grid.srs): pass elif coverage.intersects(tile_bbox, self.grid.srs): coverage_intersects = True else: return self.empty_response() dimensions = self.checked_dimensions(tile_request) try: with self.tile_manager.session(): tile = self.tile_manager.load_tile_coord(tile_coord, dimensions=dimensions, with_metadata=True) if tile.source is None: return self.empty_response() # Provide the wrapping WSGI app or filter the opportunity to process the # image before it's wrapped up in a response if decorate_img: tile.source = decorate_img(tile.source) if coverage_intersects: if self.empty_response_as_png: format = 'png' image_opts = ImageOptions(transparent=True, format='png') else: format = self.format image_opts = tile.source.image_opts tile.source = mask_image_source_from_coverage( tile.source, tile_bbox, self.grid.srs, coverage, image_opts) return TileResponse(tile, format=format, image_opts=image_opts) format = None if self._mixed_format else tile_request.format return TileResponse(tile, format=format, image_opts=self.tile_manager.image_opts) except SourceError as e: raise RequestError(e.args[0], request=tile_request, internal=True)
def render(self, tile_request, use_profiles=False, coverage=None): if tile_request.format != self.format: raise RequestError('invalid format (%s). this tile set only supports (%s)' % (tile_request.format, self.format), request=tile_request, code='InvalidParameterValue') tile_coord = self._internal_tile_coord(tile_request, use_profiles=use_profiles) coverage_intersects = False if coverage: tile_bbox = self.grid.tile_bbox(tile_coord) if coverage.contains(tile_bbox, self.grid.srs): pass elif coverage.intersects(tile_bbox, self.grid.srs): coverage_intersects = True else: return self.empty_response() try: with self.tile_manager.session(): tile = self.tile_manager.load_tile_coord(tile_coord, with_metadata=True) if tile.source is None: return self.empty_response() if coverage_intersects: if self.empty_response_as_png: format = 'png' image_opts = ImageOptions(transparent=True, format='png') else: format = self.format image_opts = tile.source.image_opts tile.source = mask_image_source_from_coverage( tile.source, tile_bbox, self.grid.srs, coverage, image_opts) return TileResponse(tile, format=format, image_opts=image_opts) format = None if self._mixed_format else tile_request.format return TileResponse(tile, format=format, image_opts=self.tile_manager.image_opts) except SourceError, e: raise RequestError(e.args[0], request=tile_request, internal=True)
def test_mask_outside_of_image_transparent(self): img = ImageSource(Image.new('RGB', (100, 100), color=(100, 0, 200)), image_opts=ImageOptions(transparent=True)) result = mask_image_source_from_coverage(img, [0, 0, 10, 10], SRS(4326), coverage([20, 20, 30, 30])) eq_(result.as_image().getcolors(), [((100*100), (255, 255, 255, 0))])