Browse Source

use a dict for settings

pull/9/merge
Simon 14 years ago
parent
commit
1c46abfb20
  1. 2
      sigal/__init__.py
  2. 69
      sigal/image.py
  3. 16
      sigal/settings.py
  4. 28
      sigal/theme.py

2
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)

69
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

16
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

28
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)

Loading…
Cancel
Save