两个都以 .svg 结尾的文件

用文本编辑器打开两个“转换好的”SVG。第一个只包含一个 <image> 元素,它的 href 是一长串 data:image/png;base64,…。第二个包含若干 <path> 元素,每个都有 d="M12 4 L…" 坐标数据和一个 fill 颜色。两个文件都能在浏览器中打开,在原始尺寸下看起来也都没问题。但只有第二个是矢量图。

第一种“包装”名副其实:原始位图被装进了一个 SVG 容器里。放大它,浏览器放大的是像素,所以边缘会像 PNG 一样模糊。切割机和矢量编辑器也无法选中其中的任何形状,因为里面根本没有形状——只有一个由像素组成的矩形。

描摹出来的 SVG 则用几何图形来描述画面。每块颜色区域都变成一条由直线段和贝塞尔曲线组成的闭合轮廓;渲染器会按你需要的任意尺寸填充这条轮廓,所以无论是 10 mm 还是 10 m,边缘都保持清晰。

png2svg.art 输出什么

描摹器先把图片的像素归并为少数几种纯色,再用直线段和贝塞尔曲线勾勒出每块颜色区域的轮廓。两种颜色相接的地方共用同一条边界,所以它们之间不会出现缝隙。结果是每个形状一个 <path>,填充各自的颜色,按对象分组,并按包含关系嵌套(如果把图层设为按颜色,则每种颜色一个 <path>)。孔洞,比如字母“O”的内部,在两种 SVG 填充规则下都会保持镂空。文件中没有 <image> 元素,没有嵌入的位图,也没有脚本:每个结果在存储前都会经过检查,只允许包含路径、分组和标题。

因为几何图形是真实的,预览会显示真实的路径数量和所用的调色板。如果一个标志返回的是 6 条路径、6 种颜色,文件里实际上就是这些内容。

一个文字标志中的“Fe”两个字母放大两倍:左边是 256 px PNG 的像素,边缘呈阶梯状;右边是描摹出的 SVG,边缘平滑

我们的一个示例文字标志中的“Fe”,放大倍数相同:256 px 的 PNG 露出了像素网格(左);由原尺寸图片描摹出的 SVG 用曲线绘制同样的边缘,在任何尺寸下都清晰(右)。

如何自己检查任意 SVG

  1. 用纯文本编辑器打开文件。找 <path、<polygon 或 <circle 元素——这些是几何图形。找 <image——这是包装。
  2. 在浏览器中打开,放大到 800 %。矢量边缘保持清晰;包装的文件会变得模糊或出现方块。
  3. 导入 Inkscape 之类的矢量编辑器。描摹出的文件可以单击选中单个形状;包装的文件只能作为一整张图片被选中。
  4. 比较文件大小。包装了 PNG 的文件至少和 PNG 一样大(base64 会增加约三分之一);描摹出的标志通常只有几 KB。

描摹做不到什么

描摹重建的是纯色区域。它无法找回像素中原本就没有的细节:一个 64 像素宽的图标,无论用什么设置描摹,仍然是一个 64 像素宽的设计,曲线是根据这些像素推测出来的。照片和平滑的渐变会变成一条条纯色色带(见《为什么照片描摹后会变成海报画效果》)。文字会变成轮廓,而不是可编辑的文字。这些都是这项技术本身的特性,不是可以关掉的设置。哪些图片适合矢量化、哪些不适合,请见图片转矢量图页面。

为什么预览很重要

png2svg.art 会在你解锁任何内容之前,先显示描摹结果的带水印预览;无水印 SVG 只有在解锁后才会生成供下载。预览所用的路径和你下载的完全相同,所以如果细小的文字粘在了一起,或者一条细线断开了,花积分之前你就能看到。解锁一个无水印 SVG 需要 1 积分;每个已验证账户可获得 3 个免费积分。