Gemini 无损去水印神器:基于数学算法的纯前端解决方案

Gemini 无损去水印神器:基于数学算法的纯前端解决方案

🎯 Gemini 无损去水印神器:基于数学算法的纯前端解决方案

🔗 项目地址:gemini-watermark-remover
🌐 在线体验:banana.ovo.re
⭐ 如果觉得有用,请给项目点个 Star!

📖 引言

随着 Google Gemini AI 图像生成功能的普及,越来越多的用户开始使用它来创作各种精美的图片。然而,Gemini 生成的图片右下角都会带有一个半透明的水印 Logo,这在某些场景下可能会影响图片的使用效果。

今天给大家推荐一个开源项目 gemini-watermark-remover,它能够完美无损地移除 Gemini 图片上的可见水印,而且完全在浏览器端运行,无需上传图片到服务器,充分保护用户隐私!


✨ 核心特性

🔒 100% 客户端处理,隐私至上

  • 无需后端服务器:所有图片处理都在浏览器本地完成
  • 零数据上传:图片永远不会离开你的设备
  • 即开即用:打开网页即可使用,无需注册登录

🎯 数学精确,非 AI 模型

  • 基于反向 Alpha 混合算法(Reverse Alpha Blending)
  • 不依赖 AI 模型的"幻觉"式修复
  • 数学公式保证结果的像素级精确
  • 真正的"无损"去水印

🚀 智能检测,自动适配

  • 自动识别 48×48 或 96×96 两种水印尺寸
  • 根据图片尺寸智能选择处理策略
  • 支持各种分辨率的 Gemini 生成图片

🎨 简洁易用,体验流畅

  • 拖拽上传或点击选择
  • 实时处理,秒级完成
  • 一键下载处理后的图片
  • 支持多语言界面(中文/英文)

🌐 跨平台兼容

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

🔬 技术原理深度解析

Gemini 的水印添加方式

Gemini 使用标准的 Alpha 混合(Alpha Compositing)技术来添加水印:

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

其中:

  • watermarked:带水印的像素值
  • α:Alpha 通道值(0.0-1.0,控制透明度)
  • logo:水印 Logo 的颜色值(白色 = 255)
  • original:原始像素值(我们要恢复的目标)

反向求解算法

既然知道了 Gemini 添加水印的公式,我们就可以通过数学逆运算来恢复原始图像:

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

关键步骤:

  1. 捕获 Alpha 通道:在纯色背景上提取水印,重建 Alpha 映射表
  2. 应用逆公式:对每个像素应用反向混合公式
  3. 边界处理:限制 Alpha 值范围,避免除零错误
  4. 像素裁剪:确保结果在 [0, 255] 范围内

水印检测规则

项目实现了智能的水印检测机制:

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

💻 核心代码实现

1. Alpha Map 计算

