Add thumbnail generation support
parent
8e99f4baff
commit
04b7e0cb9b
|
@ -1,11 +1,12 @@
|
|||
from milla.dispatch import routing
|
||||
from . import gallery
|
||||
from . import gallery, thumbnails
|
||||
import os
|
||||
import milla.util
|
||||
|
||||
|
||||
DEFAULT_CONFIG = {
|
||||
'gallery.screenshot_dir': 'screenshots',
|
||||
'gallery.thumbnail_dir': 'thumbnails',
|
||||
}
|
||||
|
||||
|
||||
|
@ -28,3 +29,4 @@ class Application(milla.Application):
|
|||
self.dispatcher = r = routing.Router()
|
||||
|
||||
r.add_route('/', gallery.GalleryController())
|
||||
r.add_route('/thumbnails/{image}', thumbnails.ThumbnailController())
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
{% for image in images %}
|
||||
<div class="column">
|
||||
<a href="{{ static('screenshots/' + image) }}">
|
||||
<img src="{{ static('screenshots/' + image) }}"
|
||||
<img class="thumbnail" src="{{ url('/thumbnails/' + image) }}"
|
||||
alt="{{ image.rsplit('.', 1)[0] }}" />
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue