用 AI 辅助开发一款桌面图片压缩工具
从 0 到 1,记录我与 AI 结对编程开发 IMG.COMPRESS 的完整过程
项目背景
最近需要处理大量图片压缩的需求,市面上的工具要么收费,要么功能不够灵活。于是决定自己动手开发一款桌面应用,顺便体验一下 AI 辅助开发 的效率。
技术选型思路:
- 想要跨平台(Win/Mac/Linux)→ 排除原生开发
- 想要原生性能 → Electron 体积太大
- 最终选择 Tauri(Rust + Web 技术栈)
AI 协作开发流程
第一阶段:设计稿绘制(Pencil)
我的需求:
“帮我设计一个图片压缩工具的界面,有侧边栏和主内容区”
AI 使用 Pencil 工具绘制:
AI 直接在 Pencil 中创建了设计稿,包含:
- 左侧深色侧边栏(Logo + 功能菜单 + 统计信息)
- 右侧主内容区(拖拽区域 + 文件列表 + 操作按钮)
- 压缩设置弹窗(质量滑块、尺寸调整、格式选择)
设计迭代过程:
-
初版设计
- 侧边栏和主区域都是浅色
- 按钮使用默认样式
-
优化调整
- 我:“侧边栏用深色会不会更有设计感?”
- AI:“建议侧边栏固定深色,主内容区跟随系统主题”
- 修改后视觉效果提升明显
-
细节打磨
- 调整卡片圆角、间距
- 优化颜色对比度
- 添加 hover 状态
我的收获:
用 Pencil 画设计稿比直接写代码快多了!可以直观看到效果,确定设计后再开始编码,避免了反复修改 CSS 的麻烦。

第二阶段:项目脚手架搭建
我的需求:
“帮我创建一个 Tauri + React + TypeScript 的项目,使用 Vite 作为构建工具”
AI 做的:
- 初始化项目结构
- 配置 Tailwind CSS
- 设置路径别名
- 创建基础目录结构
我的收获:
原来 Tauri 2.0 的配置和 1.0 有不少区别,AI 直接给了最新的配置方式,省去了翻文档的时间。
第三阶段:核心功能开发
1. 图片压缩逻辑(Rust 后端)
我的需求:
“需要在 Rust 中实现图片压缩功能,支持 JPG、PNG、WebP 格式,可以调节质量参数”
AI 写的核心代码:
// 使用 turbojpeg 进行硬件加速的 JPEG 压缩
pub fn compress_image(
input_path: &str,
output_path: &str,
quality: u8,
target_width: Option<u32>,
target_height: Option<u32>,
) -> Result<CompressResult, String> {
// 读取图片
let img = image::open(input_path)
.map_err(|e| format!("无法打开图片: {}", e))?;
// 尺寸调整
let img = if let Some(w) = target_width {
img.resize(w, target_height.unwrap_or(w), Lanczos3)
} else {
img
};
// 根据格式选择编码器
match format {
"jpg" | "jpeg" => compress_jpeg(&img, output_path, quality),
"png" => compress_png(&img, output_path, quality),
"webp" => compress_webp(&img, output_path, quality),
_ => Err("不支持的格式".to_string()),
}
}
遇到的问题:
image库自带的resize非常慢- AI 建议改用
fast_image_resize库,性能更好 - JPEG 编码使用
turbojpeg库,利用硬件加速 - 整体压缩速度提升了 3-5 倍
2. 前端状态管理
我的需求:
“设计一个文件列表的状态管理,需要支持添加文件、删除文件、更新压缩进度”
AI 设计的 Store 结构:
interface FileState {
files: CompressFile[];
addFiles: (files: File[]) => void;
removeFile: (id: string) => void;
updateProgress: (id: string, progress: number) => void;
updateStatus: (id: string, status: FileStatus) => void;
}
export const useFileStore = create<FileState>((set) => ({
files: [],
addFiles: (files) => set((state) => ({
files: [...state.files, ...files.map(f => ({ ... }))]
})),
// ...
}));
我的思考:
AI 直接选择了 Zustand 而不是 Redux,确实更适合中小型项目。代码简洁很多。

