From cf9866f9c19e96cae0e42942df3c843ed2d06128 Mon Sep 17 00:00:00 2001 From: Abdul Qabiz Date: Mon, 2 Mar 2015 20:55:37 +0530 Subject: [PATCH] Add watermark plugin --- AUTHORS | 1 + docs/plugins.rst | 5 +++ sigal/plugins/watermark.py | 77 +++++++++++++++++++++++++++++++++++++ tests/sample/sigal.conf.py | 6 ++- tests/sample/watermark.png | Bin 0 -> 33293 bytes 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 sigal/plugins/watermark.py create mode 100644 tests/sample/watermark.png diff --git a/AUTHORS b/AUTHORS index b18a156..894bb7d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -8,3 +8,4 @@ alphabetical order): - Matthias Vogelgesang - Vikram Shirgur - Yuce Tekol +- Abdul Qabiz diff --git a/docs/plugins.rst b/docs/plugins.rst index d191aac..558ae12 100644 --- a/docs/plugins.rst +++ b/docs/plugins.rst @@ -103,3 +103,8 @@ Upload to S3 plugin =================== .. automodule:: sigal.plugins.upload_s3 + +Watermark plugin +=================== + +.. automodule:: sigal.plugins.watermark diff --git a/sigal/plugins/watermark.py b/sigal/plugins/watermark.py new file mode 100644 index 0000000..1219d7a --- /dev/null +++ b/sigal/plugins/watermark.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +"""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) + +""" + +## Original code: http://code.activestate.com/recipes/362879-watermark-with-pil/ + +import logging +from PIL import ImageDraw, Image, ImageEnhance +from sigal import signals + +logger = logging.getLogger(__name__) + + +def reduce_opacity(im, opacity): + """Returns an image with reduced opacity.""" + assert opacity >= 0 and opacity <= 1 + if im.mode != 'RGBA': + im = im.convert('RGBA') + else: + im = im.copy() + alpha = im.split()[3] + alpha = ImageEnhance.Brightness(alpha).enhance(opacity) + im.putalpha(alpha) + return im + +def watermark(im, mark, position, opacity=1): + """Adds a watermark to an image.""" + if opacity < 1: + mark = reduce_opacity(mark, opacity) + if im.mode != 'RGBA': + 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)) + 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]): + layer.paste(mark, (x, y)) + elif position == 'scale': + # scale, but preserve the aspect ratio + ratio = min( + float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1]) + w = int(mark.size[0] * ratio) + h = int(mark.size[1] * ratio) + mark = mark.resize((w, h)) + layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2)) + else: + layer.paste(mark, position) + # 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['watermark_position']: + position = settings['watermark_position'] + if settings['watermark_opacity']: + opacity = settings["watermark_opacity"] + + return watermark(img, mark, position, opacity) + + +def register(settings): + if settings.get('watermark'): + signals.img_resized.connect(add_watermark) + else: + logger.warning('Watermark image is not set') diff --git a/tests/sample/sigal.conf.py b/tests/sample/sigal.conf.py index 34bb333..a8fd029 100644 --- a/tests/sample/sigal.conf.py +++ b/tests/sample/sigal.conf.py @@ -10,10 +10,12 @@ keep_orig = True links = [('Example link', 'http://example.org'), ('Another link', 'http://example.org')] -plugins = ['sigal.plugins.adjust', 'sigal.plugins.copyright'] +plugins = ['sigal.plugins.adjust', 'sigal.plugins.copyright', 'sigal.plugins.watermark'] copyright = u"© An example copyright message" adjust_options = {'color': 0.0, 'brightness': 1.0, 'contrast': 1.0, 'sharpness': 0.0} - +watermark = "watermark.png" +watermark_position = "tile" +watermark_opacity = 0.3 # theme = 'galleria' # thumb_size = (280, 210) diff --git a/tests/sample/watermark.png b/tests/sample/watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..083dfa1e4a439cd3ac9288e9b001c4804cc69d7d GIT binary patch literal 33293 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%0DNV1N4d-~MCTz;`Sw?TW^@C|iWBF?@Y@ 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%0A6ZQ(cRGhU&919!a_N54#W zzxe|_;S95uNGz+645}PM=+H5J*1;?5 zuKQP~FIA^9VkOC=mkqE3jkYm}qi?mCel0Pd9Eh0@FYw)y2RO+Xl-WUH6=izDasY!coP*tWt-4iuU@jA@lLw@ z_KUmY{C#{+f9483OQPa^oLfL+kv6?y7aCmb+!zH<$JsF{|9GIpzr>BUTISl4U&dF; zv|^(@hi>!LR4EkI*po2=GOA$iiXFlgzO5)#Czg(Zx!Zg+%9yg>k-*o3Mpbwdb!{IH zEyRuBxX2jf9Ii%dV_BSc#sUIoBL++m4Q3`eNRrWPhH2{#BAGfKgsYV&@jXliK215t zRrkX!l0>=fh>wK09P2_G0oRNd_~flXm0I%7IK>tBi89igTg8ksZ?C1E&FIwEMRbi8 z*Qp)vf`i1;n%&w&}kBL@)1fg)(U`;#kf?<%M|ay6nK?0 z!W*eIMkeFPtS*Ub#&5y15NBgsEwZ(QfDWEsi;>kdC4`Acdo>OXv@jG(W`lX)378hq zS^!_cD3C5LHzx67ajcnPzp{;h583?EB4vp7k00l93p$d$cMAMiWgSD3&ta^R1I7G`Pl)1CrDr%wToG z`FCEiSI&a9_SJd;ZWV*3K%?%VrMuKhB5LsG&|<$4w&0W4T2}^f zH49>`a0e1XJBk8P#2J2-+Tx5d##B3Ov0@QNSpmraHvf25{?g)jqp@z7-mB*@?sK7L zs2or$OC7L!ABRNd;0KGzXeNl-Xk!pewr0sY*)cJQ=IT4IhkTMy@SDP&M0P?El#f2! zd1|@WqH!f(rS>AifQ`}W8T