Skip to main content

A short description of your package

Project description

Image Watermarker

PyPI version

A Python package for embedding and extracting watermarks in various image formats (PNG, JPEG, WebP, AVIF, HEIC/HEIF). It provides a simple and flexible way to protect your images by adding hidden or invisible watermarks.

Features

  • Multiple Image Formats: Supports PNG, JPEG, WebP, AVIF, and HEIC/HEIF image formats.
  • Different Watermarking Techniques:
    • PNG & WebP: Embeds the watermark text into the least significant bit (LSB) of the alpha channel. This is a steganographic technique, making the watermark invisible to the naked eye.
    • JPEG: Embeds the watermark text into the EXIF metadata (Artist field). This method doesn't alter the visual appearance of the image.
    • AVIF & HEIC/HEIF: Appends a custom watermark marker and the watermark text to the end of the file bytes. This method is simpler but may be more easily detectable.
  • Easy-to-Use API: Simple functions for adding and checking watermarks.
  • Handles Bytes and File Paths: Functions accept image data as bytes, PIL.Image objects, or file paths.
  • Error Handling: Includes error handling and informative error messages.
  • Dependencies handled: Minimal external dependencies for maximum compatibility.

Installation

pip install image-invisible-watermarker

Usage

The package provides separate functions for each supported image format:

  • add_watermark_png(image, watermark_text) and check_watermark_png(image, watermark_text)
  • add_watermark_jpeg(image_bytes, watermark_text) and check_watermark_jpeg(image_bytes, watermark_text)
  • add_watermark_webp(image, watermark_text, output_path=None) and check_watermark_webp(image, watermark_text)
  • add_watermark_avif_heic_heif(file_bytes, watermark_text) and extract_watermark_avif_heic_heif(file_bytes, watermark_text)

PNG Example

from image_watermarker import add_watermark_png, check_watermark_png

# Add watermark to a PNG image
image_bytes = add_watermark_png("input.png", "My Watermark")
if image_bytes:
    with open("output.png", "wb") as f:
        f.write(image_bytes)

# Check for the watermark
result = check_watermark_png("output.png", "My Watermark")
print("IsDetected:", result[0])  # Output: IsDetected: True
print("Detected Text:", result[1])  # Output: Detected Text: My Watermark

# You can also pass image bytes directly:
with open("input.png", "rb") as f:
    image_bytes = f.read()
watermarked_bytes = add_watermark_png(image_bytes, "Another Watermark")
# ...

JPEG Example

from image_watermarker import add_watermark_jpeg, check_watermark_jpeg

# Add watermark to a JPEG image
image_bytes = add_watermark_jpeg("input.jpg", "JPEG Watermark")
if image_bytes:
    with open("output.jpg", "wb") as f:
        f.write(image_bytes)

# Check for the watermark
result = check_watermark_jpeg("output.jpg", "JPEG Watermark")
print("IsDetected:", result[0])
print("Detected Text:", result[1])

# Using file paths:
image_bytes = add_watermark_jpeg("input.jpg", "Another JPEG Watermark") # Pass file path directly

WebP Example

from image_watermarker import add_watermark_webp, check_watermark_webp

# Add watermark to a WebP image
image_bytes = add_watermark_webp("input.webp", "WebP Watermark")
if image_bytes:
    with open("output.webp", "wb") as f:
        f.write(image_bytes)

# Check for the watermark
result = check_watermark_webp("output.webp", "WebP Watermark")
print("IsDetected:", result[0])
print("Detected Text:", result[1])

AVIF/HEIC/HEIF Example

from image_watermarker import add_watermark_avif_heic_heif, extract_watermark_avif_heic_heif

# Add watermark
image_bytes = add_watermark_avif_heic_heif("input.avif", "AVIF Watermark") # or .heic, .heif
if image_bytes:
    with open("output.avif", "wb") as f:
        f.write(image_bytes)

# Check watermark
result = extract_watermark_avif_heic_heif("output.avif", "AVIF Watermark")
print("IsDetected:", result[0])
print("Detected Text:", result[1])

# Example with file path:
image_bytes = add_watermark_avif_heic_heif("input.heic", "HEIC Watermark")

Important Notes

  • Alpha Channel (PNG & WebP): The PNG and WebP watermarking methods require images to have an alpha channel. If your image doesn't have one, it will be converted to RGBA.
  • LSB Watermarking (PNG & WebP): LSB watermarking is generally robust to minor image manipulations (e.g., resizing, slight color adjustments). However, significant changes to the alpha channel or lossy compression can remove or corrupt the watermark.
  • EXIF Metadata (JPEG): Watermarks stored in EXIF metadata can be easily removed by stripping the metadata from the image. This method is less secure than LSB watermarking. Consider it more of a visible attribution than a robust protection mechanism.
  • AVIF and HEIC:
    • AVIF and HEIC/HEIF watermarking relies on appending data. This is not a robust watermarking technique. It's easily removed. It's mainly intended for simple cases where a basic, easily detectable watermark is sufficient.
  • Error Handling: The functions return None or raise exceptions if errors occur. Check the return values and handle potential exceptions appropriately. Error messages are also printed to the console.
  • Dependencies: The package relies on Pillow (PIL), numpy, and piexif. These are automatically installed when you install image-watermarker via pip.

Contributing

Contributions are welcome! If you find a bug or have a feature request, please open an issue on the GitHub repository. If you'd like to contribute code, please fork the repository and submit a pull request.

License

This project is licensed under the Creative Commons Attribution-NoDerivatives (CC BY-ND) License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

image_invisible_watermarker-0.1.1.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

image_invisible_watermarker-0.1.1-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file image_invisible_watermarker-0.1.1.tar.gz.

File metadata

File hashes

Hashes for image_invisible_watermarker-0.1.1.tar.gz
Algorithm Hash digest
SHA256 88ee224ddbbc2d21018f0656ccbe1144c3f2f9545b240a735f457a17c31d4388
MD5 dd7e482f1dfeca13ef9751802336a497
BLAKE2b-256 6b6cc4472034f8a50d35a104e1e261abbca940f50bc6e8e811e72f3d2d3883b5

See more details on using hashes here.

File details

Details for the file image_invisible_watermarker-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for image_invisible_watermarker-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 76f1e7ef6a31d93538076a48460f36bd1772a85a6c55c7eef96eed2de715ee12
MD5 571482625cb9b1de14bc8cfd19686759
BLAKE2b-256 3621e2d1cce2a5cea1a728d3edc389fc91c52df7f9e8c17cbb896ed60859173f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page