在日常的图片处理、文档整理工作中,我们常会遇到 AI 生成图片带平台水印、PDF 文档含专属水印的问题,这类水印不仅影响素材的视觉效果,还会在素材二次加工、文档整理使用时带来诸多不便。市面上不少去水印工具要么存在付费订阅、注册门槛,要么仅支持单一平台水印处理,部分工具还需要将素材上传至云端,存在隐私泄露的风险。而本次分享的这款去水印工具,完美解决了上述所有痛点,基于专属算法实现多类型水印的无损处理,且全程本地运行,兼顾实用性与安全性。

一、工具核心功能与技术特点

  1. 多场景水印处理支持:可精准识别并移除 Gemini(Nano banano)系列图片水印、豆包、可灵、即梦等 AI 平台的图片水印,同时支持 NotebookLM PDF 文档的图片及文档水印处理,覆盖主流 AI 创作平台的水印类型。
  2. 双模式去水印机制:内置 AI 智能识别算法,可自动定位水印区域并实现一键清除;同时提供手动涂抹功能,支持自定义标记需要擦除的区域,满足精细化处理需求。
  3. 专属优化算法加持:针对 Gemini 水印采用反向 Alpha 混合算法,可最大程度还原图片原始画质,实现无损去水印;针对 PDF 水印则搭载专业修复算法,处理后文档格式、画质无损坏。
  4. 本地运行保障隐私:所有处理流程均在浏览器本地完成,素材无需上传至任何云端服务器,从根源上避免了图片、文档等素材的隐私泄露问题,适合处理各类私密素材。
  5. 零门槛无成本使用:无需注册账户、无需进行付费订阅,无任何隐藏功能限制,打开工具后直接上传素材即可进行处理,毫秒级响应速度,单张图片、单份 PDF 可实现秒级处理,也支持批量图片水印处理。

二、工具适用场景分析

  1. AI 创作素材二次加工:从事 AI 绘画、AI 图文创作的从业者,在使用各平台生成的图片素材时,可通过该工具快速去除平台水印,便于素材在图文编辑、视频制作、海报设计等场景中的二次加工与使用。
  2. 办公文档整理优化:职场办公人员在整理 NotebookLM 生成的 PDF 文档时,可清除文档中的专属水印,让文档在汇报、分享、归档等场景中更显整洁规范,提升办公文档的专业性。
  3. 素材收藏与整理:普通用户在收藏各平台优质 AI 图片、PDF 文档时,去除水印后可让收藏的素材更美观,便于后续的分类整理和本地查看,提升素材收藏的体验。
  4. 多平台素材整合处理:需要同时使用多个 AI 平台创作素材的用户,可通过该工具一站式处理不同平台的水印,无需切换多款去水印工具,大幅提升素材处理的整体效率。
  5. 精细化素材处理:对于水印位置特殊、智能识别难以精准处理的素材,可通过手动涂抹模式进行精准擦除,满足设计、创作等场景中对素材的精细化处理要求。

三、工具完整实操使用教程

该工具为浏览器端在线工具,无需下载安装任何客户端,仅需通过主流浏览器打开即可使用,分图片去水印和 PDF 水印处理两大模块,操作流程如下:

(一)图片去水印操作(自动 + 手动模式)
  1. 打开工具后,找到「图片去水印」核心模块,选择对应平台的水印处理入口(如 Gemini 水印处理、豆包 / 可灵水印处理),也可选择通用图片去水印入口。
  2. 点击「上传图片」按钮,选择本地需要处理的单张或多张图片,工具支持主流图片格式,上传后会自动加载并完成图片解析。
  3. 自动识别模式:图片加载完成后,工具会通过 AI 算法自动识别水印区域并进行标记,确认无误后点击「一键清除」,毫秒级即可完成处理,处理完成后点击「下载图片」即可保存至本地。
  4. 手动涂抹模式:若自动识别未精准覆盖水印区域,切换至「手动涂抹」功能,使用画笔工具在图片上标记需要擦除的水印区域,画笔大小可自由调节,标记完成后点击「修复」,工具会对标记区域进行智能修复,修复完成后下载即可。
