From 900da9d42fe24030d5c63711cf06e5ce6355102a Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 26 Aug 2012 00:23:43 +0200 Subject: [PATCH] add a `make_thumbs` setting to allow not generating thumbnails as they are not needed for the galleria theme. + always generate thumbnail for the representative image + bugfixes for the boolean settings --- sigal/generator.py | 25 ++++++++++++++++++------- sigal/image.py | 41 +++++++++++++++++++---------------------- sigal/settings.py | 12 +++++++++--- tests/sample/sigal.conf | 4 ++++ 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/sigal/generator.py b/sigal/generator.py index 64acf4c..7d479aa 100644 --- a/sigal/generator.py +++ b/sigal/generator.py @@ -28,11 +28,12 @@ Generate html pages for each directory of images import os import codecs import markdown +import PIL -from PIL import Image from distutils.dir_util import copy_tree from fnmatch import fnmatch from jinja2 import Environment, PackageLoader +from sigal.image import Image DEFAULT_THEME = "default" INDEX_PAGE = "index.html" @@ -73,8 +74,10 @@ class Generator(): def directory_list(self): "get the list of directories with files of particular extensions" - ignored = ['theme', self.settings['thumb_dir'], - self.settings['bigimg_dir']] + + ignored = ['theme', self.settings['bigimg_dir']] + if self.settings['thumb_dir']: + ignored.append(self.settings['thumb_dir']) for dirpath, dirnames, filenames in os.walk(self.path): dirpath = os.path.normpath(dirpath) @@ -104,7 +107,7 @@ class Generator(): for f in files: # find and return the first landscape image - im = Image.open(os.path.join(path, f)) + im = PIL.Image.open(os.path.join(path, f)) if im.size[0] > im.size[1]: return f @@ -163,12 +166,20 @@ class Generator(): not os.path.isfile(os.path.join(dpath, alb_thumb)): alb_thumb = self.find_representative(dpath) + thumb_name = os.path.join(self.settings['thumb_dir'], + self.settings['thumb_prefix'] + alb_thumb) + thumb_path = os.path.join(dpath, thumb_name) + + if not os.path.exists(thumb_path): + img = Image(os.path.join(dpath, alb_thumb)) + img.thumbnail(thumb_path, self.settings['thumb_size'], + fit=self.settings['thumb_fit'], + quality=self.settings['jpg_quality']) + album = { 'path': os.path.join(d, INDEX_PAGE), 'title': self.data[dpath]['title'], - 'thumb': os.path.join(d, self.settings['thumb_dir'], - self.settings['thumb_prefix'] + - alb_thumb), + 'thumb': os.path.join(d, thumb_name) } self.ctx['albums'].append(album) diff --git a/sigal/image.py b/sigal/image.py index dcee5c0..1fd42b8 100644 --- a/sigal/image.py +++ b/sigal/image.py @@ -129,34 +129,28 @@ class Gallery: copy2(descfile, img_dir) if len(imglist) != 0: - thumb_dir = os.path.join(img_dir, self.settings['thumb_dir']) - if not os.path.isdir(thumb_dir): - os.mkdir(thumb_dir) + self.process_dir(imglist, img_dir) - bigimg_dir = '' - if self.settings['big_img']: - bigimg_dir = os.path.join(img_dir, - self.settings['bigimg_dir']) - if not os.path.isdir(bigimg_dir): - os.mkdir(bigimg_dir) - - self.process_dir(imglist, img_dir, thumb_dir, - bigimg_dir=bigimg_dir) - - def process_dir(self, imglist, img_dir, thumb_dir, bigimg_dir=''): + def process_dir(self, imglist, img_dir): "prepare images for a directory" + thumb_dir = os.path.join(img_dir, self.settings['thumb_dir']) + if not os.path.isdir(thumb_dir): + os.mkdir(thumb_dir) + + if self.settings['big_img']: + bigimg_dir = os.path.join(img_dir, + self.settings['bigimg_dir']) + if not os.path.isdir(bigimg_dir): + os.mkdir(bigimg_dir) + # loop on images for f in imglist: filename = os.path.split(f)[1] im_name = os.path.join(img_dir, filename) - thumb_name = os.path.join(thumb_dir, - self.settings['thumb_prefix'] + filename) - - if os.path.isfile(im_name) and os.path.isfile(thumb_name) and \ - not self.force: + if os.path.isfile(im_name) and not self.force: print "%s exists - skipping" % filename continue @@ -174,9 +168,12 @@ class Gallery: img.save(im_name, quality=self.settings['jpg_quality']) - img.thumbnail(thumb_name, self.settings['thumb_size'], - fit=self.settings['thumb_fit'], - quality=self.settings['jpg_quality']) + if self.settings['make_thumbs']: + thumb_name = os.path.join(thumb_dir, + self.settings['thumb_prefix'] + filename) + img.thumbnail(thumb_name, self.settings['thumb_size'], + fit=self.settings['thumb_fit'], + quality=self.settings['jpg_quality']) if self.settings['exif']: copy_exif(f, im_name) diff --git a/sigal/settings.py b/sigal/settings.py index 30d5b20..c4c79d3 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -26,9 +26,10 @@ import ConfigParser _DEFAULT_CONFIG = { 'img_size': '640x480', - 'thumb_prefix': '', + 'make_thumbs': 1, + 'thumb_prefix': 'TN-', 'thumb_size': '150x112', - 'thumb_dir': 'thumbnail', + 'thumb_dir': '', 'thumb_fit': 1, 'big_img': 0, 'bigimg_dir': 'big', @@ -59,11 +60,16 @@ def read_settings(filename=None): config.read(filename) settings = dict(config.items('sigal')) - settings['jpg_quality'] = int(settings['jpg_quality']) settings['fileextlist'] = settings['fileextlist'].split(',') settings['img_size'] = get_size(settings['img_size']) settings['thumb_size'] = get_size(settings['thumb_size']) + settings['jpg_quality'] = config.getint('sigal', 'jpg_quality') + settings['big_img'] = config.getboolean('sigal', 'big_img') + settings['exif'] = config.getboolean('sigal', 'exif') + settings['make_thumbs'] = config.getboolean('sigal', 'make_thumbs') + settings['thumb_fit'] = config.getboolean('sigal', 'thumb_fit') + if settings['exif']: try: import pyexiv2 diff --git a/tests/sample/sigal.conf b/tests/sample/sigal.conf index 79cfcc6..f1d97f5 100644 --- a/tests/sample/sigal.conf +++ b/tests/sample/sigal.conf @@ -4,6 +4,10 @@ theme = default # size of resized image img_size = 640x480 +# generate thumbnails +make_thumbs = 0 +# directory of the thumbnails +thumb_dir = thumbnail # prefix for thumbnails name thumb_prefix = TN- # thumbnail size