30 Jul 2023

Building a Watermarking Tool with Python

In the modern digital landscape, safeguarding your creative work and intellectual property is of utmost importance. For photographers, artists, content creators, and anyone sharing their work online, watermarking offers an effective way to protect digital assets from unauthorized use and ensure proper attribution. In this article, we will explore how to develop a watermarking tool using Python – a versatile and widely used programming language – allowing you to secure your valuable creations.

Understanding Watermarking

A watermark is a visible overlay or embedded piece of information on multimedia content, such as images or videos. The primary purpose of a watermark is to indicate ownership, prevent theft, and lend a professional touch to your work. It can be as simple as a logo or text strategically placed on the content without compromising its visibility or appeal.


Before diving into building the watermarking tool, ensure that you have the following prerequisites installed on your system:

  1. Python: Head to the official Python website (https://www.python.org/) to download and install the latest version of Python.
  2. Pillow Library: Pillow is a powerful Python imaging library that simplifies working with images. Install it using pip: pip install Pillow

Importing Required Libraries

Let's begin by importing the necessary libraries: PIL (Python Imaging Library) for image processing and os for file handling.

from PIL import Image, ImageDraw, ImageFont
import os

Load the Image

We'll define a function to load the image on which we want to apply the watermark.

def load_image(image_path):
        image = Image.open(image_path)
        return image
    except FileNotFoundError:
        print("Error: Image not found.")
        return None

Apply Watermark

Next, we'll create a function to apply the watermark to the image. We'll use a semi-transparent text overlay as our watermark.

def apply_watermark(image, text, position=(10, 10), font_size=40, opacity=128, color=(255, 255, 255)):
        draw = ImageDraw.Draw(image)
        width, height = image.size
        font = ImageFont.truetype("arial.ttf", font_size)
        text_width, text_height = draw.textsize(text, font)
        watermark = Image.new("RGBA", image.size, (0, 0, 0, 0))
        watermark_draw = ImageDraw.Draw(watermark)
        watermark_draw.text(((width - text_width) / 2, (height - text_height) / 2), text, font=font, fill=(color[0], color[1], color[2], opacity))
        watermarked_image = Image.alpha_composite(image.convert("RGBA"), watermark)
        return watermarked_image
    except Exception as e:
        print(f"Error: {e}")
        return None

Save the Watermarked Image

After applying the watermark, we need to save the processed image to a new file.

def save_watermarked_image(image, output_path):
        print("Watermarked image saved successfully.")
    except Exception as e:
        print(f"Error: {e}")

Putting It All Together

Now, let's combine all the functions into a script and execute it.

def main():
    input_image_path = "input_image.jpg"  # Replace with the path of your input image
    output_image_path = "output_image.jpg"  # Replace with the desired output path
    watermark_text = "Your Watermark"  # Replace with your desired watermark text

    # Load the image
    image = load_image(input_image_path)
    if image:
        # Apply watermark
        watermarked_image = apply_watermark(image, watermark_text)

        # Save the watermarked image
        save_watermarked_image(watermarked_image, output_image_path)

if __name__ == "__main__":


Congratulations! You have successfully built a watermarking tool with Python, allowing you to protect your digital assets from unauthorized use while adding a professional touch to your work. With this tool in hand, you can confidently share your creative content online, knowing that your work is secure and properly attributed.

Always remember to respect the intellectual property of others and use watermarked content responsibly. Happy watermarking!