Python腳本實現給圖片添加安全斜向水印
在日常工作中,我們經常需要上傳身份證或者其他證件照片用于實名認證、開戶或者授權。直接上傳原圖存在 信息泄露風險,一旦圖片被他人濫用,可能導致很多問題。
解決方法之一就是給圖片加 斜向水印,保證水印既覆蓋關鍵區(qū)域,又不會破壞原圖的可讀性。本文將介紹一個 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() # 創(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}") # ------------------- 命令行參數 ------------------- 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-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
通過這個腳本,你可以輕松為身份證、證件照或者任何圖片添加 安全、斜向、可定制的水印。這種方式不僅能保護隱私,還能防止證件被濫用。
還可以進一步擴展功能:
- 自動適配字體大小和間距,根據圖片尺寸動態(tài)調整水印密度
- 交替斜向水印,模擬防偽底紋效果
- 批量處理文件夾中的圖片
到此這篇關于Python腳本實現給圖片添加安全斜向水印的文章就介紹到這了,更多相關Python圖片添加水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python創(chuàng)建帶邊框樣式的Word表格的代碼實現
在生成Word文檔時,表格的邊框樣式是提升專業(yè)度的重要細節(jié)本文將通過一個實例,展示如何使用python-docx庫為表格添加上下邊框加粗和內部邊框隱藏的復雜樣式,感興趣的小伙伴跟著小編一起來看看吧2025-04-04