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

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

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

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

脚本功能概览

该脚本可以实现:

  • 斜向平铺水印,防止裁剪后水印被去除
  • 文字可自定义,可带日期或用途说明
  • 字体大小、间距、旋转角度、透明度可调
  • 文字颜色可自定义(支持 RGB 和 HEX)
  • 命令行调用,支持 -h 查看使用说明和示例

图片加水印完整脚本

需求理清楚了,接下来让 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图片添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python安装Pandas库的两种方法

    Python安装Pandas库的两种方法

    本文介绍了三种安装Python Pandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pip list验证安装结果,每种方法给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-08-08
  • pandas进行数据输入和输出的方法详解

    pandas进行数据输入和输出的方法详解

    这篇文章主要为大家详细介绍了pandas进行数据输入和输出的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python处理.nfo文件格式的完整教程

    Python处理.nfo文件格式的完整教程

    .nfo 文件是媒体文件的元数据容器,通常用于存储电影、电视剧、音乐等多媒体信息的结构化数据,它们本质上是 XML 格式的文本文件,包含如标题、演员、剧情简介等关键信息,本文给大家详细介绍了Python处理.nfo文件格式的完整教程,需要的朋友可以参考下
    2025-07-07
  • Python后台开发Django的教程详解(启动)

    Python后台开发Django的教程详解(启动)

    这篇文章主要介绍了Python后台开发Django(启动),本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • 基于Python实现文件处理程序

    基于Python实现文件处理程序

    这篇文章主要为大家详细介绍了如何基于Python实现一个简单的文件处理程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • python利用pandas分析学生期末成绩实例代码

    python利用pandas分析学生期末成绩实例代码

    pandas是数据分析师最常用的工具之一,这篇文章主要给大家介绍了关于python如何利用pandas分析学生期末成绩的相关资料,文中给出了详细的实现方法,需要的朋友可以参考下
    2021-07-07
  • 使用Python创建带边框样式的Word表格的代码实现

    使用Python创建带边框样式的Word表格的代码实现

    在生成Word文档时,表格的边框样式是提升专业度的重要细节本文将通过一个实例,展示如何使用python-docx库为表格添加上下边框加粗和内部边框隐藏的复杂样式,感兴趣的小伙伴跟着小编一起来看看吧
    2025-04-04
  • pyecharts如何旋转折线图的X轴标签

    pyecharts如何旋转折线图的X轴标签

    这篇文章主要介绍了pyecharts如何旋转折线图的X轴标签,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • python requests指定出口ip的例子

    python requests指定出口ip的例子

    今天小编就为大家分享一篇python requests指定出口ip的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python+Tesseract OCR实现截屏识别文字

    python+Tesseract OCR实现截屏识别文字

    pytesseract Python常用pytesseract进行图片上的文字识别,本文主要介绍了python+Tesseract OCR实现截屏识别文字,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论