Browse Source

Pass settings dictionary to generate_image

Reduce the amount of parameters to pass necessary to generate an image.
pull/30/head
Matthias Vogelgesang 13 years ago
parent
commit
da4c9c4f6c
  1. 5
      sigal/gallery.py
  2. 20
      sigal/image.py
  3. 7
      sigal/settings.py
  4. 13
      tests/test_image.py

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

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

7
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

13
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

Loading…
Cancel
Save