实用脚本能批量加水印吗?

wen 实用脚本 1

本文目录导读:

实用脚本能批量加水印吗?

  1. Python 脚本(最灵活、推荐,适合图片)
  2. ImageMagick 命令行(极速、适合批量转换)
  3. FFmpeg 命令行(视频水印)
  4. 在线工具及专业软件(无需编程)
  5. 总结建议

当然可以,批量给图片、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(简洁易用)

总结建议

  1. 如果你会 Python:推荐上面的 Python 脚本,灵活性最高,可定制位置、透明度、倾斜等。
  2. 如果你熟悉命令行:ImageMagick 一行命令即可搞定,速度极快。
  3. 如果你处理视频:使用 FFmpeg。
  4. 如果你不想碰代码:用 uMark 或 Visual Watermark 这类桌面软件。

需要哪种场景的脚本,或者需要调整水印的位置、字体、旋转角度,你可以告诉我,我可以帮你进一步完善代码。

抱歉,评论功能暂时关闭!