本文目录导读:

当然可以,批量给图片、PDF或视频添加水印是常见需求,有很多实用脚本和工具可以实现。
下面我为你介绍几种不同场景下的批量加水印脚本方案,你可以根据自己的技术水平和需求选择:
Python 脚本(最灵活、推荐,适合图片)
Python 的 PIL(Pillow)库是处理图片的利器,以下脚本可以遍历一个文件夹,为所有图片添加文字或图片水印。
环境准备:
pip install Pillow
Python 脚本示例:添加文字水印(有透明度)
import os
from PIL import Image, ImageDraw, ImageFont
def add_watermark_text(input_dir, output_dir, text="水印", font_path=None):
"""
给 input_dir 下所有图片添加文字水印,保存到 output_dir
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 设置字体,如果不指定则用默认字体(可能不支持中文)
if font_path is None:
font = ImageFont.load_default() # 默认字体,不支持中文
else:
# 示例:font_path = "C:/Windows/Fonts/simhei.ttf" 或 "/usr/share/fonts/..."
font = ImageFont.truetype(font_path, 36)
# 支持处理的图片格式
supported_ext = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff')
for filename in os.listdir(input_dir):
if filename.lower().endswith(supported_ext):
img_path = os.path.join(input_dir, filename)
img = Image.open(img_path).convert("RGBA") # 转为RGBA支持透明度
# 创建一个与原图同样大小的透明层
txt_layer = Image.new('RGBA', img.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(txt_layer)
# 计算文字位置(右下角)
text_bbox = draw.textbbox((0, 0), text, font=font)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
width, height = img.size
x = width - text_width - 20 # 右边距20像素
y = height - text_height - 20 # 下边距20像素
# 绘制水印(半透明灰色)
draw.text((x, y), text, font=font, fill=(128, 128, 128, 128)) # RGBA,A=128表示半透明
# 将水印层叠加到原图上
watermarked = Image.alpha_composite(img, txt_layer)
# 保存为与输入相同的格式(如果是JPEG,需要转回RGB)
output_path = os.path.join(output_dir, filename)
if img_path.lower().endswith('.jpg') or img_path.lower().endswith('.jpeg'):
watermarked = watermarked.convert("RGB")
watermarked.save(output_path)
print(f"已处理: {filename}")
# 使用示例
add_watermark_text(
input_dir="./my_photos", # 输入文件夹
output_dir="./my_photos_watermarked", # 输出文件夹
text="© 2024 My Name", # 水印文字
font_path="./simhei.ttf" # 字体文件路径(如果需要中文)
)
Python 脚本示例:添加图片水印(Logo)
from PIL import Image
import os
def add_watermark_logo(input_dir, output_dir, logo_path):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
logo = Image.open(logo_path).convert("RGBA")
# 如果需要调整Logo大小
# logo = logo.resize((100, 100), Image.Resampling.LANCZOS)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
img = Image.open(os.path.join(input_dir, filename)).convert("RGBA")
# 将Logo放在右下角
width, height = img.size
logo_width, logo_height = logo.size
position = (width - logo_width - 10, height - logo_height - 10)
# 创建一个透明层放置Logo
logo_layer = Image.new('RGBA', img.size, (255, 255, 255, 0))
logo_layer.paste(logo, position, logo) # 使用Logo自身的alpha通道作为遮罩
watermarked = Image.alpha_composite(img, logo_layer)
output_path = os.path.join(output_dir, filename)
if filename.lower().endswith('.jpg') or filename.lower().endswith('.jpeg'):
watermarked = watermarked.convert("RGB")
watermarked.save(output_path)
print(f"已处理: {filename}")
# 使用示例
add_watermark_logo("./photos", "./photos_logo", "./logo.png")
ImageMagick 命令行(极速、适合批量转换)
如果你熟悉命令行,ImageMagick 是目前最强大的图片处理工具之一,一条命令即可搞定批量加水印。
安装:
- Windows:下载安装包
- macOS:
brew install imagemagick - Linux:
sudo apt install imagemagick
命令示例(添加文字水印):
# 遍历所有jpg文件,添加水印 "© 2024 Me" 在右下角
for f in *.jpg; do
convert "$f" -font Arial -pointsize 36 -fill "rgba(128,128,128,0.5)" \
-draw "gravity southeast text 10,10 '© 2024 Me'" "watermarked_$f"
done
命令示例(添加图片水印):
# 将 logo.png 缩放到100x100,放在右下角 convert input.jpg logo.png -geometry 100x100 -gravity southeast -composite output.jpg
批量处理:
# 使用 mogrify 直接修改原文件(或另存)
mogrify -path ./output -font Arial -pointsize 36 -fill "rgba(128,128,128,0.5)" \
-draw "gravity southeast text 10,10 '© 2024'" *.jpg
FFmpeg 命令行(视频水印)
如果是给视频批量加水印,FFmpeg 是标准选择。
安装:
- 类似 ImageMagick
命令示例:
# 为 input.mp4 添加图片水印(logo.png),位置右下角
ffmpeg -i input.mp4 -i logo.png -filter_complex \
"overlay=W-w-10:H-h-10" -codec:a copy output.mp4
批量处理脚本(bash):
for f in *.mp4; do
ffmpeg -i "$f" -i logo.png -filter_complex \
"overlay=W-w-10:H-h-10" -codec:a copy "watermarked_$f"
done
在线工具及专业软件(无需编程)
如果你不想写代码,也有不少现成的工具:
- 专业软件: Adobe Lightroom(批量导出加水印)、Photoshop(动作+批处理)
- 在线工具: Watermark.ws、uMark 等(支持批量上传处理)
- 桌面应用: uMark(免费/收费)、Visual Watermark(简洁易用)
总结建议
- 如果你会 Python:推荐上面的 Python 脚本,灵活性最高,可定制位置、透明度、倾斜等。
- 如果你熟悉命令行:ImageMagick 一行命令即可搞定,速度极快。
- 如果你处理视频:使用 FFmpeg。
- 如果你不想碰代码:用 uMark 或 Visual Watermark 这类桌面软件。
需要哪种场景的脚本,或者需要调整水印的位置、字体、旋转角度,你可以告诉我,我可以帮你进一步完善代码。