piapia123
zh

图片抠成透明

图像

所有处理都在浏览器本地完成,数据不上传服务器

把图片拖到这里,或点击选择

也可以按 Ctrl/⌘ + V 粘贴截图

PNG / JPEG / WebP / GIF / BMP / AVIF · 单张不超过 30 MB

指定一个颜色(默认取图片的左上角),把它变成透明,得到一张透明底的 PNG。 判据是 RGB 欧氏距离,不是「等于这个颜色」。 精确比较在真实照片上几乎什么都抠不掉:JPEG 有损压缩之后,同一个纯色区域里相邻像素的 RGB 会有 ±3 上下的抖动。所以这里按三通道的距离判定,界面上的容差 0–100 线性映射到 0–`√(3·255²)`(约 441.7)。 「只抠与边角相连的一块」是抠背景的正确姿势。 全图扫描会把人物里与背景同色的部分(白衬衫、白墙前的一顶白帽子)一起抠掉;而从图片四边出发做 4 邻域泛洪,只吃掉与边缘相连的那一块,被主体围在中间的同色区域碰不到边缘,因而留下。 边缘羽化与去色边解决硬边问题:二值抠图的边缘会有锯齿,羽化按到抠掉区域的距离给一层渐变;去色边把半透明像素里残留的目标色按 `F = (C − (1−a)·T) / a` 反解掉,否则抠蓝底之后人像周围会挂一圈蓝边。全部在本机完成。

功能

  • 默认取左上角像素为目标色,也可手动指定任意颜色
  • 判据是 RGB 欧氏距离 —— JPEG 的 ±3 抖动也能抠干净,精确比较做不到
  • 「只抠连通区域」从四边做 4 邻域泛洪,围在主体里的同色不会被误抠
  • 容差 0–100 可调,宁可保守也不会误伤
  • 边缘羽化 0–5 像素,消除二值抠图的锯齿硬边
  • 去色边把半透明边缘残留的目标色反解掉,不挂色边
  • 产物是透明底 PNG,卡片上写明抠掉了多少百分比
  • 图片不上传,断网也能用

使用方法

  1. 把图片拖进来
  2. 选目标色的来源(或手动指定),调容差
  3. 需要更精准就打开「只抠连通区域」,再按情况调羽化与去色边
  4. 结果立刻出现,点「下载」拿到透明底 PNG

常见问题

为什么容差是距离,而不是「就是这个颜色」?
因为照片是有损压缩过的:JPEG 里同一个纯色区域,相邻像素的 RGB 会差上 ±3。用「精确等于」去比较,命中的像素少到可以忽略,图几乎抠不掉。所以改成三通道的欧氏距离,容差 0–100 线性映射到 0 到约 441.7 的距离;默认 20 已经能吃掉大部分背景,又不至于误伤。
「只抠与边角相连的一块」到底做了什么?
它决定去掉哪一片像素。打开时从图片的四条边出发做 4 邻域泛洪,只吃掉与边缘相连、且颜色在容差内的区域 —— 于是被脸和肩膀围在中间的白衬衫不受影响。关掉则改成全图扫描,所有接近目标色的像素都会被抠掉,包括主体内部同色的部分。抠背景请保持打开。
羽化与去色边是干嘛的?
二值抠图的边缘是硬切的,放大看有锯齿,浅色背景上还会有一圈背景色的边。羽化按到抠掉区域的距离给边缘一层渐变 alpha;去色边则把半透明像素里残留的目标色反解掉,抠蓝底之后人像周围就不会挂一圈蓝边了。主体边缘很干净时可以都关掉。
图片会上传吗?
不会。抠图在浏览器里用 canvas 完成,全程在本机内存里,断网也能用。

相关工具