From da4c9c4f6c71969def1bee5a34a9dba90de9b894 Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Sun, 4 Aug 2013 14:33:19 +0200 Subject: [PATCH] Pass settings dictionary to generate_image Reduce the amount of parameters to pass necessary to generate an image. --- sigal/gallery.py | 5 +---- sigal/image.py | 20 ++++++++++++-------- sigal/settings.py | 7 +++++++ tests/test_image.py | 13 +++++++++---- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index bac97e6..e1bbb09 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -289,10 +289,7 @@ def process_image(filepath, outpath, settings): if settings['keep_orig']: shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) - sigal.image.generate_image( - filepath, outname, settings['img_size'], options=options, - copyright_text=settings['copyright'], method=settings['img_processor'], - copy_exif_data=settings['copy_exif_data']) + sigal.image.generate_image(filepath, outname, settings, options=options) if settings['make_thumbs']: thumb_name = join(outpath, get_thumb(settings, filename)) diff --git a/sigal/image.py b/sigal/image.py index 30ec0be..8af08ee 100644 --- a/sigal/image.py +++ b/sigal/image.py @@ -27,14 +27,16 @@ import sys from PIL import Image as PILImage from PIL import ImageDraw, ImageOps from PIL.ExifTags import TAGS -from pilkit.processors import Transpose +from pilkit.processors import Transpose, Adjust from pilkit.utils import save_image from datetime import datetime -def generate_image(source, outname, size, options=None, - copyright_text='', method='ResizeToFit', - copy_exif_data=True): +def _has_exif_tags(img): + return hasattr(img, 'info') and 'exif' in img.info + + +def generate_image(source, outname, settings, options=None): """Image processor, rotate and resize the image. :param source: path to an image @@ -47,7 +49,7 @@ def generate_image(source, outname, size, options=None, original_format = img.format # Preserve EXIF data - if copy_exif_data and hasattr(img, 'info') and 'exif' in img.info: + if settings['copy_exif_data'] and _has_exif_tags(img): options = options or {} options['exif'] = img.info['exif'] @@ -58,6 +60,8 @@ def generate_image(source, outname, size, options=None, pass # Resize the image + method = settings['img_processor'] + try: logger.debug('Processor: %s', method) processor_cls = getattr(pilkit.processors, method) @@ -65,11 +69,11 @@ def generate_image(source, outname, size, options=None, logger.error('Wrong processor name: %s', method) sys.exit() - processor = processor_cls(*size, upscale=False) + processor = processor_cls(*settings['img_size'], upscale=False) img = processor.process(img) - if copyright_text: - add_copyright(img, copyright_text) + if settings['copyright']: + add_copyright(img, settings['copyright']) outformat = img.format or original_format or 'JPEG' logger.debug(u'Save resized image to {0} ({1})'.format(outname, outformat)) diff --git a/sigal/settings.py b/sigal/settings.py index e3ea0e5..1a19999 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -119,3 +119,10 @@ def read_settings(filename=None): "largest value first.", key) return settings + + +def create_settings(**kwargs): + """Create a new default setting copy and initialize it with kwargs.""" + settings = _DEFAULT_CONFIG.copy() + settings.update(kwargs) + return settings diff --git a/tests/test_image.py b/tests/test_image.py index 4930721..15e9db0 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -6,6 +6,7 @@ from PIL import Image from sigal import init_logging from sigal.image import generate_image, generate_thumbnail, get_exif_tags +from sigal.settings import create_settings CURRENT_DIR = os.path.dirname(__file__) TEST_IMAGE = 'exo20101028-b-full.jpg' @@ -17,7 +18,8 @@ def test_generate_image(tmpdir): dstfile = str(tmpdir.join(TEST_IMAGE)) for size in [(600, 600), (300, 200)]: - generate_image(SRCFILE, dstfile, size, method='ResizeToFill') + settings = create_settings(img_size=size, img_processor='ResizeToFill') + generate_image(SRCFILE, dstfile, settings) im = Image.open(dstfile) assert im.size == size @@ -28,7 +30,8 @@ def test_generate_image_processor(tmpdir): init_logging() dstfile = str(tmpdir.join(TEST_IMAGE)) with pytest.raises(SystemExit): - generate_image(SRCFILE, dstfile, (200, 200), method='WrongMethod') + settings = create_settings(img_size=(200, 200), img_processor='WrongMethod') + generate_image(SRCFILE, dstfile, settings) def test_generate_thumbnail(tmpdir): @@ -55,11 +58,13 @@ def test_exif_copy(tmpdir): test_image) dst_file = str(tmpdir.join(test_image)) - generate_image(src_file, dst_file, (300, 400), copy_exif_data=True) + settings = create_settings(img_size=(300, 400), copy_exif_data=True) + generate_image(src_file, dst_file, settings) raw, simple = get_exif_tags(dst_file) assert simple['iso'] == 50 - generate_image(src_file, dst_file, (300, 400), copy_exif_data=False) + settings['copy_exif_data'] = False + generate_image(src_file, dst_file, settings) raw, simple = get_exif_tags(dst_file) assert not raw assert not simple