Pythonで画像にウォーターマークを自動挿入する方法

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

デジタル時代における著作権の保護とブランディングの重要性が高まる中、Pythonのプログラムを使って、画像にウォーターマークを簡単かつ迅速に追加する方法を紹介します。

このツールは、特に大量の画像を扱う際に時間と労力を節約するための効果的なソリューションを提供します。

目次

ライブラリのインストール

Pillowのインストール方法

Pillowは、Pythonのパッケージ管理システムであるpipを使用して簡単にインストールできます。以下のコマンドを実行するだけで、必要なライブラリがシステムに追加されます。

pip install Pillow

作成したPythonコード

「QuickMark」は、指定ディレクトリ内の画像ファイルにウォーターマークを自動追加するPythonスクリプトです。

このプログラムは、ウォーターマークのテキスト、位置、透明度を設定し、画像に適用します。処理後の画像は新たなサブディレクトリに保存されます。

これにより、著作権表示やブランディングを効率的に行えるため、特に大量の画像を扱う際に便利です。スクリプトはコマンドラインから簡単に実行可能で、使いやすさを重視して設計されています。

コード解説

  1. 定数の設定:
    • 使用するフォントのパス、フォントサイズ、ウォーターマークのテキスト、ウォーターマークの位置、およびウォーターマークの透明度を定義します。
  2. ウォーターマーク追加機能:
    • 指定された画像ファイルを開いてRGBA形式に変換します。
    • 透明度を考慮した新しい画像レイヤーを作成し、ウォーターマークをこのレイヤーに描画します。
    • フォント設定を行い、ウォーターマークのテキストのバウンディングボックスを計算して、テキストの幅と高さを取得します。
    • ウォーターマークの位置を計算し、テキストを指定された透明度で描画します。
    • 透明レイヤーを元の画像に合成し、RGB形式に変換した後、JPEG形式で保存します。
  3. ディレクトリ処理機能:
    • ユーザーに画像が保存されているディレクトリのパスを入力させます。
    • 入力されたディレクトリ内のすべての画像ファイルに対して、ウォーターマークを追加する処理を行います。
    • 対応する画像ファイルのみを処理するため、指定されたファイル形式の拡張子を持つファイルだけが選択されます。
    • 処理後の画像は、「watermarked_images」という新しいサブディレクトリに保存されます。
  4. 実行方法:
    • スクリプトが存在するディレクトリに移動し、コマンドプロンプトやターミナルからスクリプトを実行します。
    • スクリプトはコマンドラインから直接操作し、指定されたディレクトリのパスを入力して処理を開始します。

作成した全体のソースコード

import os
from PIL import Image, ImageDraw, ImageFont

# 定数設定
FONT_PATH = 'arial.ttf'  # 使用するフォントファイル
FONT_SIZE = 36  # フォントのサイズ
WATERMARK_TEXT = 'Sample Watermark'  # ウォーターマークに使用するテキスト
WATERMARK_POSITION = 2  # ウォーターマークの挿入位置設定 (1=画面上部, 2=画面中央, 3=画面下部)
TRANSPARENCY = 50  # ウォーターマークの透明度 (100=不透明, 0=透明)
IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.bmp']  # 処理対象の画像ファイル拡張子

def add_watermark(image_path, output_path):
    # 画像ファイルを開いてRGBAモードに変換
    with Image.open(image_path).convert("RGBA") as base:
        # ウォーターマークを描画するための透明レイヤーを作成
        watermark_layer = Image.new("RGBA", base.size)
        draw = ImageDraw.Draw(watermark_layer)
        # フォントの設定
        font = ImageFont.truetype(FONT_PATH, FONT_SIZE)
        # テキストのバウンディングボックスを取得してテキストサイズを計算
        text_bbox = draw.textbbox((0, 0), WATERMARK_TEXT, font=font)
        text_width = text_bbox[2] - text_bbox[0]
        text_height = text_bbox[3] - text_bbox[1]
        # ウォーターマークの位置を計算
        if WATERMARK_POSITION == 1:
            position = ((base.width - text_width) / 2, (base.height / 4) - text_height / 2)
        elif WATERMARK_POSITION == 2:
            position = ((base.width - text_width) / 2, (base.height / 2) - text_height / 2)
        elif WATERMARK_POSITION == 3:
            position = ((base.width - text_width) / 2, (3 * base.height / 4) - text_height / 2)
        # ウォーターマークを透明度を設定して描画
        draw.text(position, WATERMARK_TEXT, font=font, fill=(255, 255, 255, int(255 * TRANSPARENCY / 100)))
        # ウォーターマークを元の画像に合成してRGBに変換
        combined = Image.alpha_composite(base, watermark_layer).convert("RGB")
        # 最終的な画像をJPEG形式で保存
        combined.save(output_path, 'JPEG')

def process_directory(directory_path):
    # 出力ディレクトリのパスを設定
    output_directory = os.path.join(directory_path, "watermarked_images")
    # 出力ディレクトリが存在しなければ作成
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
    # ディレクトリ内の全ファイルを処理
    for filename in os.listdir(directory_path):
        file_path = os.path.join(directory_path, filename)
        # 対応する画像ファイル形式のみを処理
        if os.path.isfile(file_path) and any(file_path.endswith(ext) for ext in IMAGE_EXTENSIONS):
            output_path = os.path.join(output_directory, f"wm_{filename}")
            add_watermark(file_path, output_path)
            print(f"Processed {filename}")

if __name__ == '__main__':
    # ユーザーに画像が保存されているディレクトリパスの入力を求める
    directory_path = input("画像が保存されているディレクトリのパスを入力してください: ")
    process_directory(directory_path)

実行結果

今回作成したPythonコードを実行し、画像にウォーターマークが挿入できるかテストします。

コードを実行すると画像のディレクトリを聞かれますので、コマンドラインにディレクトリパスを入力します。

すると以下のようにディレクトリ内の画像にウォーターマークが挿入されることが確認できました。

まとめ

「QuickMark」を活用することで、画像に対する著作権表示やブランディングを一括して行うことができ、デジタルコンテンツの管理がぐっと楽になります。

今回のガイドが、効率的に画像を保護し、その価値を高める手助けになれば幸いです。プロジェクトやビジネスに応じてカスタマイズし、より効果的な画像管理を実現しましょう。

それでは、また次の記事でお会いしましょう。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次