Gemini 图片无损去水印:基于数学算法的纯前端方案
Gemini 图片通常带有半透明水印。一个基于反向 Alpha 混合算法的纯前端开源项目,可在浏览器本地无损移除水印。该方法不依赖 AI 模型修复,通过数学逆运算精确恢复原始像素,保护用户隐私且无需上传服务器。项目支持自动检测水印尺寸,提供在线工具、油猴脚本及本地部署方式,适用于需要处理 Gemini 生成图片的场景。

Gemini 图片通常带有半透明水印。一个基于反向 Alpha 混合算法的纯前端开源项目,可在浏览器本地无损移除水印。该方法不依赖 AI 模型修复,通过数学逆运算精确恢复原始像素,保护用户隐私且无需上传服务器。项目支持自动检测水印尺寸,提供在线工具、油猴脚本及本地部署方式,适用于需要处理 Gemini 生成图片的场景。

随着 Google Gemini AI 图像生成功能的普及,越来越多的用户开始使用它来创作各种精美的图片。然而,Gemini 生成的图片右下角都会带有一个半透明的水印 Logo,这在某些场景下可能会影响图片的使用效果。
本文介绍一个开源项目 gemini-watermark-remover,它能够完美无损地移除 Gemini 图片上的可见水印,而且完全在浏览器端运行,无需上传图片到服务器,充分保护用户隐私!
Gemini 使用标准的 Alpha 混合(Alpha Compositing)技术来添加水印:
watermarked = α × logo + (1 - α) × original
其中:
watermarked:带水印的像素值α:Alpha 通道值(0.0-1.0,控制透明度)logo:水印 Logo 的颜色值(白色 = 255)original:原始像素值(我们要恢复的目标)既然知道了 Gemini 添加水印的公式,我们就可以通过数学逆运算来恢复原始图像:
original = (watermarked - α × logo) / (1 - α)
关键步骤:
项目实现了智能的水印检测机制:
| 图像尺寸条件 | 水印尺寸 | 右边距 | 下边距 |
|---|---|---|---|
| 宽 > 1024 且 高 > 1024 | 96×96 | 64px | 64px |
| 其他情况 | 48×48 | 32px | 32px |
/**
* 从背景捕获图像计算 Alpha 通道
*/
export function calculateAlphaMap(bgCaptureImageData) {
const { width, height, data } = bgCaptureImageData;
const alphaMap = new Float32Array(width * height);
// 对每个像素,取 RGB 三通道最大值并归一化到 [0, 1]
for (let i = 0; i < alphaMap.length; i++) {
const idx = i * 4; // RGBA 格式,每像素 4 字节
const r = data[idx];
const g = data[idx + 1];
const b = data[idx + 2];
// 取三通道最大值作为亮度值
const maxChannel = Math.max(r, g, b);
// 归一化到 [0, 1] 范围
alphaMap[i] = maxChannel / 255.0;
}
return alphaMap;
}
/**
* 使用反向 Alpha 混合移除水印
*/
export function removeWatermark(imageData, alphaMap, position) {
const { x, y, width, height } = position;
const ALPHA_THRESHOLD = 0.002; // 忽略极小 alpha 值(噪声)
const MAX_ALPHA = 0.99; // 避免除以接近零的值
const LOGO_VALUE = 255; // 白色水印的颜色值
// 处理水印区域的每个像素
for (let row = 0; row < height; row++) {
for (let col = 0; col < width; col++) {
// 计算在原图中的索引
const imgIdx = ((y + row) * imageData.width + (x + col)) * 4;
const alphaIdx = row * width + col;
let alpha = alphaMap[alphaIdx];
// 跳过极小 alpha 值
if (alpha < ALPHA_THRESHOLD) continue;
// 限制 alpha 值避免除零
alpha = Math.min(alpha, MAX_ALPHA);
const oneMinusAlpha = 1.0 - alpha;
// 对每个 RGB 通道应用反向混合
for (let c = 0; c < 3; c++) {
const watermarked = imageData.[imgIdx + c];
original = (watermarked - alpha * ) / oneMinusAlpha;
imageData.[imgIdx + c] = .(, .(, .(original)));
}
}
}
}
/**
* 水印引擎类 - 协调整个处理流程
*/
export class WatermarkEngine {
async removeWatermarkFromImage(image) {
// 1. 创建 Canvas 处理图像
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0);
// 2. 获取图像数据
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
// 3. 检测水印配置
const config = detectWatermarkConfig(canvas.width, canvas.height);
const position = calculateWatermarkPosition(canvas.width, canvas.height, config);
// 4. 获取对应尺寸的 alpha map
const alphaMap = await this.getAlphaMap(config.logoSize);
// 5. 移除水印
removeWatermark(imageData, alphaMap, position);
// 6. 写回 Canvas
ctx.putImageData(imageData, , );
canvas;
}
}
下图展示了原图与去水印后的像素级差异对比,可以看到除了水印区域外,其他部分完全一致:

| 原图(带水印) | 处理后(无水印) |
|---|---|
![]() | ![]() |
如果你经常使用 Gemini,可以安装油猴脚本实现自动去水印:
# 克隆项目
git clone https://github.com/journey-ad/gemini-watermark-remover.git
cd gemini-watermark-remover
# 安装依赖
pnpm install
# 开发模式
pnpm dev
# 生产构建
pnpm build
# 本地预览
pnpm serve
gemini-watermark-remover/
├── public/
│ ├── index.html # 主页面
│ └── terms.html # 使用条款
├── src/
│ ├── core/ # 核心算法模块
│ │ ├── alphaMap.js # Alpha 通道计算
│ │ ├── blendModes.js # 反向混合算法
│ │ └── watermarkEngine.js # 主引擎协调器
│ ├── assets/ # 预捕获的水印资源
│ │ ├── bg_48.png # 48×48 水印 Alpha 图
│ │ └── bg_96.png # 96×96 水印 Alpha 图
│ ├── i18n/ # 国际化语言文件
│ ├── userscript/ # 油猴脚本
│ ├── app.js # 网站应用入口
│ └── i18n.js # 国际化工具
├── docs/ # 示例图片
├── dist/ # 构建输出
└── build.js # 构建脚本
Float32Array 和 Uint8ClampedArray 提升计算效率ALPHA_THRESHOLD:过滤噪声MAX_ALPHA:避免除零错误⚠️ 本工具仅供个人学习研究使用
移除水印可能涉及法律问题,请确保你的使用行为符合当地法律法规、服务条款及知识产权相关规定。
作者不鼓励将本工具用于侵权、虚假陈述或其他非法用途。
本软件按"原样"提供,不提供任何形式的保证。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online