这有点深奥,我只需要自己做一次,发现它很令人困惑,所以我想做一个关于它的完整视频。
问题是,并非所有 SVG 中的东西都是 <path>
。<path>
很棒,因为它可以是任何东西。但它 的语法 比任何其他形状都复杂。因此(也许出于这个原因?)Illustrator 总是使用最合适的元素在 SVG 中输出形状。矩形是 <rect>
,其他仅由直线组成的形状是 <polygon>
,或者如果它是一个开放的形状,则为 <polyline>
,等等。
这很好,除了这些形状的 DOM 方法不同。路径元素有一个名为 getTotalLength()
的方法,它可以让你知道路径的长度。这很酷,有时也很有用,但你不能只在 <path>
上做,其他元素不行。
你可能想要知道该长度的一个原因是,你打算对它进行动画处理,使形状“自行绘制”——一种很酷的设计效果(示例集合)。你可以在 CSS 中做到这一点,但是使用 一些 JavaScript 来应用该 CSS 是很不错的,这样它每次都会以完美的距离进行动画处理。
所以假设你想做那个绘制效果,但该形状是 <polygon>
,所以 JavaScript 失败了。你可以将该多边形变成路径,而不会在视觉上改变它,方法是简单地向它添加一个具有贝塞尔控制点的点。也就是说,用钢笔工具点击并拖动,使控制点出现并与已有的线条对齐。该点的存在将使其在输出中变为 <path>
。
如果你经常这样做,有一个名为 Poly2Path 的工具可以工作,并且不需要那个多余的点。
不知道你现在是否知道,但我只是玩了一下,发现你也可以使用对象 -> 路径 -> 添加锚点来将元素转换为 Illustrator 中的路径。
不错!我认为这里起作用的概念是,除了
<path>
之外,没有其他方法可以描述曲线上比如 5 个点。如果你在 Illustrator 中有一个矩形,并添加了一个额外的点,它可能会从<rect>
变成<polygon>
。大家好,
我在 Illustrator 中玩了一会,试图回忆起我曾经在哪见过这个。
选择形状后,你可以执行对象 -> 复合路径 -> 制作(CMD+8),它会将你的形状转换为路径。(屏幕截图在 https://dl.dropboxusercontent.com/u/18132950/make-compound.png 中)如果你的图层面板是打开的,这也将在图层面板中反映出来。
然后,当你保存为 SVG 时,你会在代码中得到路径元素,没有额外的点。因此,如果你想从圆形变为方形,你就可以使用最初的四个点来非常流畅地完成。
(顺便说一句,我使用的是 CC 2014,但我认为它至少存在了几个版本。)
你也可以使用复合路径做一些非常酷的事情,否则你必须完全疯狂地进行动画处理。想象一下,在这 http://painteddigital.com/2010/illustrator-tip-compound-path/ 中简单地旋转该对象,而不是试图协调每个“射线”围绕一个共同的中心。
我强烈推荐 Jarek Foksa 的 pathData polyfill 用于任何原始形状到路径的转换。
实际上是基于 svg 2 草案——不幸的是,这个提议已经处于草案状态很长时间了……
即使这个脚本的主要目的是将 d 属性解析为命令数组,它的规范化选项也可以将任何 svg 原始形状(线、折线、多边形、圆、矩形)转换为绝对三次贝塞尔曲线命令。
因此,它对于进一步的路径操作(更改起始 M 命令、反转路径方向等)非常通用,而且与更复杂的 svg 处理库相比,它很轻量级。
也描述在 stack overflow 上:SVG - 将所有形状/原始形状转换为。