Skip to content

Commit

Permalink
Add image renderers
Browse files Browse the repository at this point in the history
  • Loading branch information
banesullivan committed Jun 15, 2022
1 parent 3bb449e commit e39d46c
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 6 deletions.
25 changes: 21 additions & 4 deletions django_large_image/rest/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from django_large_image import tilesource, utilities
from django_large_image.rest import params
from django_large_image.rest.base import CACHE_TIMEOUT, LargeImageMixinBase
from django_large_image.rest.renderers import image_data_renderers, image_renderers

thumbnail_summary = 'Returns thumbnail of full image.'
thumbnail_parameters = params.BASE + params.THUMBNAIL + params.STYLE
Expand All @@ -28,7 +29,11 @@ class DataMixin(LargeImageMixinBase):
operation_summary=thumbnail_summary,
manual_parameters=thumbnail_parameters,
)
@action(detail=False, url_path=r'data/thumbnail.(?P<fmt>png|jpg|jpeg)')
@action(
detail=False,
url_path=r'data/thumbnail.(?P<fmt>png|jpg|jpeg)',
renderer_classes=image_renderers,
)
def thumbnail(self, request: Request, pk: int = None, fmt: str = 'png') -> HttpResponse:
encoding = tilesource.format_to_encoding(fmt)
width = int(self.get_query_param(request, 'max_width', 256))
Expand All @@ -42,7 +47,11 @@ def thumbnail(self, request: Request, pk: int = None, fmt: str = 'png') -> HttpR
operation_summary=region_summary,
manual_parameters=region_parameters + params.STYLE,
)
@action(detail=False, url_path=r'data/region.(?P<fmt>png|jpg|jpeg|tif|tiff)')
@action(
detail=False,
url_path=r'data/region.(?P<fmt>png|jpg|jpeg|tif|tiff)',
renderer_classes=image_data_renderers,
)
def region(self, request: Request, pk: int = None, fmt: str = 'tiff') -> HttpResponse:
"""Return the region tile binary from world coordinates in given EPSG.
Expand Down Expand Up @@ -125,7 +134,11 @@ class DataDetailMixin(DataMixin):
operation_summary=thumbnail_summary,
manual_parameters=thumbnail_parameters,
)
@action(detail=True, url_path=r'data/thumbnail.(?P<fmt>png|jpg|jpeg)')
@action(
detail=True,
url_path=r'data/thumbnail.(?P<fmt>png|jpg|jpeg)',
renderer_classes=image_renderers,
)
def thumbnail(self, request: Request, pk: int = None, fmt: str = 'png') -> HttpResponse:
return super().thumbnail(request, pk, fmt)

Expand All @@ -134,7 +147,11 @@ def thumbnail(self, request: Request, pk: int = None, fmt: str = 'png') -> HttpR
operation_summary=region_summary,
manual_parameters=region_parameters + params.STYLE,
)
@action(detail=True, url_path=r'data/region.(?P<fmt>png|jpg|jpeg|tif|tiff)')
@action(
detail=True,
url_path=r'data/region.(?P<fmt>png|jpg|jpeg|tif|tiff)',
renderer_classes=image_data_renderers,
)
def region(self, request: Request, pk: int = None, fmt: str = 'tiff') -> HttpResponse:
return super().region(request, pk, fmt)

Expand Down
40 changes: 40 additions & 0 deletions django_large_image/rest/renderers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from rest_framework.renderers import BaseRenderer as RFBaseRenderer


class BaseRenderer(RFBaseRenderer):
render_style = 'binary'
charset = None

def render(self, data, media_type=None, renderer_context=None):
return data


class PNGRenderer(BaseRenderer):
media_type = 'image/png'
format = 'png'


class JPEGRenderer(BaseRenderer):
media_type = 'image/jpeg'
format = 'jpeg'


class JPGRenderer(BaseRenderer):
media_type = 'image/jpeg'
format = 'jpg'


image_renderers = [PNGRenderer, JPEGRenderer, JPGRenderer]


class TifRenderer(BaseRenderer):
media_type = 'image/tiff'
format = 'tif'


class TiffRenderer(BaseRenderer):
media_type = 'image/tiff'
format = 'tiff'


image_data_renderers = image_renderers + [TifRenderer, TiffRenderer]
13 changes: 11 additions & 2 deletions django_large_image/rest/tiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from django_large_image import tilesource
from django_large_image.rest import params
from django_large_image.rest.base import CACHE_TIMEOUT, LargeImageMixinBase
from django_large_image.rest.renderers import image_renderers
from django_large_image.rest.serializers import TileMetadataSerializer

tile_metadata_summary = 'Returns tile metadata.'
Expand Down Expand Up @@ -40,7 +41,11 @@ def tiles_metadata(self, request: Request, pk: int = None) -> Response:
operation_summary=tile_summary,
manual_parameters=tile_parameters,
)
@action(detail=False, url_path=r'tiles/(?P<z>\d+)/(?P<x>\d+)/(?P<y>\d+).(?P<fmt>png|jpg|jpeg)')
@action(
detail=False,
url_path=r'tiles/(?P<z>\d+)/(?P<x>\d+)/(?P<y>\d+).(?P<fmt>png|jpg|jpeg)',
renderer_classes=image_renderers,
)
def tile(
self, request: Request, x: int, y: int, z: int, pk: int = None, fmt: str = 'png'
) -> HttpResponse:
Expand Down Expand Up @@ -91,7 +96,11 @@ def tiles_metadata(self, request: Request, pk: int = None) -> Response:
operation_summary=tile_summary,
manual_parameters=tile_parameters,
)
@action(detail=True, url_path=r'tiles/(?P<z>\d+)/(?P<x>\d+)/(?P<y>\d+).(?P<fmt>png|jpg|jpeg)')
@action(
detail=True,
url_path=r'tiles/(?P<z>\d+)/(?P<x>\d+)/(?P<y>\d+).(?P<fmt>png|jpg|jpeg)',
renderer_classes=image_renderers,
)
def tile(
self, request: Request, x: int, y: int, z: int, pk: int = None, fmt: str = 'png'
) -> HttpResponse:
Expand Down

0 comments on commit e39d46c

Please sign in to comment.