見出し画像

【コピペ可】画像にアカウント名の透かしを"リサイズして"自動で入れるPythonコード

はじめまして!最近、Stable Diffusionにハマったので、Hibiki@aiLadyというTwitterアカウントで人体錬成した女性の画像を発信しています。

情報交換など興味津々なので、是非フォロー・リプライ頂けると嬉しいです!

さて、先日Recl_AIさんの記事↓が大変参考になった(ありがとうございます!)のですが、

このコードのままだと、”透かし”のサイズは固定なので、以下のように画像のサイズが小さいと”透かし”が大きくなりすぎたり、逆にサイズが大きいと”透かし”が小さくなりすぎたりするのが気になってきました。

そこで「”透かし”は常に画像の横幅の3/5(変更可)にリサイズしてから入れる」ために微変更しました!もしよかったら使ってやってください。

※変更したのは引用元の「insert_watermark.py」ファイルのみです。それ以外はRecl_AIさんの記事を参照ください。

import os
import sys
from PIL import Image

def is_image_file(filename):
    IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif']
    return any(filename.lower().endswith(ext) for ext in IMAGE_EXTENSIONS)

abspath = os.path.abspath(sys.argv[0])
dname = os.path.dirname(abspath)
os.chdir(dname)

# watermarkedフォルダを一度すべて削除する
for filename in os.listdir("./watermarked/"):
    file_path = os.path.join("./watermarked/", filename)
    try:
        if os.path.isfile(file_path) or os.path.islink(file_path):
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            os.rmdir(file_path)
    except Exception as e:
        print(f"Failed to delete {file_path}. Reason: {e}")

overlay_image_file = "./watermark.png"

# originalフォルダ内の画像分だけループ
for filename in os.listdir("./original/"):
    if not is_image_file(filename):
        continue

    # 元画像の下の中央に透かしを入れる
    main_image_file = os.path.join("./original/", filename)
    output_image_file = "./watermarked/watermarked_" + os.path.basename(main_image_file)

    main_image = Image.open(main_image_file)
    overlay_image = Image.open(overlay_image_file)

    # リサイズする大きさを決める
    overlay_width = main_image.width // 5 * 3 # 大きさを変えたいときはここを変える。←は「画像の3/5」にリサイズする
    overlay_height = int(overlay_image.height * (overlay_width / overlay_image.width))

    # 画像をリサイズする
    overlay_image_resized = overlay_image.resize((overlay_width, overlay_height))

    # 画像を配置する
    x = int((main_image.width - overlay_width) - 10)
    y = main_image.height - overlay_height - 10
    main_image.paste(overlay_image_resized, (x, y), overlay_image_resized)

    main_image.save(output_image_file)

※繰り返しですが、変更したのは引用元の「insert_watermark.py」ファイルのみです。それ以外はRecl_AIさんの記事を参照ください。

それでは!Twitterもフォローお願いしマス。情報交換しましょう~


この記事が気に入ったらサポートをしてみませんか?