【More Than Coding】用 SOLO 3 小时完成一个生产级数字水印 Flutter App,从算法验证到 Web 部署

1. 摘要

用 TRAE SOLO 独立完成了一款身份证照片水印保护 App「证印」,实现了隐形水印(DCT+QIM+BCH)+ 可见水印双模式。核心亮点:从零实现 BCH(31,16,3) 纠错编码、Arnold 置乱、完整 Flutter 工程化,并修复了 6 个关键算法 bug,最终 PSNR≥49dB、SSIM≥0.999,JPEG QF≥70 完全鲁棒。


2. 背景

我是一名业余开发者,经常需要处理身份证、合同等敏感证件的脱敏分享。市面上的很多水印工具要么只有可见水印(容易被裁剪),要么需要联网上传(隐私风险)。我希望做一款纯离线、双模式、高鲁棒的水印工具,但算法实现复杂度很高,尤其是 BCH 纠错编码和 DCT 频域嵌入。


3. 实践过程

任务拆解

  1. 核心算法验证(Python)
  2. Flutter 工程搭建
  3. Dart 算法移植
  4. Web 部署预览

关键操作

Step 1: 算法验证与 Bug 修复

先用 Python 实现并验证水印算法,发现了 6 个关键 bug:

Bug 修复前 修复后
BCH poly_div GF(2^5) 乘法 简单 XOR(系数在 {0,1})
BCH syndrome α^(j*i) α^((n-1-j)*i)
BCH Chien search val 初始化为 0 val=1(σ_0=1)
Arnold 逆变换 new[(i*inv)%n]=old[i] new[i]=old[(i*inv)%n]
QIM 嵌入 偏移嵌入 奇偶量化点对齐
PGZ 矩阵 S[i+j] S[i+v-1-j]

验证结果: PSNR 49.77dB,SSIM 0.9999,双模式水印 100% 可提取。

Step 2: Flutter 工程化

  • 使用 flutter_bloc + get_it 做状态管理和依赖注入
  • 图像处理用 image 包(纯 Dart,支持 Web)
  • 解决 Web 兼容问题:条件导入处理 dart:ioflutter_secure_storage Web 配置

Step 3: Web 部署

构建 Web 版本,切换 HTML renderer 解决 CanvasKit 加载问题,本地验证通过。


4. 成果展示

App 界面


5. 效果与总结

提效成果

  • 算法验证 + 工程实现 + Web 部署,全程约 3 小时
  • 独立完成原本需要 2-5 天的复杂算法移植工作

SOLO 的价值

  1. 算法 Debug 助手:帮我定位 BCH 编解码的数学错误,快速验证修复方案
  2. 跨平台移植:Python → Dart 的语法转换、条件导入处理
  3. 工程化建议:Flutter 项目结构、依赖注入最佳实践

可复用方法

  • 复杂算法先用 Python 验证,再移植到目标平台
  • Web 兼容性用条件导入 + kIsWeb 运行时检查
  • 算法类项目务必做单元测试(PSNR/SSIM/鲁棒性量化指标)

:light_bulb: 核心洞察:AI 不是替代开发者写代码,而是把需求变成产品的时间压缩到最低,让人专注于架构设计和产品体验。

1 个赞