Adding Watermarks to Photographs using Python

in #programming8 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/