(二)NotebookLM PDF 水印处理
  1. 进入工具的「PDF 水印处理」模块,该模块支持图片格式 PDF 和文字格式 PDF 的水印处理,无需对 PDF 进行格式转换。
  2. 点击「上传 PDF」,选择本地需要处理的 PDF 文档,工具会自动完成文档解析,解析速度根据文档大小有所不同,常规大小文档可实现秒级解析。
  3. 解析完成后,工具会通过修复算法自动识别并清除 PDF 中的水印,全程无需手动操作,处理完成后会生成新的 PDF 文件。
  4. 确认 PDF 水印处理效果后,点击「下载文档」,即可将无水印的 PDF 文件保存至本地,处理后的 PDF 文档保留原始排版、字体及内容,无任何格式错乱。
(三)批量图片去水印操作
  1. 针对需要批量处理的图片素材,选择工具的「批量去水印」入口,点击「批量上传」,一次性选择本地多张需要处理的图片,支持批量解析。
  2. 上传完成后,工具会对所有图片进行批量智能识别水印,点击「批量清除」,即可实现多张图片的秒级批量处理,处理完成后可选择「批量下载」将所有无水印图片保存至本地,也可单张下载查看。

四、工具使用注意事项

  1. 该工具基于浏览器本地运行,建议使用最新版本的主流浏览器打开,避免因浏览器版本过低导致功能无法正常使用。
  2. 处理大尺寸图片或大容量 PDF 时,建议关闭浏览器其他无关标签页,保证工具运行的流畅性,提升处理速度。
  3. 手动涂抹模式中,标记水印区域时尽量贴合水印边缘,避免过度标记导致图片正常区域被修复,影响整体画质。
  4. 批量处理图片时,建议控制单次上传的图片数量,避免因一次性上传过多导致浏览器卡顿,根据自身电脑配置合理选择批量处理数量。

相关的软件教程都已经打包好了放在网盘,私信我备注文章标题获取完整软件教程。

import cv2
import numpy as np
from PIL import Image
import tkinter as tk
from tkinter import filedialog, Canvas, Button, Label, Scale, HORIZONTAL
import os

