Pass settings dictionary to generate_image
Reduce the amount of parameters to pass necessary to generate an image.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user