这个页面的代码没跑起来。

直接从文件夹里打开 index.html,浏览器会拦下 JavaScript 模块,于是你选好图片之后,页面不会有任何反应。改用 http 把这个文件夹提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然后打开 http://localhost:8080/。

图片转 SVG 把 logo、镂空模板或剪影描成曲线

一个形状,一条轮廓。不该有的东西,点一下就好。

语言: 简体中文
查看源码
你的图片在浏览器里处理,无须上传处理。

图片由你自己的浏览器从硬盘上读进来,src/mask.js 把它压成每像素一位,src/contour.js 沿着形状的边缘走一圈,src/fit.js 再往上贴曲线,总共六百来行你能读的代码,背后没有引擎,也不用为了跑起来下载任何东西。这个工具没有任何联网功能:不取东西,不发东西,就算真有,这个页面的另一头也没有服务器能接住一张图。

实时检查: 检查中…

离线: 检查中…

别信我们嘴上说的。打开开发者工具,盯着“网络”面板,描一张试试。没有一条请求带着图片、缩略图、文件名,或者你选中内容里的任何一个字节。或者干脆拔掉网线,照描不误。

1 选一张图片

2 告诉它形状是什么

描图需要每像素一位:在里面,还是在外面。决定这一点有两种办法,适合的图片不一样。白纸上的图按明暗分开。一张物件的照片不行:深灰石头上的一尊深红塑像,是深色叠深色,亮度分不开它们。这种要选主体:它从图片的边缘推断什么是背景,然后把不是背景的都留下。

3 检查轮廓,改掉它弄错的地方

红线是现在的轮廓,画在它来自的那些像素上面。只有在那里,这个问题才有答案,因为一条轮廓对不对,只相对于那些像素,跟别的无关。拖任意一张图,两张一起动;滚滚轮放大;不该有的东西,点一下。一下点中的是那一整块同色区域,所以你指的是一个形状而不是一个像素;再点一下就回来。

按形状算 线条允许偏离像素多远。低于 1 左右什么都不会发生,因为楼梯的一级台阶离它所属的线整整一个像素;高于 2 左右,就开始吃掉真正的曲线。

拐角锐度 轮廓要拐多大的弯,那个弯才保留为角而不是被磨成曲线。太低,每一点抖动都成了角,圆回来时成了多边形。

键盘:按 Tab 进入任一图片。方向键移动原图中的 1 个像素,Shift 加方向键移动 10 个像素。Home 返回图片中心。Enter 或空格键切换选区;若已启用背景取样,则添加背景颜色。两张图片都会显示十字光标,坐标从 1 开始。

图片

SVG

线条要多平滑

像素的楼梯怎么变成曲线,由两个数决定。大多数图片两个都不用碰,但两个都值得知道,以备需要的时候。

4 拿走 SVG

以 Markdown 查看

不上传怎么把图片描成 SVG

  1. 选一张图片。logo、镂空模板、签名、印章、扫描的图纸、剪影。只要里面有一个清楚的形状,就描得干净;一张房间的照片不行,下面会明说,而不是等到最后给你个意外。文件直接从你的硬盘上读,期间什么都不会发到任何地方。
  2. 告诉它形状是什么。纸上的图按明暗分开,分界值替你算好。一张物件的照片不行——深灰石头上的一尊深红塑像,是深色叠深色,亮度分不开它们。这种要选主体:它从图片边缘的一圈带子里学会什么是背景,然后把不是背景的都留下。
  3. 看红线,别看设置。轮廓画在它来自的那些像素上面,因为只有在那里,这个问题才有答案:一条轮廓对不对,只相对于那些像素,跟别的无关。拖任意一张图,两张一起动;滚滚轮放大到能看清这条线到底在做什么。
  4. 不该有的东西,点一下去掉。一个斑点、一枚订书钉、一个印章、一行说明、一片阴影。一下点中的是那一整块同色区域而不是一个像素,所以你指的是一个形状;再点一下就回来。点一块被围住的背景,则是把它填上——不该是洞的洞,就是这么补上的。
  5. 只在需要时调平滑。细节是简化时线条允许偏离像素多远,除非你另有指定,否则按形状算。拐角锐度决定轮廓要拐多大的弯,那个弯才保留为角而不是被磨圆。大多数图片这两项都不用碰。
  6. 拿走 SVG。一个文件,一条 <path>,没有填充规则要操心:外轮廓朝一个方向转,洞朝另一个方向转,所以一个带四十个洞的形状也只是一个元素。Illustrator、Inkscape、Figma、浏览器和切割机都打得开。

