一个本地运行的摄影水印边框 Web App,支持上传照片、读取 EXIF 元数据、选择多种模板并导出高清水印边框图。所有处理均在浏览器本地完成,不会上传照片。可以直接点击下方链接下载对应平台的安装包。

所有安装包均已通过 GitHub Actions 自动构建,所有平台版本均已发布:
| 平台 | 安装包下载 | 体积 |
|---|---|---|
| Windows | 🚀 点击下载 .exe 安装程序 (推荐) | 1.8 MB |
| Windows | 📦 点击下载 .msi 安装包 | 2.71 MB |
| macOS | 🍎 点击下载 .dmg (通用版:支持 Intel & M1/M2/M3) | 5.49 MB |
| Linux | 🐧 点击下载 .AppImage (通用) | 76.8 MB |
| Linux | 📦 点击下载 .deb (Ubuntu/Debian) | 2.82 MB |
| Linux | 📦 点击下载 .rpm (Fedora/RedHat) | 2.82 MB |
上述链接无反应请跳转 Releases 页面 查看。
npm install
npm run dev
构建生产版本:
npm run build
npm run preview
src/
components/
TemplatePanel.jsx # 左侧模板/导入/缩放/导出面板
SettingsPanel.jsx # 右侧参数面板(可折叠)
PreviewArea.jsx # 预览区域(缩放、拖拽、滚轮)
constants/
templates.js # 模板列表与基本信息
palettes.js # 颜色方案
metadataFields.js # EXIF 字段与显示开关
utils/
canvasUtils.js # Canvas 核心渲染逻辑(模板绘制)
exifUtils.js # EXIF 读取与格式化
colorUtils.js # 辅助取色(用于玻璃效果等)
App.jsx # 状态管理与主布局
index.css # 全局样式与字体
App.jsxgetDefaultConfig():全局默认参数配置(模板、阴影、渐变、圆角等)config:所有 UI 和渲染相关的配置都在这里集中管理
canvasUtils.js
renderFrame():统一绘制入口TEMPLATE_STYLES:各模板的布局比例TEMPLATE_RENDERERS:模板绘制函数注册新模板只需完成 “模板注册 + 绘制逻辑 +(可选)UI 预览/参数”。
在 src/constants/templates.js 中添加:
{ id: 'my-template', label: 'My Template', caption: '模板描述', hasBottomBar: true }
在 src/utils/canvasUtils.js 的 TEMPLATE_STYLES 增加:
'\'my-template\'': { frameScale: 1.2, bottomScale: 1.0 }
在 canvasUtils.js 中新增绘制函数,例如:
const drawMyTemplate = (ctx, layout, config, text) => {
// 自定义绘制
}
并注册到 TEMPLATE_RENDERERS:
'\'my-template\'': drawMyTemplate
在 src/components/TemplatePanel.jsx 的 TemplatePreview 里增加一个分支,用简化的图形表示模板。
App.jsx -> getDefaultConfig() 添加默认参数SettingsPanel.jsx 内根据 config.template 条件渲染专属控制项config.paperGradientEnabled / config.paperGradientStops / config.paperGradientDirectionconfig.overlayscanvasUtils.js 的 drawOverlays()如需新增样式或功能,请按照以上结构扩展即可。
$ claude mcp add LensBorder-Pro \
-- python -m otcore.mcp_server <graph>