python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python图片添加水印

Python脚本实现给图片添加安全斜向水印

作者:Vic_wkx

在日常工作中,证件照片的安全性至关重要,本文和大家分享了一个Python 脚本,用于给图片添加斜向平铺水印,有效防止信息泄露或滥用,希望对大家有所帮助

在日常工作中,我们经常需要上传身份证或者其他证件照片用于实名认证、开户或者授权。直接上传原图存在 信息泄露风险,一旦图片被他人滥用,可能导致很多问题。

解决方法之一就是给图片加 斜向水印,保证水印既覆盖关键区域,又不会破坏原图的可读性。本文将介绍一个 Python 脚本,可以轻松实现斜向平铺水印,并支持命令行参数自定义文字、颜色、透明度等。

脚本功能概览

该脚本可以实现:

图片加水印完整脚本

需求理清楚了,接下来让 AI 帮忙写一个 Python 脚本就行了:

import argparse
from PIL import Image, ImageDraw, ImageFont
import datetime

def parse_color(color_str):
    """
    解析颜色参数,支持:
    - RGB格式:255,0,0
    - HEX格式:#FF0000
    """
    color_str = color_str.strip()
    if color_str.startswith("#") and len(color_str) == 7:
        r = int(color_str[1:3], 16)
        g = int(color_str[3:5], 16)
        b = int(color_str[5:7], 16)
        return (r, g, b)
    else:
        parts = color_str.split(",")
        if len(parts) != 3:
            raise ValueError("颜色格式错误,应为R,G,B或#RRGGBB")
        return tuple(int(p) for p in parts)

def add_slanted_watermark(
    input_path, output_path, text=None,
    opacity=90, angle=30, spacing=150, font_scale=25, color=(255,0,0)
):
    """
    给图片添加斜向平铺水印
    """
    # 打开原图
    image = Image.open(input_path).convert("RGBA")
    width, height = image.size

    # 默认文字
    if text is None:
        today = datetime.date.today().strftime("%Y-%m-%d")
        text = f"仅供实名认证使用 {today}"

    # 字体大小
    try:
        font = ImageFont.truetype("msyh.ttc", int(width / font_scale))
    except:
        font = ImageFont.load_default()

    # 创建大画布
    diagonal = int((width**2 + height**2) ** 0.5) * 2
    watermark = Image.new("RGBA", (diagonal, diagonal), (0, 0, 0, 0))
    draw = ImageDraw.Draw(watermark)

    # 测量文字大小
    bbox = draw.textbbox((0, 0), text, font=font)
    text_width, text_height = bbox[2] - bbox[0], bbox[3] - bbox[1]

    # 平铺文字
    for y in range(0, diagonal, text_height + spacing):
        for x in range(0, diagonal, text_width + spacing):
            draw.text((x, y), text, fill=color + (opacity,), font=font)

    # 旋转水印
    watermark = watermark.rotate(angle, expand=1)

    # 裁剪回原图大小
    x = (watermark.width - width) // 2
    y = (watermark.height - height) // 2
    watermark = watermark.crop((x, y, x + width, y + height))

    # 合成
    combined = Image.alpha_composite(image, watermark)
    combined.convert("RGB").save(output_path, "JPEG")
    print(f"✅ 水印已添加: {output_path}")


# ------------------- 命令行参数 -------------------
def main():
    example_text = """示例调用:
  # 默认红色水印
  python watermark.py img.png out.jpg -t "仅供XX银行使用 2025-08-26"

  # 自定义灰色水印
  python watermark.py img.png out.jpg -t "仅供XX银行使用" --color 128,128,128

  # 自定义蓝色HEX水印
  python watermark.py img.png out.jpg --color #0000FF --opacity 100 --angle 45 --font_scale 30 --spacing 120
"""
    parser = argparse.ArgumentParser(
        description="在图片上添加斜向平铺水印,可自定义文字、字体大小、间距、角度、透明度、颜色。",
        epilog=example_text,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument("input", help="输入图片路径(jpg/png)")
    parser.add_argument("output", help="输出图片路径(jpg)")
    parser.add_argument("-t", "--text", default=None, help="水印文字(默认带日期)")
    parser.add_argument("--opacity", type=int, default=90, help="文字透明度 0-255,默认90")
    parser.add_argument("--angle", type=float, default=30, help="水印旋转角度,默认30°")
    parser.add_argument("--spacing", type=int, default=150, help="水印行列间距,默认150px")
    parser.add_argument("--font_scale", type=float, default=25, help="字体大小比例:图片宽度/字体大小,默认25")
    parser.add_argument("--color", default="255,0,0", help="文字颜色 RGB格式: R,G,B 或 HEX: #RRGGBB, 默认红色")

    args = parser.parse_args()

    color = parse_color(args.color)

    add_slanted_watermark(
        input_path=args.input,
        output_path=args.output,
        text=args.text,
        opacity=args.opacity,
        angle=args.angle,
        spacing=args.spacing,
        font_scale=args.font_scale,
        color=color
    )


if __name__ == "__main__":
    main()

命令行使用方法

脚本支持 命令行参数,可以在调用时灵活调整:

python watermark.py input.jpg output.jpg -t "仅供XX银行使用 2025-08-26" \
    --color 255,0,0 --opacity 90 --angle 30 --font_scale 25 --spacing 150

参数说明

参数功能默认值
input输入图片路径(jpg/png)必填
output输出图片路径必填
-t / --text水印文字默认“仅供实名认证使用 + 当前日期”
--opacity水印透明度 0-25590
--angle水印旋转角度30°
--spacing文字间距150px
--font_scale字体大小比例,图片宽度/字体大小25
--color文字颜色 RGB 或 HEX255,0,0

调用示例

# 默认红色水印
python watermark.py img.png out.jpg -t "仅供XX银行使用 2025-08-26"

# 自定义灰色水印
python watermark.py img.png out.jpg -t "仅供XX银行使用" --color 128,128,128

# 自定义蓝色HEX水印
python watermark.py img.png out.jpg --color #0000FF --opacity 100 --angle 45 --font_scale 30 --spacing 120

通过这个脚本,你可以轻松为身份证、证件照或者任何图片添加 安全、斜向、可定制的水印。这种方式不仅能保护隐私,还能防止证件被滥用。

还可以进一步扩展功能:

到此这篇关于Python脚本实现给图片添加安全斜向水印的文章就介绍到这了,更多相关Python图片添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文