Adding Watermarks to Photographs using Python

in #programming7 years ago

At my current place of employment, we handle a lot of images which need watermarks on them. While I was experimenting with different watermark techniques, I found one that I really liked, using Python.  The company ultimately went a different direction, but I like the code, and think others might be able to use it.

This uses PIL, which is found in the Image library.

from PIL import Image
def create_watermark(image_path, final_image_path, watermark, hires=False):    main = Image.open(image_path)    mark = Image.open(watermark)    mark = mark.rotate(30, expand=1)    mask = mark.convert('L').point(lambda x: min(x, 25))    mark.putalpha(mask)    mark_width, mark_height = mark.size    main_width, main_height = main.size    aspect_ratio = mark_width / mark_height    new_mark_width = main_width * 0.4    mark.thumbnail((new_mark_width, new_mark_width / aspect_ratio), Image.ANTIALIAS)    tmp_img = Image.new('RGBA', main.size)    for i in xrange(0, tmp_img.size[0], mark.size[0]):        for j in xrange(0, tmp_img.size[1], mark.size[1]):            main.paste(mark, (i, j), mark)    if not hires:        main.thumbnail((758, 1000), Image.ANTIALIAS)        main.save(final_image_path, 'JPEG', quality=75)    else:        main.thumbnail((2048, 2048), Image.ANTIALIAS)        main.save(final_image_path, 'JPEG', quality=85)
if __name__ == '__main__':    create_watermark('main_image.jpg', 'main_with_watermark.jpg', 'watermark.png', True)

The initial image is one I photographed a few years back.

The watermark I used is one I threw together in Photoshop. (It's a transparent png with white text)

The outcome image after running the python script is below.

Feel free to use this script whenever!

Sort:  

Great post! Thank you. ☆

Beautiful photograph and I had no idea python could do this. Looks like video watermarking might be just as easy according to Eric: http://leeeric.com/post/how-to-watermark-a-video-withpython/

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 66256.11
ETH 3036.39
USDT 1.00
SBD 3.73