# RemoveImageWatermark **Repository Path**: yangjuncom/remove-image-watermark ## Basic Information - **Project Name**: RemoveImageWatermark - **Description**: 图片水印去除工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-10 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Remove Image Watermark(.NET 控制台图片去水印工具) 纯 **.NET 8 控制台** 程序,在**不裁剪、不改变分辨率**的前提下,对图片中**疑似水印区域**做检测并用 **Inpaint** 做局部修复。适用于常见角标、页脚叠字、半透明浅色覆盖等场景;**不保证**对任意水印或版式 100% 无痕,且为**保护正文**,算法主要作用于**四角与底部居中条带**,画面中部默认不参与修复。 --- ## 一键发布到 GitHub(已配好脚本) 本地仓库已 `git init` 且默认分支为 **`main`**。你只需提供 **GitHub 用户名、仓库名、PAT(个人访问令牌)**,脚本会自动创建远程仓库(若尚未创建)并执行 `git push`。 1. 在浏览器打开:[创建 Personal access token](https://github.com/settings/tokens)(经典 token 即可),勾选 **`repo`**,生成后复制令牌(以 `ghp_` 开头)。 2. 任选一种方式执行: **方式 A — 双击批处理(最简单)** - 在资源管理器中双击仓库根目录下的 **`Publish-To-GitHub.bat`**,按提示输入用户名和仓库名;若未设置环境变量 `GITHUB_TOKEN`,脚本会提示输入 PAT。 **方式 B — PowerShell 一行(可先设环境变量免交互输入令牌)** ```powershell cd "C:\Remove Image Watermark" # 或你克隆后的仓库根目录 $env:GITHUB_TOKEN = "ghp_你的令牌" .\tools\Publish-ToGitHub.ps1 -GitHubUser "你的GitHub用户名" -RepoName "remove-image-watermark" ``` 脚本会:调用 GitHub API 创建 **`https://github.com/<用户>/<仓库>`** → 配置 `origin` → 推送 `main` → 最后把远程 URL 改回**不含令牌的** `https://github.com/...`,降低令牌残留在配置里的风险。 > 说明:我无法代替你登录 GitHub;**最后一步推送必须在你本机**用上述方式完成一次即可。 --- ## 功能概览 | 功能 | 说明 | |------|------| | 本地图片 | 支持手动输入完整路径;校验扩展名与文件头(魔数) | | 网络图片 | 支持 `http/https` URL 下载后再处理 | | 输出 | 菜单模式:默认保存到工程下 `RemoveImageWatermark/Output/`,文件名前缀 `无水印_`;可自定义目录 | | 批处理 | 支持命令行两参数:输入路径、输出完整路径(不添加前缀,扩展名决定格式) | | 格式 | **JPG、PNG、BMP、WEBP**(编码尽量与原扩展名一致;JPEG/WebP 使用较高质量参数) | | 交互 | 极简菜单:`1` 本地 / `2` URL / `3` 打开输出目录 / `0` 退出;异常有简短提示 | --- ## 技术栈 - **SixLabors.ImageSharp**:解码、格式校验、编码保存 - **OpenCvSharp4** + **OpenCvSharp4.runtime.win**:掩膜估计、**Telea Inpaint**(Windows 运行需自带 native 运行时) > 当前 NuGet 引用包含 **Windows x64** 的 OpenCV 本机库。若在 Linux/macOS 上构建,需改用对应平台的 OpenCvSharp runtime 包并自行测试。 --- ## 环境要求 - [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) - Windows(与当前 OpenCvSharp runtime 包一致) --- ## 快速开始 ```bash # 克隆后进入仓库根目录(该目录下应有 RemoveImageWatermark.sln) cd <你的仓库根目录> # 编译 dotnet build RemoveImageWatermark/RemoveImageWatermark.csproj -c Release # 运行(交互菜单) dotnet run --project RemoveImageWatermark/RemoveImageWatermark.csproj -c Release ``` 可执行文件路径示例(相对仓库根): `RemoveImageWatermark/bin/Release/net8.0/RemoveImageWatermark.exe` ### 批处理示例 ```bash RemoveImageWatermark.exe "D:\in.png" "D:\out.png" ``` --- ## 路径说明(克隆到任意目录) 默认从**可执行文件所在目录向上查找** `RemoveImageWatermark.csproj`,以确定工程目录,输出为 **`工程目录\Output`**。 可选:设置环境变量 **`REMOVE_WATERMARK_ROOT`** 为**仓库根目录**(即包含子文件夹 `RemoveImageWatermark` 的那一层),则工程目录固定为 `%REMOVE_WATERMARK_ROOT%\RemoveImageWatermark`。 若两者均失败,会回退到历史路径 `C:\Remove Image Watermark\RemoveImageWatermark`(便于旧环境兼容)。 --- ## 项目结构与源码对应关系 | 路径 | 作用 | |------|------| | `RemoveImageWatermark.sln` | Visual Studio / `dotnet sln` 解决方案 | | `RemoveImageWatermark/RemoveImageWatermark.csproj` | SDK 风格工程文件、NuGet 引用 | | `RemoveImageWatermark/Program.cs` | 程序入口:菜单循环、命令行批处理、异常提示 | | `RemoveImageWatermark/AppPaths.cs` | 工程目录解析、默认输出路径、文件名前缀常量 | | `RemoveImageWatermark/ImageFormatSupport.cs` | 扩展名白名单、ImageSharp 探测与加载校验 | | `RemoveImageWatermark/ImagePipeline.cs` | 解码 → OpenCV 处理 → 回写 ImageSharp 的管线编排 | | `RemoveImageWatermark/PixelBridge.cs` | ImageSharp `Rgba32` 与 OpenCV `Mat`(BGR/BGRA)互转 | | `RemoveImageWatermark/WatermarkRemovalService.cs` | 水印掩膜构建(允许区域、多尺度残差、分区域 Otsu、形态学、Inpaint) | | `RemoveImageWatermark/ImageSaveHelper.cs` | 按菜单规则或批处理路径保存图片 | | `RemoveImageWatermark/appsettings.json` | 说明性配置(程序逻辑以代码为准) | | `RemoveImageWatermark/Output/` | 默认输出目录(仓库内仅保留 `.gitkeep`) | | `tools/Publish-ToGitHub.ps1` | 创建 GitHub 仓库并推送 `main`(需 PAT) | | `Publish-To-GitHub.bat` | 双击调用上述脚本(ASCII 文件名,避免部分环境乱码) | --- ## 算法与使用限制(重要) - 掩膜主要限制在**四角矩形**与**底部居中条带**,避免把版心正文误判为水印而导致字体发糊、变形。 - 因此:**位于画面中央的水印**可能无法去除或效果有限。 - 经典 CV + Inpaint **不是**深度学习「智能抠水印」,复杂或全屏水印需另寻方案。 --- ## 开源协议 本仓库默认附带 [MIT License](LICENSE)。你可按需在仓库中修改版权行(`Copyright`)为你的名字或组织。 --- ## 手动上传 GitHub(可选,与脚本二选一) 若不想用 PAT 脚本,也可在网页新建空仓库后手动推送: ```bash cd <仓库根目录> git remote add origin https://github.com/<你的用户名>/<仓库名>.git git push -u origin main ``` 首次在本机使用 Git 若提示配置身份: ```bash git config --global user.name "你的名字" git config --global user.email "你的邮箱" ```