class LocalWatermarkRemover:
    def __init__(self):
        # 初始化参数
        self.image_path = None
        self.original_image = None
        self.processed_image = None
        self.temp_image = None  # 用于手动涂抹的临时图像
        self.draw_points = []   # 手动涂抹的坐标点
        self.root = tk.Tk()
        self.root.title("本地图片去水印工具")
        self.root.geometry("800x600")
        
        # 创建UI组件
        self._create_ui()

    def _create_ui(self):
        # 选择图片按钮
        self.select_btn = Button(self.root, text="选择图片", command=self.select_image)
        self.select_btn.pack(pady=10)

        # 自动去水印按钮
        self.auto_btn = Button(self.root, text="AI自动去水印", command=self.auto_remove_watermark, state=tk.DISABLED)
        self.auto_btn.pack(pady=5)

        # 手动涂抹修复相关
        self.draw_label = Label(self.root, text="手动涂抹水印区域(拖动鼠标绘制)")
        self.draw_label.pack(pady=5)
        self.brush_scale = Scale(self.root, from_=1, to=20, orient=HORIZONTAL, label="画笔大小")
        self.brush_scale.set(5)
        self.brush_scale.pack(pady=5)
        
        self.canvas = Canvas(self.root, width=700, height=400, bg="white")
        self.canvas.pack(pady=10)
        self.canvas.bind("<B1-Motion>", self.draw_on_canvas)

        self.manual_btn = Button(self.root, text="修复涂抹区域", command=self.manual_remove_watermark, state=tk.DISABLED)
        self.manual_btn.pack(pady=5)

        # 保存图片按钮
        self.save_btn = Button(self.root, text="保存处理后图片", command=self.save_image, state=tk.DISABLED)
        self.save_btn.pack(pady=5)

    def select_image(self):
        """选择本地图片"""
        file_path = filedialog.askopenfilename(
            filetypes=[("图片文件", "*.jpg *.jpeg *.png *.bmp")]
        )
        if not file_path:
            return
        
        self.image_path = file_path
        # 读取图片并转换格式(OpenCV为BGR,PIL为RGB)
        self.original_image = cv2.imread(file_path)
        self.processed_image = self.original_image.copy()
        self.temp_image = self.original_image.copy()

        # 调整图片尺寸适配画布
        img = self._resize_image(self.original_image, 700, 400)
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img_pil = Image.fromarray(img_rgb)
        
        # 在画布显示图片
        self.canvas.image = img_pil
        self.canvas.create_image(0, 0, anchor=tk.NW, image=self._pil_to_tkimage(img_pil))

        # 启用功能按钮
        self.auto_btn.config(state=tk.NORMAL)
        self.manual_btn.config(state=tk.NORMAL)
        self.save_btn.config(state=tk.DISABLED)
        self.draw_points.clear()

    def _resize_image(self, img, max_width, max_height):
        """等比例调整图片尺寸"""
        h, w = img.shape[:2]
        scale = min(max_width/w, max_height/h)
        new_w, new_h = int(w*scale), int(h*scale)
        return cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_AREA)

    def _pil_to_tkimage(self, img_pil):
        """PIL图片转Tkinter图片"""
        import PIL.ImageTk as ImageTk
        return ImageTk.PhotoImage(img_pil)

    def draw_on_canvas(self, event):
        """在画布上手动涂抹标记水印区域"""
        if self.temp_image is None:
            return
        brush_size = self.brush_scale.get()
        # 记录涂抹坐标(还原到原始图片尺寸)
        h, w = self.temp_image.shape[:2]
        canvas_w = self.canvas.winfo_width()
        canvas_h = self.canvas.winfo_height()
        scale_x = w / canvas_w
        scale_y = h / canvas_h
        x = int(event.x * scale_x)
        y = int(event.y * scale_y)
        self.draw_points.append((x, y))
        # 在画布上绘制涂抹痕迹
        self.canvas.create_oval(
            event.x - brush_size, event.y - brush_size,
            event.x + brush_size, event.y + brush_size,
            fill="red", outline="red"
        )

    def auto_remove_watermark(self):
        """AI自动去水印(基于轮廓检测+inpaint修复)"""
        if self.original_image is None:
            return
        
        # 1. 灰度化+二值化,提取水印轮廓
        gray = cv2.cvtColor(self.original_image, cv2.COLOR_BGR2GRAY)
        # 自适应二值化(适配不同亮度的水印)
        thresh = cv2.adaptiveThreshold(
            gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
            cv2.THRESH_BINARY_INV, 11, 2
        )

        # 2. 轮廓检测,筛选水印区域
        contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        mask = np.zeros(gray.shape, dtype=np.uint8)
        for cnt in contours:
            # 过滤过小的轮廓(排除噪点)
            area = cv2.contourArea(cnt)
            if 50 < area < 5000:  # 可根据水印大小调整阈值
                cv2.drawContours(mask, [cnt], -1, 255, -1)

        # 3. 图像修复(INPAINT_NS算法,修复效果更自然)
        self.processed_image = cv2.inpaint(
            self.original_image, mask, 3, cv2.INPAINT_NS
        )

        # 显示处理后的图片
        img_show = self._resize_image(self.processed_image, 700, 400)
        img_rgb = cv2.cvtColor(img_show, cv2.COLOR_BGR2RGB)
        img_pil = Image.fromarray(img_rgb)
        self.canvas.create_image(0, 0, anchor=tk.NW, image=self._pil_to_tkimage(img_pil))
        self.save_btn.config(state=tk.NORMAL)

    def manual_remove_watermark(self):
        """手动涂抹区域去水印(inpaint修复)"""
        if self.original_image is None or not self.draw_points:
            return
        
        # 创建涂抹区域的掩码
        mask = np.zeros(self.original_image.shape[:2], dtype=np.uint8)
        brush_size = self.brush_scale.get()
        for (x, y) in self.draw_points:
            # 绘制圆形涂抹区域
            cv2.circle(mask, (x, y), brush_size, 255, -1)

        # 图像修复
        self.processed_image = cv2.inpaint(
            self.original_image, mask, 3, cv2.INPAINT_TELEA
        )

        # 显示处理后的图片
        img_show = self._resize_image(self.processed_image, 700, 400)
        img_rgb = cv2.cvtColor(img_show, cv2.COLOR_BGR2RGB)
        img_pil = Image.fromarray(img_rgb)
        self.canvas.create_image(0, 0, anchor=tk.NW, image=self._pil_to_tkimage(img_pil))
        self.save_btn.config(state=tk.NORMAL)

    def save_image(self):
        """保存处理后的图片"""
        if self.processed_image is None:
            return
        
        save_path = filedialog.asksaveasfilename(
            defaultextension=".png",
            filetypes=[("PNG图片", "*.png"), ("JPG图片", "*.jpg")]
        )
        if save_path:
            cv2.imwrite(save_path, self.processed_image)

    def run(self):
        """运行工具"""
        self.root.mainloop()

if __name__ == "__main__":
    # 安装依赖(首次运行需执行)
    # pip install opencv-python numpy pillow tkinter
    remover = LocalWatermarkRemover()
    remover.run()

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