diff --git a/src/c3nav/mapdata/render/__init__.py b/src/c3nav/mapdata/render/__init__.py index 367957b3..b0ddfe68 100644 --- a/src/c3nav/mapdata/render/__init__.py +++ b/src/c3nav/mapdata/render/__init__.py @@ -1,5 +1,5 @@ from c3nav.mapdata.models import Level -from c3nav.mapdata.render.renderer import LevelRenderer, get_render_path # noqa +from c3nav.mapdata.render.renderer import LevelRenderer # noqa def render_all_levels(show_accessibles=False): diff --git a/src/c3nav/mapdata/render/compose.py b/src/c3nav/mapdata/render/compose.py new file mode 100644 index 00000000..59cb6ae4 --- /dev/null +++ b/src/c3nav/mapdata/render/compose.py @@ -0,0 +1,11 @@ +from django.http import HttpResponse +from PIL import Image + +from c3nav.mapdata.render.utils import get_render_path + + +def get_level_image(request, level): + im = Image.open(get_render_path('png', level.name, 'full', True)) + response = HttpResponse(content_type="image/png") + im.save(response, 'PNG') + return response diff --git a/src/c3nav/mapdata/render/renderer.py b/src/c3nav/mapdata/render/renderer.py index 8e2e0486..5e6d5c24 100644 --- a/src/c3nav/mapdata/render/renderer.py +++ b/src/c3nav/mapdata/render/renderer.py @@ -1,25 +1,11 @@ -import os import subprocess import xml.etree.ElementTree as ET from django.conf import settings -from django.db.models import Max, Min from shapely.affinity import scale from shapely.geometry import JOIN_STYLE, box -from c3nav.mapdata.models import Package - - -def get_render_path(filename): - return os.path.join(settings.RENDER_ROOT, filename) - - -def get_dimensions(): - aggregate = Package.objects.all().aggregate(Max('right'), Min('left'), Max('top'), Min('bottom')) - return ( - float(aggregate['right__max'] - aggregate['left__min']), - float(aggregate['top__max'] - aggregate['bottom__min']), - ) +from c3nav.mapdata.render.utils import get_dimensions, get_render_path class LevelRenderer(): @@ -33,8 +19,7 @@ class LevelRenderer(): return level.public_geometries if self.only_public else level.geometries def get_filename(self, mode, filetype, level=None): - return get_render_path('%s%s-level-%s.%s' % (('public-' if self.only_public else ''), mode, - (self.level.name if level is None else level), filetype)) + return get_render_path(filetype, self.level.name if level is None else level, mode, self.only_public) @staticmethod def get_dimensions(): diff --git a/src/c3nav/mapdata/render/utils.py b/src/c3nav/mapdata/render/utils.py new file mode 100644 index 00000000..7b3f84ed --- /dev/null +++ b/src/c3nav/mapdata/render/utils.py @@ -0,0 +1,19 @@ +import os + +from django.conf import settings +from django.db.models import Max, Min + +from c3nav.mapdata.models import Package + + +def get_dimensions(): + aggregate = Package.objects.all().aggregate(Max('right'), Min('left'), Max('top'), Min('bottom')) + return ( + float(aggregate['right__max'] - aggregate['left__min']), + float(aggregate['top__max'] - aggregate['bottom__min']), + ) + + +def get_render_path(filetype, level, mode, public): + return os.path.join(settings.RENDER_ROOT, + '%s%s-level-%s.%s' % (('public-' if public else ''), mode, level, filetype))