diff --git a/sigal/__init__.py b/sigal/__init__.py index 1095edd..cd5b691 100644 --- a/sigal/__init__.py +++ b/sigal/__init__.py @@ -62,7 +62,7 @@ def main(): settings = read_settings(args.input_dir) if args.copyright: - settings.set('sigal', 'copyright', args.copyright) + settings['copyright'] = args.copyright # create gallery gallery = Gallery(settings) diff --git a/sigal/image.py b/sigal/image.py index 1b706bb..454cff5 100644 --- a/sigal/image.py +++ b/sigal/image.py @@ -33,33 +33,14 @@ class Gallery: "Prepare images" def __init__(self, settings): - self.imsize = self.getsize(settings.get('sigal', 'img_size')) - self.bigimg = settings.getint('sigal', 'big_img') - self.bigimg_dir = settings.get('sigal', 'bigimg_dir') - - self.thumb_size = self.getsize(settings.get('sigal', 'thumb_size')) - self.thumb_dir = settings.get('sigal', 'thumb_dir') - self.thumb_prefix = settings.get('sigal', 'thumb_prefix') - self.square_thumb = settings.getint('sigal', 'square_thumb') - - self.jpgquality = settings.getint('sigal', 'jpg_quality') - self.exif = settings.getint('sigal', 'exif') - self.copyright = settings.get('sigal', 'copyright') - self.fileExtList = settings.get('sigal', 'fileExtList').split(',') - - def getsize(self, string): - "split size string to a tuple of int" - size = [int(i) for i in string.split("x")] - if size[1] > size[0]: - size[0], size[1] = size[1], size[0] - return tuple(size) + self.settings = settings def filelist(self): "get the list of directories with files of particular extensions" for dirpath, dirnames, filenames in os.walk(self.input_dir): # filelist = [os.path.normcase(f) for f in os.listdir(dir)] imglist = [os.path.join(dirpath, f) for f in filenames \ - if os.path.splitext(f)[1] in self.fileExtList] + if os.path.splitext(f)[1] in self.settings['fileextlist']] yield dirpath, dirnames, imglist def build(self, input_dir, output_dir, force=False): @@ -73,8 +54,8 @@ class Gallery: print "Create output directory %s" % self.output_dir os.makedirs(self.output_dir) - if self.copyright: - self.copyright = '\xa9 ' + self.copyright + if self.settings['copyright']: + self.settings['copyright'] = '\xa9 ' + self.settings['copyright'] # loop on directories for dirpath, dirnames, imglist in self.filelist(): @@ -90,13 +71,14 @@ class Gallery: copy2(descfile, img_dir) if len(imglist) != 0: - thumb_dir = os.path.join(img_dir, self.thumb_dir) + thumb_dir = os.path.join(img_dir, self.settings['thumb_dir']) if not os.path.isdir(thumb_dir): os.mkdir(thumb_dir) bigimg_dir = '' - if self.bigimg: - bigimg_dir = os.path.join(img_dir, self.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) @@ -110,7 +92,8 @@ class Gallery: filename = os.path.split(f)[1] im_name = os.path.join(img_dir, filename) - thumb_name = os.path.join(thumb_dir, self.thumb_prefix+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: @@ -120,32 +103,34 @@ class Gallery: print "%s" % filename im = Image.open(f) - if self.bigimg: + if self.settings['big_img']: im.save(os.path.join(bigimg_dir, filename), - quality=self.jpgquality) + quality=self.settings['jpg_quality']) # resize image if im.size[0] > im.size[1]: - im_resized = im.resize(self.imsize, Image.ANTIALIAS) + im_resized = im.resize(self.settings['img_size'], + Image.ANTIALIAS) else: - im_resized = im.resize([self.imsize[1], self.imsize[0]], + im_resized = im.resize([self.settings['img_size'][1], + self.settings['img_size'][0]], Image.ANTIALIAS) - if self.copyright: + if self.settings['copyright']: self.add_copyright(im_resized) # save - im_resized.save(im_name, quality=self.jpgquality) + im_resized.save(im_name, quality=self.settings['jpg_quality']) # create thumbnail self.make_thumb(im, thumb_name) - if self.exif: + if self.settings['exif']: self.copy_exif(f, im_name) def make_thumb(self, img, thumb_name): "create thumbnail image for img" - if self.square_thumb: + if self.settings['square_thumb']: if img.size[0] > img.size[1]: offset = (img.size[0] - img.size[1])/2 box = (offset, 0, img.size[0]-offset, img.size[1]) @@ -154,26 +139,28 @@ class Gallery: box = (0, offset, img.size[0], img.size[1]-offset) img = img.crop(box) - thumb_size = [self.thumb_size[0], self.thumb_size[0]] + thumb_size = [self.settings['thumb_size'][0], + self.settings['thumb_size'][0]] elif img.size[0] > img.size[1]: - thumb_size = self.thumb_size + thumb_size = self.settings['thumb_size'] else: - thumb_size = [self.thumb_size[1], self.thumb_size[0]] + thumb_size = [self.settings['thumb_size'][1], + self.settings['thumb_size'][0]] img.thumbnail(thumb_size, Image.ANTIALIAS) - img.save(thumb_name, quality=self.jpgquality) + img.save(thumb_name, quality=self.settings['jpg_quality']) def add_copyright(self, img): "add copyright to image" draw = ImageDraw.Draw(img) - draw.text((5, img.size[1]-15), self.copyright) + draw.text((5, img.size[1]-15), self.settings['copyright']) def copy_exif(self, srcfile, dstfile): "copy exif metadatas from src to dest images" try: import pyexiv2 except ImportError: - self.exif = 0 + self.settings['exif'] = 0 print "Error: install pyexiv2 module to use exif metadatas." return diff --git a/sigal/settings.py b/sigal/settings.py index c286517..de49a32 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -37,6 +37,14 @@ _DEFAULT_CONFIG = { } +def get_size(string): + "split size string to a tuple of int" + size = [int(i) for i in string.split("x")] + if size[1] > size[0]: + size[0], size[1] = size[1], size[0] + return tuple(size) + + def read_settings(source_dir): "Read settings from a config file in the source_dir root" @@ -48,4 +56,10 @@ def read_settings(source_dir): if os.path.isfile(local_config): config.read(local_config) - return config + 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']) + + return settings diff --git a/sigal/theme.py b/sigal/theme.py index ccea7c4..0f30a57 100644 --- a/sigal/theme.py +++ b/sigal/theme.py @@ -46,15 +46,11 @@ class Theme(): def __init__(self, settings, path, theme=DEFAULT_THEME, tpl=INDEX_PAGE): self.data = {} + self.settings = settings self.path = os.path.normpath(path) - self.bigimg = settings.getint('sigal', 'big_img') - self.bigimg_dir = settings.get('sigal', 'bigimg_dir') - self.thumb_dir = settings.get('sigal', 'thumb_dir') - self.thumb_prefix = settings.get('sigal', 'thumb_prefix') - self.fileExtList = settings.get('sigal', 'fileExtList').split(',') - if settings.has_option('sigal', 'theme'): - theme = settings.get('sigal', 'theme') + if settings['theme']: + theme = settings['theme'] self.theme_path = os.path.join(THEMES_PATH, theme) self.theme_rel_path = os.path.relpath(self.theme_path, os.path.dirname(__file__)) @@ -63,7 +59,8 @@ class Theme(): def directory_list(self): "get the list of directories with files of particular extensions" - ignored = [self.thumb_dir, self.bigimg_dir] + IGNORED_DIR + ignored = [self.settings['thumb_dir'], + self.settings['bigimg_dir']] + IGNORED_DIR for dirpath, dirnames, filenames in os.walk(self.path): # filelist = [os.path.normcase(f) for f in os.listdir(dir)] @@ -75,8 +72,10 @@ class Theme(): self.data[dirpath] = {} self.data[dirpath]['img'] = [f for f in filenames \ - if os.path.splitext(f)[1] in self.fileExtList] - self.data[dirpath]['subdir'] = [d for d in dirnames if d not in ignored] + if os.path.splitext(f)[1] in \ + self.settings['fileextlist']] + self.data[dirpath]['subdir'] = [d for d in dirnames \ + if d not in ignored] def get_meta_value(self, data): """ @@ -120,7 +119,7 @@ class Theme(): """ files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) \ - and os.path.splitext(f)[1] in self.fileExtList] + and os.path.splitext(f)[1] in self.settings['fileextlist']] for f in files: # find and return the first landscape image @@ -170,7 +169,8 @@ class Theme(): for i in self.data[dirpath]['img']: image = { 'file': i, - 'thumb': os.path.join(self.thumb_dir, self.thumb_prefix+i) + 'thumb': os.path.join(self.settings['thumb_dir'], + self.settings['thumb_prefix'] + i) } images.append(image) @@ -190,8 +190,8 @@ class Theme(): album = { 'path': os.path.join(d, INDEX_PAGE), 'title': self.data[dpath]['title'], - 'thumb': os.path.join(d, self.thumb_dir, - self.thumb_prefix+alb_thumb), + 'thumb': os.path.join(d, self.settings['thumb_dir'], + self.settings['thumb_prefix'] + alb_thumb), } albums.append(album)