导入 SVG
把 Illustrator、Affinity Designer、Inkscape 或 Figma 的矢量画稿作为可编辑的形状图层带进来,以及哪些 SVG 特性活不下来。
SVG 到了这里会变成真正的几何:路径变成形状图层,带着你能用节点工具编辑的锚点和手柄,而不是一幅画的照片。文件里的分组变成图层面板里的分组。
有四条路进来,走的都是同一个读取程序:
- 文件 ▸ 导入 ▸ SVG… 导进你已经打开的项目
- 文件 ▸ 打开… 选中一个 SVG,会围着它建一个新的未命名项目
- 把文件放到画布上是导入;放到别处则作为一个新项目打开
- Ctrl+V 粘贴从别的软件复制来的 SVG 标记
从文件导入时,外层分组取文件的名字。从剪贴板粘贴时,它叫 SVG。
什么变成什么
| SVG 里的 | Celas Studio 里的 |
|---|---|
| g、a,以及嵌套的 svg | 一个分组图层 |
| path、rect、circle、ellipse、polygon、polyline、line | 各自一个形状图层 |
| image | 一个图像图层 |
| linearGradient、radialGradient | 用到它的那个形状上的一个渐变填充或描边 |
| text | 一个空的占位图层,用开头几个字符命名 |
每一条路径命令都能读懂,椭圆弧也在内,而且统统转成三次贝塞尔。复合路径(一个字母 O、一个甜甜圈、任何带洞的东西)仍是一个形状图层,内轮廓完好,所以洞照样是洞,整个东西也照样作为一个对象可编辑。
填充、填充规则、描边、描边宽度、端点和连接、不透明度和渐变都带得过来,描边宽度还会跟着画面一起缩放,这样线的粗细看着才对。文件里标成隐藏的东西,进来也是隐藏的。
颜色按绘图模型用到的每一种 CSS 写法读取:命名颜色、#RGB、#RGBA、#RRGGBB、#RRGGBBAA、rgb() 和 rgba(),数值写法里也接受百分比。四位和八位的十六进制写法会把自己的 alpha 一并带过来。
rx 和 ry 不相等的圆角矩形,导入后的圆角是真正椭圆的。rx 和 ry 相等时,它就仍是一个普通矩形、只是带着一个圆角半径,这样节点工具的圆角手柄在它身上照样管用。
链接进来的 <image> 是相对 SVG 自己所在的文件夹解析的,所以引用同目录文件的画面能载入。内嵌的 data: URI 则直接解码。
分组不带变换
文件里的变换会被烘进画面本身,所以你拿到的分组是纯粹的结构,自己不带旋转或缩放。画正好落在文件说它该在的地方,之后你随便旋转或缩放这个分组,底下的东西也不会挪位。
不支持什么
读取程序覆盖的是绘图模型,不是整套 SVG 规范。下面这些全部被跳过,不给消息。
- CSS style 块和 class 属性:见下面的警告
- use 和 symbol:精灵图和重复的实例导入进来是空的
- clipPath 和 mask:剪贴不会被应用,所以本来被剪掉的画面可能露出来
- pattern 填充,会退回成一片平灰
- filter 效果:模糊、投影等等
- marker:箭头和线端符号
- stroke-dasharray 和 stroke-dashoffset,所以虚线描边导入进来是实线
- switch、foreignObject,以及 SMIL 动画
- 文字:字体、字号和位置都丢了,只剩一个命名的占位图层
- 百分比和相对单位,以及写在 style 属性里的变换
把文件准备成能干净导入的样子
- 导出前先把文字转成轮廓;文字进来只是一个占位。
- 把你想留住的描边、虚线、图案和任何滤镜效果都扩展开。
- 释放剪贴蒙版,或者把画面裁到该看见的范围。
- 把符号和重复实例展开,别让任何东西依赖 use。
- 按外观属性而不是 CSS 导出,并给文档一个 viewBox。
尺寸和摆放
文档的宽高按像素、点、派卡、英寸、毫米或厘米读取,再结合 viewBox 把画缩放到合理的大小。用百分比定尺寸的文件(网页标志常见的那种 width=100%)会按它的 viewBox 尺寸导入,而不是被拉伸。之后画面在你的画布上居中。