Add thumbnail generation support

remotes/origin/HEAD
Gyrfalcon 2016-05-13 18:02:45 -05:00
parent 8e99f4baff
commit 04b7e0cb9b
3 changed files with 38 additions and 2 deletions

View File

@ -1,11 +1,12 @@
from milla.dispatch import routing from milla.dispatch import routing
from . import gallery from . import gallery, thumbnails
import os import os
import milla.util import milla.util
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
'gallery.screenshot_dir': 'screenshots', 'gallery.screenshot_dir': 'screenshots',
'gallery.thumbnail_dir': 'thumbnails',
} }
@ -28,3 +29,4 @@ class Application(milla.Application):
self.dispatcher = r = routing.Router() self.dispatcher = r = routing.Router()
r.add_route('/', gallery.GalleryController()) r.add_route('/', gallery.GalleryController())
r.add_route('/thumbnails/{image}', thumbnails.ThumbnailController())

View File

@ -18,7 +18,7 @@
{% for image in images %} {% for image in images %}
<div class="column"> <div class="column">
<a href="{{ static('screenshots/' + image) }}"> <a href="{{ static('screenshots/' + image) }}">
<img src="{{ static('screenshots/' + image) }}" <img class="thumbnail" src="{{ url('/thumbnails/' + image) }}"
alt="{{ image.rsplit('.', 1)[0] }}" /> alt="{{ image.rsplit('.', 1)[0] }}" />
</a> </a>
</div> </div>

34
src/dcow/thumbnails.py Normal file
View File

@ -0,0 +1,34 @@
from PIL import Image, ImageOps
from milla import controllers
import milla
import os
import webob.static
class ThumbnailController(milla.controllers.HTTPVerbController):
CROP_SIZE = (1920, 1080)
THUMB_SIZE = (262, 148)
def GET(self, request, image):
thumb_dir = request.config['gallery.thumbnail_dir']
image_dir = request.config['gallery.screenshot_dir']
screenshot = os.path.join(image_dir, image)
thumbnail = os.path.join(thumb_dir, image)
try:
s_st = os.stat(screenshot)
except OSError:
raise milla.HTTPNotFound
try:
t_st = os.stat(thumbnail)
except OSError:
t_st = None
if not t_st or t_st.st_mtime < s_st.st_mtime:
self.generate_thumbnail(screenshot, thumbnail)
return webob.static.FileApp(thumbnail)
def generate_thumbnail(self, screenshot, thumbnail):
image = Image.open(screenshot)
thumb = ImageOps.fit(image, self.CROP_SIZE)
thumb.thumbnail(self.THUMB_SIZE)
thumb.save(thumbnail)