/** * 从背景捕获图像计算 Alpha 通道 */exportfunctioncalculateAlphaMap(bgCaptureImageData){const{ width, height, data }= bgCaptureImageData;const alphaMap =newFloat32Array(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;}

2. 反向 Alpha 混合

/** * 使用反向 Alpha 混合移除水印 */exportfunctionremoveWatermark(imageData, alphaMap, position){const{ x, y, width, height }= position;constALPHA_THRESHOLD=0.002;// 忽略极小 alpha 值(噪声)constMAX_ALPHA=0.99;// 避免除以接近零的值constLOGO_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.data[imgIdx + c];// 反向 alpha 混合公式const original =(watermarked - alpha *LOGO_VALUE)/ oneMinusAlpha;// 裁剪到 [0, 255] 范围 imageData.data[imgIdx + c]= Math.max(0, Math.min(255, Math.round(original)));}}}}

3. 主引擎协调

/** * 水印引擎类 - 协调整个处理流程 */exportclassWatermarkEngine{asyncremoveWatermarkFromImage(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 mapconst alphaMap =awaitthis.getAlphaMap(config.logoSize);// 5. 移除水印removeWatermark(imageData, alphaMap, position);// 6. 写回 Canvas ctx.putImageData(imageData,0,0);return canvas;}}

🎬 效果展示

无损对比图

下图展示了原图与去水印后的像素级差异对比,可以看到除了水印区域外,其他部分完全一致

无损 diff 示例

实际案例

原图(带水印)处理后(无水印)
示例1
在这里插入图片描述
处理后1
在这里插入图片描述

🚀 使用方法

方式一:在线网站(推荐)

  1. 打开 banana.ovo.re
  2. 拖拽或点击选择带水印的 Gemini 图片
  3. 等待自动处理(通常只需 1-2 秒)
  4. 点击下载按钮保存处理后的图片

方式二:油猴脚本(进阶)

如果你经常使用 Gemini,可以安装油猴脚本实现自动去水印

  1. 安装 TampermonkeyGreasemonkey
  2. 打开脚本地址:gemini-watermark-remover.user.js
  3. 点击安装
  4. 在 Gemini 对话页面,点击"复制图片"或"下载图片"时会自动去除水印

方式三:本地部署

# 克隆项目git clone https://github.com/journey-ad/gemini-watermark-remover.git cd gemini-watermark-remover # 安装依赖pnpminstall# 开发模式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 # 构建脚本 

🎓 技术亮点总结

1. 数学严谨性

  • 基于标准的 Alpha 混合公式
  • 通过逆运算精确恢复原始像素
  • 避免了 AI 模型的不确定性

2. 性能优化

  • 使用 Float32ArrayUint8ClampedArray 提升计算效率
  • Alpha Map 缓存机制减少重复计算
  • Canvas API 硬件加速

3. 边界处理

  • ALPHA_THRESHOLD:过滤噪声
  • MAX_ALPHA:避免除零错误
  • 像素值裁剪:确保结果合法

4. 工程化实践

  • ES6 模块化设计
  • 清晰的代码注释
  • 完善的错误处理
  • 国际化支持

⚠️ 重要说明

局限性

  1. 仅移除可见水印:只能去除右下角的半透明 Logo
  2. 无法处理隐形水印:不能去除 SynthID 等隐写水印
  3. 版本依赖:针对 Gemini 当前(2025年)的水印模式设计

免责声明

⚠️ 本工具仅供个人学习研究使用

移除水印可能涉及法律问题,请确保你的使用行为符合:当地法律法规Gemini 服务条款知识产权相关规定

作者不鼓励将本工具用于侵权、虚假陈述或其他非法用途。

本软件按"原样"提供,不提供任何形式的保证。

🌟 为什么推荐这个项目?

1. 技术价值

  • 展示了如何用纯数学方法解决实际问题
  • 代码简洁优雅,适合学习 Canvas API 和图像处理
  • 完整的工程化实践案例

2. 实用价值

  • 真正解决了 Gemini 用户的痛点
  • 完全免费开源
  • 隐私保护做得很好

3. 学习价值

  • 理解 Alpha 混合原理
  • 学习浏览器端图像处理
  • 掌握 TypedArray 的使用

🔗 相关资源


🎉 总结

gemini-watermark-remover 是一个技术上严谨、实用性强、隐私保护到位的开源项目。它用优雅的数学方法解决了 Gemini 图片水印问题,代码质量高,值得学习和使用。

如果你:

  • 经常使用 Gemini 生成图片
  • 对图像处理算法感兴趣
  • 想学习浏览器端的高性能计算
  • 关注用户隐私保护

那么这个项目绝对值得你关注!

别忘了给项目点个 ⭐ Star,支持开源!


📮 互动交流

欢迎在评论区分享:

  • 你使用这个工具的体验
  • 对算法原理的理解和疑问
  • 其他有趣的图像处理技巧

让我们一起学习进步!💪


Read more

【Python】2026动态文字壁纸,一键让你的桌面加上烟花效果和今日任务事项

【Python】2026动态文字壁纸,一键让你的桌面加上烟花效果和今日任务事项

🌹欢迎来到《小5讲堂》🌹 🌹这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹 目录 * 前言 * 效果 * 实现过程 * 一、技术架构概览 * 1.1 核心技术栈 * 1.2 程序结构 * 二、详细实现步骤分析 * 2.1 核心类设计 * 步骤1:烟花粒子系统设计 * 步骤2:烟花类设计 * 步骤3:爆炸效果算法 * 步骤4:任务项设计 * 2.2 系统初始化 * 步骤5:主程序初始化 * 2.3 用户界面设计 * 步骤6:界面布局 * 步骤7:数据持久化 * 步骤8:任务管理功能 * 2.

By Ne0inhk
进来了解一下python的深浅拷贝

进来了解一下python的深浅拷贝

深浅拷贝是什么:在Python中,理解深拷贝(deep copy)和浅拷贝(shallow copy)对于处理复杂的数据结构,如列表、字典或自定义对象,是非常重要的。这两种拷贝方式决定了数据在内存中的复制方式,进而影响程序的运行结果 浅拷贝: 1. 浅拷贝的定义: 浅拷贝是一种复制操作,它创建一个新对象,并将原对象的内容复制到新对象中。对于原对象内部的子对象,浅拷贝不会递归地复制它们,而是直接引用这些子对象。因此,浅拷贝后的对象和原对象共享内部的子对象。 2. 浅拷贝的实现方式 (1)使用 copy 模块的 copy() 函数 import copy original_list = [1, 2, [3, 4]] shallow_copied_list = copy.copy(original_list)  (2)使用列表、

By Ne0inhk

Python 真实世界的数据科学(十二)

原文:Python: Real-World Data Science 协议:CC BY-NC-SA 4.0 四十二、使用回归分析预测连续目标变量 在前几章中,您了解了监督学习背后的主要概念,并为分类任务训练了许多不同的模型以预测组成员或分类变量。 在本章中,我们将深入研究监督学习的另一个子类别:回归分析。 回归模型用于在连续规模上预测目标变量,这使它们对于解决科学和工业应用中的许多问题具有吸引力,例如理解变量之间的关系,评估趋势或进行预测。 一个例子是预测未来几个月公司的销售额。 在本章中,我们将讨论回归模型的主要概念,并涉及以下主题: * 探索和可视化数据集 * 研究实现线性回归模型的不同方法 * 训练对异常值具有鲁棒性的回归模型 * 评估回归模型并诊断常见问题 * 将回归模型拟合到非线性数据 介绍一个简单的线性回归模型 简单(单变量)线性回归的目标是为单个特征(解释变量x)与连续值响应之间的关系建模的模型( 目标变量和)。 具有一个解释变量的线性模型方程定义如下: https://github.com/OpenDocCN/freelearn-ds-z

By Ne0inhk
Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

摘要:本文将介绍Ubuntu系统下如何使用Python连接国产金仓数据库KingbaseES,并实现基本的增删改查操作。文中将通过具体代码示例展示连接数据库、执行SQL语句以及处理结果的全过程。这里把Python连接KingbaseES的经验整理一下,希望能帮到同样踩坑的兄弟。 目录 1.环境准备与驱动安装 1.1 科普ksycopg2知识 1.2 官方下载ksycopg2驱动 1.3 安装ksycopg2驱动 2. 连接KingbaseES数据库 3. 创建数据表 4. 实现增删改查功能 4.1 新增 4.2 查询 4.3 修改 4.4 删除 4.5 封装一个类crud方便复用 5.总结 1.环境准备与驱动安装 KingbaseES提供了专门的Python驱动包ksycopg2,它是基于Python DB API 2.0规范实现的线程安全数据库适配器!

By Ne0inhk