Python腳本實現(xiàn)給圖片添加安全斜向水印
在日常工作中,我們經常需要上傳身份證或者其他證件照片用于實名認證、開戶或者授權。直接上傳原圖存在 信息泄露風險,一旦圖片被他人濫用,可能導致很多問題。
解決方法之一就是給圖片加 斜向水印,保證水印既覆蓋關鍵區(qū)域,又不會破壞原圖的可讀性。本文將介紹一個 Python 腳本,可以輕松實現(xiàn)斜向平鋪水印,并支持命令行參數(shù)自定義文字、顏色、透明度等。
腳本功能概覽
該腳本可以實現(xiàn):
- 斜向平鋪水印,防止裁剪后水印被去除
- 文字可自定義,可帶日期或用途說明
- 字體大小、間距、旋轉角度、透明度可調
- 文字顏色可自定義(支持 RGB 和 HEX)
- 命令行調用,支持
-h查看使用說明和示例
圖片加水印完整腳本
需求理清楚了,接下來讓 AI 幫忙寫一個 Python 腳本就行了:
import argparse
from PIL import Image, ImageDraw, ImageFont
import datetime
def parse_color(color_str):
"""
解析顏色參數(shù),支持:
- 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()
# 創(chuàng)建大畫布
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}")
# ------------------- 命令行參數(shù) -------------------
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()
命令行使用方法
腳本支持 命令行參數(shù),可以在調用時靈活調整:
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
參數(shù)說明
| 參數(shù) | 功能 | 默認值 |
|---|---|---|
| input | 輸入圖片路徑(jpg/png) | 必填 |
| output | 輸出圖片路徑 | 必填 |
| -t / --text | 水印文字 | 默認“僅供實名認證使用 + 當前日期” |
| --opacity | 水印透明度 0-255 | 90 |
| --angle | 水印旋轉角度 | 30° |
| --spacing | 文字間距 | 150px |
| --font_scale | 字體大小比例,圖片寬度/字體大小 | 25 |
| --color | 文字顏色 RGB 或 HEX | 255,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

通過這個腳本,你可以輕松為身份證、證件照或者任何圖片添加 安全、斜向、可定制的水印。這種方式不僅能保護隱私,還能防止證件被濫用。
還可以進一步擴展功能:
- 自動適配字體大小和間距,根據(jù)圖片尺寸動態(tài)調整水印密度
- 交替斜向水印,模擬防偽底紋效果
- 批量處理文件夾中的圖片
到此這篇關于Python腳本實現(xiàn)給圖片添加安全斜向水印的文章就介紹到這了,更多相關Python圖片添加水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python創(chuàng)建帶邊框樣式的Word表格的代碼實現(xiàn)
在生成Word文檔時,表格的邊框樣式是提升專業(yè)度的重要細節(jié)本文將通過一個實例,展示如何使用python-docx庫為表格添加上下邊框加粗和內部邊框隱藏的復雜樣式,感興趣的小伙伴跟著小編一起來看看吧2025-04-04
python+Tesseract OCR實現(xiàn)截屏識別文字
pytesseract Python常用pytesseract進行圖片上的文字識別,本文主要介紹了python+Tesseract?OCR實現(xiàn)截屏識別文字,具有一定的參考價值,感興趣的可以了解一下2023-11-11

