一款开源、本地优先的平板壁纸拼图软件。支持导入 1~2 张 PNG/JPG/WebP 图片,独立编辑横屏与竖屏裁剪,并导出一张高清 PNG、JPG 或 WebP 拼图。图片不会上传到服务器。
提供轻量 Windows 桌面版(Tauri)和浏览器版本,采用 MIT License 开源。
下载 FramePair Collage v1.0.0(Windows x64,1.09 MB)
SHA-256:B96E26E0D20BA83235EB202AC1D7FB3DD37F5A596B9BEB8F981BCE6B9865451E
安装包未进行商业代码签名,Windows SmartScreen 可能显示“未知发布者”。
需要 Node.js 20 或更高版本(Windows PowerShell、命令提示符均可)。
npm install
npm run dev终端会显示本地地址,通常为 http://localhost:5173。生产构建与本地预览:
npm run build
npm run preview运行单元测试:
npm test桌面版使用 Tauri 2 和系统 WebView2,不携带完整 Chromium。
需要 Windows 10/11、Node.js 20+,并安装以下两个组件:
-
Rust MSVC 工具链:
winget install --id Rustlang.Rustup -e
-
Visual Studio 2022 Build Tools。在安装器中勾选“使用 C++ 的桌面开发”,或使用:
winget install --id Microsoft.VisualStudio.2022.BuildTools -e --override "--wait --passive --norestart --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
安装完成后关闭并重新打开终端,让 cargo 命令进入 PATH。
在项目目录执行:
npm install
npm run desktop:build生成文件:
- 可分发安装包:
src-tauri/target/release/bundle/nsis/FramePair_版本号_x64-setup.exe - 免安装主程序:
src-tauri/target/release/framepair.exe
仅调试桌面窗口时运行:
npm run desktop:dev目标电脑需要 WebView2;Windows 10/11 通常已预装,缺少时安装器会联网安装。首次 Rust 构建需要下载依赖并花费几分钟,之后会使用 src-tauri/target/ 缓存显著加快。不要将这个缓存目录提交到 Git。
修改 package.json、src-tauri/Cargo.toml 和 src-tauri/tauri.conf.json 中的版本号,重新执行 npm run desktop:build。如果更新应用图标,先运行:
npm run tauri icon src-tauri/icon.svg- 选择预设分辨率或输入自定义尺寸。
- 点击上传区或将图片拖入,最多两张。
- 在横屏、竖屏标签之间切换,拖动图片并通过滚轮、双指或滑块缩放。
- 默认会像拼图软件一样无缝拼接:左右排列自动等高,上下排列自动等宽,不拉伸且不产生黑色空白;也可以按需添加间距、外边距、背景色、圆角和标签。
- 选择格式、质量和输出缩放后,点击“导出并下载”。
- React:组件化界面与状态管理。
- Vite:本地开发服务器和生产打包。
- TypeScript:数据结构和画布逻辑的类型安全。
- Tailwind CSS:基础样式管线;界面细节使用项目 CSS 定制。
- lucide-react:轻量、一致的界面图标。
- Vitest:尺寸、cover/contain 和导出尺寸计算测试。
项目使用浏览器原生 Canvas 完成编辑预览与原始像素导出,未引入大型画布框架。设置会保存到 localStorage,图片文件本身不会保存。
src/components/:尺寸、上传、图库、裁剪器、预览、布局和导出面板。src/hooks/useWallpaperEditor.ts:编辑状态、图片生命周期与方向切换逻辑。src/lib/cropMath.ts:纯函数尺寸及裁剪计算。src/lib/canvasRenderer.ts:高清拼图绘制。src/lib/exportImage.ts:文件编码与下载。src/types/wallpaper.ts:完整 TypeScript 数据类型。
推荐最新版 Chrome、Edge 或 Firefox。200% 超大尺寸导出会占用较多内存;若浏览器无法分配 Canvas,界面会显示明确错误,可降低输出缩放后重试。