字节笔记本

2026年2月22日

Gemini Watermark Remover - 纯浏览器端无损去水印工具

本文介绍 Gemini Watermark Remover,一个基于 JavaScript 的纯浏览器端 Gemini AI 图像无损去水印工具。该工具使用数学精确的反向 Alpha 混合算法,无需后端服务器即可在本地完成水印移除,保护用户隐私的同时提供高效的去水印体验。

项目简介

Gemini Watermark Remover 是一个开源的浏览器端图像处理工具,由 journey-ad 开发维护。截至目前,该项目在 GitHub 上已获得 2.8k+ stars335 forks,主要使用 JavaScript 和 HTML 编写。

该工具专门用于去除 Gemini AI 生成图片右下角的半透明水印 Logo,通过精确的数学算法实现无损处理,而非依赖不可预测的 AI 修复技术。

核心特性

  • 纯浏览器端处理 - 无需后端服务器,所有处理在本地完成
  • 隐私保护 - 图片不会上传到任何服务器,确保数据安全
  • 数学精确 - 基于反向 Alpha 混合算法,非 AI 模型
  • 自动检测 - 自动识别 48×48 或 96×96 水印尺寸
  • 易于使用 - 拖拽选择图片,一键处理
  • 跨平台 - 支持所有现代浏览器

技术栈

  • JavaScript (54.4%) - 核心算法实现
  • HTML (45.6%) - 用户界面
  • Canvas API - 图像处理
  • ES6 Modules - 模块化架构

算法原理

Gemini 添加水印的方式

Gemini 通过以下方式添加水印:

watermarked = α · logo + (1 - α) · original

其中:

  • watermarked: 带水印的像素值
  • α: Alpha 通道值 (0.0-1.0)
  • logo: 水印 logo 的颜色值(白色 = 255)
  • original: 原始像素值

反向求解移除水印

为了去除水印,可以反向求解如下:

original = (watermarked - α · logo) / (1 - α)

通过在纯色背景上捕获水印,我们可以重建 Alpha 通道,然后应用反向公式恢复原始图像。

使用方法

在线使用

  1. 浏览器打开 banana.ovo.re
  2. 拖拽或点击选择带水印的 Gemini 图片
  3. 图片会自动开始处理,移除水印
  4. 下载处理后的图片

油猴脚本

  1. 安装油猴插件(如 Tampermonkey 或 Greasemonkey)
  2. 打开 gemini-watermark-remover.user.js
  3. 脚本会自动安装到浏览器中
  4. Gemini 对话页面点击复制或者下载图片时,会自动移除水印

核心模块

alphaMap.js

从背景捕获图像计算 Alpha 通道:

javascript
export function calculateAlphaMap(bgCaptureImageData) {
  // 提取 RGB 通道最大值并归一化到 [0, 1]
  const alphaMap = new Float32Array(width * height);
  for (let i = 0; i < alphaMap.length; i++) {
    const maxChannel = Math.max(r, g, b);
    alphaMap[i] = maxChannel / 255.0;
  }
  return alphaMap;
}

blendModes.js

实现反向 Alpha 混合算法:

javascript
export function removeWatermark(imageData, alphaMap, position) {
  // 对每个像素应用公式:original = (watermarked - α × 255) / (1 - α)
  for (let row = 0; row < height; row++) {
    for (let col = 0; col < width; col++) {
      const alpha = Math.min(alphaMap[idx], MAX_ALPHA);
      const original = (watermarked - alpha * 255) / (1.0 - alpha);
      imageData.data[idx] = Math.max(0, Math.min(255, original));
    }
  }
}

watermarkEngine.js

主引擎类,协调整个处理流程:

javascript
export class WatermarkEngine {
  async removeWatermarkFromImage(image) {
    // 1. 检测水印尺寸
    const config = detectWatermarkConfig(width, height);
    // 2. 获取 alpha map
    const alphaMap = await this.getAlphaMap(config.logoSize);
    // 3. 移除水印
    removeWatermark(imageData, alphaMap, position);
    return canvas;
  }
}

水印检测规则

图像尺寸条件水印尺寸右边距下边距
宽 > 1024 且 高 > 102496×9664px64px
其他情况48×4832px32px

浏览器兼容性

  • ✅ Chrome 90+
  • ✅ Firefox 88+
  • ✅ Safari 14+
  • ✅ Edge 90+

需要支持:

  • ES6 Modules
  • Canvas API
  • Async/Await
  • TypedArray (Float32Array, Uint8ClampedArray)

局限性

  • 只去除了 Gemini 可见的水印(即右下角的半透明 Logo)
  • 无法去除隐形或隐写水印(了解更多关于 SynthID
  • 针对 Gemini 当前的水印模式设计(截至 2025 年)

开发

bash
# 安装依赖
pnpm install

# 开发构建
pnpm dev

# 生产构建
pnpm build

# 本地预览
pnpm serve

项目结构

text
gemini-watermark-remover/
├── public/
│   ├── index.html          # 主页面
│   └── terms.html          # 使用条款页面
├── src/
│   ├── core/
│   │   ├── alphaMap.js     # Alpha map 计算
│   │   ├── blendModes.js   # 反向 alpha 混合算法
│   │   └── watermarkEngine.js  # 主引擎
│   ├── assets/
│   │   ├── bg_48.png       # 48×48 水印背景
│   │   └── bg_96.png       # 96×96 水印背景
│   ├── i18n/               # 国际化语言文件
│   ├── userscript/         # 用户脚本
│   ├── app.js              # 网站应用入口
│   └── i18n.js             # 国际化工具
├── dist/                   # 构建输出目录
├── build.js                # 构建脚本
└── package.json

致谢

本项目是 Gemini Watermark Tool 的 JavaScript 移植版本,原作者 Allen Kuo (@allenk)。反向 Alpha 混合算法和用于校准的水印图像基于原作者的工作 © 2024 AllenK (Kwyshell),采用 MIT 许可证。

相关链接

许可证

MIT License

分享: