server level files directly, don't try to render them on the fly
This commit is contained in:
parent
b669e75af1
commit
cf6b850de6
1 changed files with 8 additions and 32 deletions
|
@ -1,46 +1,22 @@
|
||||||
import os
|
import mimetypes
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.files import File
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from PIL import Image
|
|
||||||
|
|
||||||
from c3nav.mapdata.utils.misc import get_render_path
|
from c3nav.mapdata.utils.misc import get_render_path
|
||||||
|
|
||||||
|
|
||||||
class LevelComposer:
|
class LevelComposer:
|
||||||
images = {}
|
|
||||||
images_mtimes = {}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _get_image(cls, filename, cached=True):
|
|
||||||
mtime = None
|
|
||||||
if cached:
|
|
||||||
mtime = os.path.getmtime(filename)
|
|
||||||
if filename in cls.images:
|
|
||||||
if cls.images_mtimes[filename] == mtime:
|
|
||||||
return cls.images[filename]
|
|
||||||
|
|
||||||
img = Image.open(filename)
|
|
||||||
|
|
||||||
if cached:
|
|
||||||
cls.images[filename] = img
|
|
||||||
cls.images_mtimes[filename] = mtime
|
|
||||||
|
|
||||||
return img
|
|
||||||
|
|
||||||
def _get_public_level_image(self, level):
|
|
||||||
return self._get_image(get_render_path('png', level.name, 'full', True))
|
|
||||||
|
|
||||||
def _get_complete_level_image(self, level):
|
|
||||||
return self._get_image(get_render_path('png', level.name, 'full', False))
|
|
||||||
|
|
||||||
def get_level_image(self, request, level):
|
def get_level_image(self, request, level):
|
||||||
if settings.DIRECT_EDITING:
|
if settings.DIRECT_EDITING:
|
||||||
img = self._get_complete_level_image(level)
|
img = get_render_path('png', level.name, 'full', True)
|
||||||
else:
|
else:
|
||||||
img = self._get_public_level_image(level)
|
img = get_render_path('png', level.name, 'full', False)
|
||||||
response = HttpResponse(content_type="image/png")
|
|
||||||
img.save(response, 'PNG')
|
response = HttpResponse(content_type=mimetypes.guess_type(img)[0])
|
||||||
|
for chunk in File(open(img, 'rb')).chunks():
|
||||||
|
response.write(chunk)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue