diff --git a/sigal/plugins/watermark.py b/sigal/plugins/watermark.py index 21e8a26..0478859 100644 --- a/sigal/plugins/watermark.py +++ b/sigal/plugins/watermark.py @@ -1,16 +1,40 @@ # -*- coding: utf-8 -*- +# Copyright (c) 2005 - Shane Hathaway (http://code.activestate.com/recipes/362879-watermark-with-pil/) +# Copyright (c) 2015 - Abdul Qabiz + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + """Plugin which adds a watermark to the image. Settings: - ``watermark``: path to the watermark image. -- ``watermark_position``: the watermark position (scale or tile) -- ``watermark_opacity``: the watermark opacity (0.0 to 1.0) +- ``watermark_position``: the watermark position either 'scale' or 'tile' or + a 2-tuple giving the upper left corner, or + a 4-tuple defining the left, upper, right, and lower pixel coordinate, or + `None` (same as (0, 0)). + If a 4-tuple is given, the size of the pasted image must match the size of the region. +- ``watermark_opacity``: the watermark opacity (0.0 to 1.0). """ -## Original code: http://code.activestate.com/recipes/362879-watermark-with-pil/ import logging from PIL import ImageDraw, Image, ImageEnhance @@ -31,6 +55,7 @@ def reduce_opacity(im, opacity): im.putalpha(alpha) return im + def watermark(im, mark, position, opacity=1): """Adds a watermark to an image.""" if opacity < 1: @@ -39,7 +64,7 @@ def watermark(im, mark, position, opacity=1): im = im.convert('RGBA') # create a transparent layer the size of the image and draw the # watermark in that layer. - layer = Image.new('RGBA', im.size, (0,0,0,0)) + layer = Image.new('RGBA', im.size, (0, 0, 0, 0)) if position == 'tile': for y in range(0, im.size[1], mark.size[1]): for x in range(0, im.size[0], mark.size[0]): @@ -57,16 +82,12 @@ def watermark(im, mark, position, opacity=1): # composite the watermark with the layer return Image.composite(layer, im, layer) + def add_watermark(img, settings=None): logger.debug('Adding watermark to %r', img) mark = Image.open(settings['watermark']) - position = 'scale' - opacity = 1 - if settings.get('watermark_position'): - position = settings['watermark_position'] - if settings.get('watermark_opacity'): - opacity = settings["watermark_opacity"] - + position = settings.get('watermark_position', 'scale') + opacity = settings.get("watermark_opacity", 1) return watermark(img, mark, position, opacity) diff --git a/sigal/settings.py b/sigal/settings.py index f47cf8b..e6518cc 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -66,6 +66,7 @@ _DEFAULT_CONFIG = { 'title': '', 'use_orig': False, 'video_size': (480, 360), + 'watermark': '', 'webm_options': ['-crf', '10', '-b:v', '1.6M', '-qmin', '4', '-qmax', '63'], 'write_html': True, @@ -124,7 +125,7 @@ def read_settings(filename=None): if k not in ['__builtins__']) # Make the paths relative to the settings file - paths = ['source', 'destination'] + paths = ['source', 'destination', 'watermark'] if os.path.isdir(join(settings_path, settings['theme'])): paths.append('theme')