第四阶段:UI 界面打磨
1. 主题系统
我的需求:
“实现深色/浅色主题切换,侧边栏固定深色,主内容区跟随主题”
AI 的方案:
- 使用 CSS 变量定义颜色系统
- 侧边栏使用固定深色变量
- 主内容区使用 Tailwind 的 dark 模式
:root {
/* 浅色主题 */
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--primary: 180 78% 24%;
}
.dark {
/* 深色主题 */
--background: 220 13% 11%;
--foreground: 210 20% 96%;
--primary: 180 60% 45%;
}
/* 侧边栏固定深色 */
--sidebar-bg: 220 13% 11%;
--sidebar-selected: 180 60% 45%;
迭代过程:
- 一开始侧边栏也跟随主题 → 浅色模式下不好看
- AI 建议侧边栏固定深色 → 更有设计感
- 调整了多次颜色对比度,确保可访问性
2. 国际化适配

我的需求:
“支持中英文切换,所有文案需要可配置”
AI 的实施:
- 使用 react-i18next
- 创建 zh-CN.json 和 en-US.json
- 所有组件使用
t()函数
遇到的问题:
变量插值 {count} 不生效,后来发现需要配置插值前缀后缀:
interpolation: {
prefix: '{{',
suffix: '}}',
}
然后改成 {{count}} 格式就正常了。
第五阶段:细节优化

1. 代码规范
AI 主动发现的问题:
- “sidebar 里面有很多
[18px]这样的数组写法,建议使用 Tailwind 标准变量” - 改成
w-4.5 h-4.5更规范
2. 边界情况处理
AI 提醒的场景:
- 空列表状态
- 压缩失败重试
- 文件重复添加
- 磁盘空间不足
3. 性能优化
AI 的建议:
- 图片处理使用 Rayon 并行
- 前端使用虚拟列表(文件多时)
- 压缩进度使用 throttle 节流
开发效率对比
| 环节 | 传统开发 | AI 辅助 | 提升 |
|---|---|---|---|
| 脚手架搭建 | 2 小时 | 10 分钟 | 12x |
| 核心功能开发 | 2 天 | 4 小时 | 12x |
| UI 界面实现 | 1 天 | 3 小时 | 8x |
| 调试优化 | 1 天 | 2 小时 | 12x |
| 总计 | 4 天+ | 1 天 | 4x+ |
AI 辅助开发的最佳实践
1. 需求描述要清晰
不好的描述:
“帮我做个图片压缩功能”
好的描述:
“需要在 Rust 后端实现图片压缩,支持 JPG/PNG/WebP 格式,可调节 1-100 质量,可选尺寸调整,返回压缩前后文件大小”
2. 分步骤迭代
不要一次性让 AI 写完整功能,而是:
- 先写核心逻辑
- 再写错误处理
- 最后写边界情况
3. 及时验证和反馈
- AI 写的代码要立即测试
- 有问题马上指出,AI 会快速修正
- 形成 “写代码 → 测试 → 反馈 → 修正” 的闭环
4. 保持代码审查意识
AI 也会犯错:
- 变量命名不规范
- 忘记处理错误边界
- 性能考虑不周
需要人工审查后再合并。
有趣的对话片段
我: “深色模式的样式有点看不太清楚了,要调整一下”
AI: “参考 GitHub Dark 和 VS Code Dark+ 的配色方案,我调整了以下颜色…”
我: “侧边栏和主区域需要边框分割”
AI: “添加了边框,但发现侧边栏卡片之间的边框太丑了,建议去掉”
我: “算了侧边栏还是深色模式好看一点,不要跟随了”
AI: “已修改,侧边栏固定深色,按钮使用主题色”
这种灵活的调整,如果是传统开发,改来改去会很烦躁,但 AI 瞬间就能完成。
总结与展望
这次开发的收获
- Tauri 确实轻量 - 安装包只有几 MB,比 Electron 小太多
- Rust 性能真的强 - 图片压缩速度比 Node.js 快数倍
- AI 是效率倍增器 - 特别是样板代码和调试环节
给想尝试的同学
如果你也想用 AI 辅助开发:
- 先想清楚需求,越详细越好
- 从小功能开始,逐步迭代
- 不要完全依赖 AI,保持技术判断
- 多和 AI 对话,它越了解你的项目,建议越精准
intel芯片和M1,M2,M3可以安装体验
https://huanlianapp-1301879400.cos.ap-guangzhou.myqcloud.com/mac_app/img-compress-app_0.1.0_x64.dmg