这是基于 gemini-watermark-remover 核心算法的微信小程序版本,可以在微信中方便地移除 Nano Banana 生成图片的水印。
相比原项目,本小程序版本增加了以下特性:
- 🚀 性能优化:区域处理算法,速度提升 10-75 倍,支持 8K 超大图片
- 📦 批量处理:一次处理多张图片,提高工作效率
- 🔍 滑动对比:实时对比处理前后效果
- 📊 进度显示:实时显示处理进度和状态
从左到右:选择图片 → 批量处理 → 滑动对比效果
- 无损移除:采用反向 Alpha 混合算法,数学方法精确还原原图
- 极速处理:区域优化算法,毫秒级完成处理(4K 图片仅需 40ms)
- 超大图片支持:可处理 8K 及以上超大图片,不压缩不崩溃
- 批量处理:支持一次选择多张图片(最多 9 张)进行批量处理
- 实时对比:滑动分屏对比器,直观查看处理前后效果
- 进度显示:实时显示批量处理进度和完成状态
- 批量保存:支持一键保存所有处理完成的图片到相册
- 本地处理:所有处理在本地完成,保护隐私安全
- 智能识别:自动检测并支持 48×48 和 96×96 两种水印尺寸
- 极低内存:优化后内存占用降低 100-7000 倍
从微信官方网站下载并安装微信开发者工具。
- 打开微信开发者工具
- 点击"导入项目"
- 选择本项目的根目录作为项目目录
- 填写 AppID(可以使用测试号)
- 点击"导入"
- 点击工具栏的"编译"按钮
- 在模拟器中查看效果
- 或使用"预览"功能在真机上测试
-
选择图片
- 点击"选择图片"按钮
- 可一次选择 1-9 张带有 Nano Banana 水印的图片
- 系统会自动检测每张图片的尺寸和水印大小
-
处理水印
- 单张处理:点击图片卡片上的"处理"按钮
- 批量处理:点击底部"批量处理"按钮一次处理所有图片
- 实时查看处理进度和完成状态
-
对比效果
- 处理完成后,使用滑动对比器查看处理前后效果
- 左右滑动分割线,直观对比原图和处理后的图片
-
保存图片
- 单张保存:长按图片选择保存
- 批量保存:点击"批量保存"按钮一键保存所有已处理的图片
- 首次使用需要授权相册访问权限
Gemini-Remover-Mini/
├── app.js # 小程序入口
├── app.json # 小程序配置
├── app.wxss # 全局样式
├── pages/
│ └── index/ # 主页面
│ ├── index.wxml # 页面结构
│ ├── index.wxss # 页面样式
│ ├── index.js # 页面逻辑
│ └── index.json # 页面配置
├── utils/ # 工具模块
│ ├── blendModes.js # 反向 Alpha 混合算法
│ ├── alphaMap.js # Alpha 图计算
│ └── watermarkEngine.js # 水印引擎
├── assets/ # 资源文件
│ ├── bg_48.png # 48×48 水印背景
│ └── bg_96.png # 96×96 水印背景
├── docs/ # 文档目录
├── project.config.json # 项目配置
├── README.md # 项目说明
├── DEVELOPMENT.md # 开发指南
└── PERFORMANCE.md # 性能优化说明
Nano Banana 使用标准 Alpha 混合公式添加水印:
watermarked = α × logo + (1 - α) × original
通过数学反推,我们可以恢复原图:
original = (watermarked - α × logo) / (1 - α)
其中:
watermarked:带水印的像素值α:Alpha 通道值(0.0 - 1.0)logo:水印颜色值(白色 = 255)original:原始像素值
根据 Nano Banana 的水印规则:
- 图片宽高都 > 1024px:使用 96×96 水印,边距 64px
- 其他情况:使用 48×48 水印,边距 32px
- 水印位置:右下角
- 微信小程序框架
- Canvas 2D API
- TypedArray(Float32Array)
- ES6+ JavaScript
微信小程序基础库版本:3.12.1
建议使用微信版本:≥ 7.0.0
详细的开发指南请参考 DEVELOPMENT.md,包含:
- 开发环境设置
- Canvas API 使用方法
- 核心模块详细说明
- 调试技巧和常见问题解决
问题:提示"Canvas 未初始化"
解决:
- 确保页面已完全加载
- 检查 WXML 中是否正确添加了 Canvas 元素
- 在真机上测试而非仅在模拟器
问题:点击"移除水印"后报错
解决:
- 确认图片确实带有 Nano Banana 水印
- 检查图片格式(支持 JPEG、PNG、WebP)
- 确保图片尺寸不要过大(建议 < 4096×4096)
问题:保存时提示需要授权
解决:
- 首次使用会请求相册权限,点击"允许"
- 如果误点"拒绝",点击"去设置"重新授权
- 在设置中找到小程序,开启"保存到相册"权限
问题:处理后仍有轻微痕迹
原因:
- 图片经过压缩导致精度损失
- 图片本身不是 Nano Banana 原图
- 图片已经过其他编辑
- 图片多次经由 Nano Banana 编辑,存在双重水印
建议:
- 使用 Nano Banana 直接导出的原图
- 避免使用经过压缩或编辑的图片
本项目采用只处理水印区域的优化策略,相比处理整张图片:
- 内存占用降低 100-7000 倍:4096×4096 图片从 67MB 降至 36KB
- 处理速度提升 10-75 倍:大图处理从 3 秒降至 40 毫秒
- 支持超大图片:8192×8192 等超大图片也可流畅处理,不会崩溃
| 图片尺寸 | 处理时间 | 内存占用 |
|---|---|---|
| 512×512 | ~5ms | 9KB |
| 1024×1024 | ~10ms | 9KB |
| 2048×2048 | ~20ms | 36KB |
| 4096×4096 | ~40ms | 36KB |
| 8192×8192 | ~80ms | 36KB |
- Alpha 图缓存:已处理的 Alpha 图会缓存,避免重复计算
- 离屏渲染:使用离屏 Canvas 处理,不影响 UI
- 异步处理:图像处理采用异步方式,不阻塞主线程
- 噪点过滤:跳过极小 Alpha 值,减少不必要的计算
- 设备性能检测:根据设备性能自动调整动画效果
详细的性能优化说明请参考 PERFORMANCE.md
- 本地处理:所有图像处理在设备本地完成
- 不上传数据:图片不会上传到任何服务器
- 不保存数据:处理后的图片仅保存在用户相册
本项目遵循原项目的开源许可证。
本项目基于 gemini-watermark-remover 核心算法开发,感谢原作者 @journey-ad 的开源贡献。
