Example #1
0
    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))])
Example #2
0
    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))])
Example #3
0
    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))])
Example #4
0
    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)
Example #5
0
 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))])
Example #6
0
    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))])
Example #7
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))])
Example #8
0
    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))])
Example #9
0
    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))])
Example #10
0
    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))])
Example #11
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
        assert_img_colors_eq(result.as_image().getcolors(),
            [(10000-400, (255, 255, 255, 0)), (400, (100, 0, 200, 255))])
Example #12
0
    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))])
Example #13
0
    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)
Example #14
0
    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)
Example #15
0
 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))])