一键去背景的核心是把图片分成前景和背景,然后把背景像素变成透明。
现代去背景工具通常使用图像分割模型。模型会预测每个像素属于前景的概率,再生成一张 alpha mask,用它决定哪些区域保留、哪些区域透明。
本地模型处理流程
- 浏览器读取图片并解码成像素。
- 模型在本地推断前景区域。
- 生成透明度遮罩,也就是 alpha mask。
- 把背景像素设为透明,保留主体。
- 导出透明 PNG,方便继续设计或排版。
当前 /image/remove-bg 的实现细节
ToolGarden 目前的图片去背景页面是一个浏览器端单图工具:页面组件负责文件选择、模型档位、进度条、预览和下载;真正的去背景逻辑集中在 lib/utils/image-browser.ts 的 removeImageBackground(),页面不会把图片文件传到业务服务器处理。
| 环节 | 当前实现 | 为什么这样做 |
|---|---|---|
| 页面入口 | components/ImageBackgroundRemover.tsx 只取上传列表中的第一张图片,先 inspectImageFile() 读取尺寸和类型,再允许用户点击移除背景。 | 避免一次性把大量图片送入浏览器模型,降低内存压力,也让结果预览和下载更明确。 |
| 输入保护 | 支持 JPG、PNG、WebP、GIF、BMP、SVG、AVIF;文件最大 50MB,解码后的像素数最大 40MP。空文件、不支持格式、解码失败和超大图片都会返回结构化错误。 | 模型推理前先挡住浏览器难以稳定处理的输入,避免标签页卡死或 Canvas 失败。 |
| 预处理 | removeImageBackground() 用 object URL 加载图片,读取 naturalWidth / naturalHeight,再绘制到 Canvas,并通过 normalizeLoadedImageToPng() 转成 PNG Blob 作为模型输入。 | 统一输入格式,避免不同图片编码、透明通道或浏览器解码差异直接影响模型调用。 |
| 模型选择 | 运行时动态 import @imgly/background-removal。默认 high quality 对应 isnet_fp16,快速档对应 isnet_quint8。页面文案标注为 medium 约 80MB、small 约 40MB。 | 高质量模型边缘更稳,快速模型下载和推理更轻;用户可以按网络和设备性能选择。 |
| 模型资源 | publicPath 指向 staticimgly.com/@imgly/background-removal-data/${PACKAGE_VERSION}/dist/。首次运行会下载模型资源,之后通常由浏览器缓存。 | 把图片处理留在本机,只把模型资产作为静态文件下载;首次慢、二次快是正常现象。 |
| 进度与导出 | 库回调的 label/current/total 会被转换成 model 或 compute 阶段进度;输出固定为 image/png、quality 1,返回 Blob、原尺寸、原始大小、输出大小和耗时。前端再创建 object URL 用于预览和下载。 | 透明背景需要 alpha 通道,PNG 是最稳定的默认输出;统计信息可直接展示给用户。 |
const modelMap = {
medium: 'isnet_fp16',
small: 'isnet_quint8',
} as const;
const modelInput = await normalizeLoadedImageToPng(image);
const blob = await removeBackground(modelInput, {
publicPath: BACKGROUND_REMOVAL_PUBLIC_PATH,
model: modelMap[options.model ?? 'medium'],
output: { format: 'image/png', quality: 1 },
progress: (label, current, total) => {
options.onProgress?.(createBackgroundRemovalProgress(label, current, total));
},
});因此,这个工具的“本地”含义是:用户图片在浏览器内解码、Canvas 规范化、模型推理和 PNG 导出,图片 Blob 不上传到服务器;但首次使用时浏览器仍需要从模型 CDN 请求开源模型资源。如果断网且模型没有缓存,去背景无法启动。
哪些图片效果更好?
| 图片类型 | 效果预期 | 建议 |
|---|---|---|
| 人像、商品、宠物、单一主体 | 较好 | 主体边界清晰更稳定 |
| 纯色或简单背景 | 较好 | 模型更容易分辨前景 |
| 发丝、透明物、复杂阴影 | 中等 | 边缘可能需要后期微调 |
| 主体和背景颜色接近 | 较难 | 尝试更高清原图 |