说得更细的版本

怎么把图片描成 SVG 在浏览器里把 logo、镂空模板、签名或剪影变成真正的矢量轮廓。哪些图片描得好,哪些永远描不好,以及怎么改掉描图器弄错的地方。

常见问题

我的图片会被上传到哪里吗?

不会。文件由你自己的浏览器在你自己的硬件上读取,由本站发出的几百行 JavaScript 描边,再作为下载交还给你。这个工具没有任何联网功能——从不取东西,也从不发东西——页面的 Content-Security-Policy 把它允许联的地址全列了出来,没有一个是本站的。

它能把我的照片变成 SVG 吗?

变不出有用的东西,而且页面会直接告诉你,而不是等你下载完才发现。描图会把每一块颜色相近的区域都变成一个独立的形状,所以一张照片回来时是几千个叠在一起的色块,文件比 JPEG 大好多倍,打开慢,还不像那张照片。描得好的,是里面有一个形状的图片:logo、镂空模板、签名、线稿、剪影。如果是只拍了一样东西的照片,主体这个设置会把它抠成一整块实心剪影——那是另一回事,而且真的有用。

找形状的两种方法有什么区别?

问的问题不一样。明暗问的是每个像素是否比某个值更暗,这对纸上的墨迹再合适不过,而在主体和背景一样暗的时候毫无用处。主体问的是背景是什么——它从图片边缘的一圈带子里学,拿每个像素跟它比,留下不是背景的最大一块。这在一张物件照片配上大致均匀的背景时管用;在裁得太紧、主体从三边出画的图片上会失败,因为它学习用的边缘本身就是主体。遇到这种情况,你可以自己把背景指给它。

为什么描出来的形状有洞,或者细的部分丢了?

因为图片变成每像素一位的那一刻就已经是这样了。打开描图器拿到的看看:小于十二像素左右,字母的内空已经糊上,竖笔已经粘在一起,没有哪种描图能找回一个不存在的洞。补救在上游——挪一挪阈值,或者从更大的扫描开始。在主体模式下,补上不超过会封住小洞,整个填实会把背景从图片边缘够不到的洞全部填上。

它弄错的地方能改吗?

能,第三步基本上就是做这个的。点任何不该出现在图里的东西,它就消失;再点一下,它就回来。一下点中的是那一整块同色区域,所以一下去掉的是整个斑点或整个印章,而不是一个像素。点一块被围住的背景则是把它填上。改动和阈值分开保存,之后再拖滑块也不会把它们丢掉。

SVG 会有多大?

如果是形状,比图片小:描出来的剪影通常一到五千字节,logo 再多几千。页面会在下载旁边告诉你确切数字。如果是照片,会大得吓人——这是这个工具不适合那个文件最明确的信号——超过一千个左右的独立形状,页面就会停止绘制并明说。

能描彩色的吗?

不能。这个工具做的是单色的一个形状,只有这种情况出来的才是一张图,而不是一张劣质复印件。彩色描图意味着先量化成几种颜色,再把每种颜色当作一个图层单独描,结果会让大多数提出这个要求的人失望。要颜色的话,在这里描出形状,再到你的绘图软件里上色。

拿到 SVG 之后能做什么?

放大到任意尺寸而不发虚、改一个属性就换颜色、做动画、打印,或者送去切割机、激光机。它是一条没有填充规则可弄错的 <path>,所以 Illustrator、Inkscape、Figma、浏览器和大多数 CNC 软件读出来都一样。

图片大小有上限吗?

上限是你机器的,不是我们的。一页 300 dpi 扫描的 A4——大约九百万像素——不到一秒就描完。更大的图片也能用,只是更慢,而且活儿是在你自己的处理器上做的,不是排在哪个队列里。

免费吗?需要账号吗?

免费,没有账号、没有登录、没有试用期、没有水印。文件的数量和大小也没有限制,因为没有服务器替它们买单——活儿在你自己的机器上做。网站上有广告,靠广告维持;广告拿不到任何关于你文件的信息。

断网能用吗?

能。把页面加载一次,然后断开网络,它照样能用。这也是证明什么都没上传最简单的办法:一个要把你的图片送出去描的工具,拔掉网线那一刻就会停。