Inkscape-之书第二版-全-

Inkscape 之书第二版(全)

原文:zh.annas-archive.org/md5/d496245f651a52eaee9c5fb6c9ad71ef

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书介绍了 Inkscape,这个强大且开源的基于 SVG 的矢量图形编辑器。它详细描述了 1.1 版,这是在经历近二十年的开发后,于 2021 年发布的最新版本,涵盖了所有功能,仅排除那些实验性或未完成的功能。

本书的第二个目标,也许更加宏大,是宣扬矢量图形创作的方式,并分享用矢量思维的乐趣。曾经是专业设计师专属领域的矢量图形软件,已经变得更为普及和易于接触。虽然矢量编辑器还没有像位图编辑器(如 Photoshop)那样成为标准应用,但它正在朝着这个方向发展,而 Inkscape 正是推动这一变化的重要因素。

Inkscape 的魅力很大一部分源于它是唯一完全开源且跨平台的专业级矢量编辑器。但这还不是全部。Inkscape 在基础层面简单易用,但如果深入探究,它也极其强大。从可自定义的快捷键(3.4)和命令行语言(附录 C),到强大的可链式路径效果(第十三章),再到极为复杂的矢量滤镜,推动着矢量图形的极限(第十七章)。本书从岸到岸地探索了 Inkscape 的浩瀚世界,未留下一个岛屿。

本书内容

第一章是对 Inkscape 的高层次描述,涵盖其功能以及它在矢量图形(以及在某种程度上,计算机图形学)中的地位。接下来,第二章提供了该程序的基础入门教程(安装、打开、创建对象、变换对象和保存);如果你曾完成过一个小的 Inkscape 项目,可以安全跳过本章。

本书的大部分内容,第三章到第十九章,都是按顺序阅读的。这些章节详细介绍了 Inkscape 的所有功能(对象、变换、样式、路径、文本、效果等),并配有详细的解释、插图和实用技巧。

书的第二部分(从第二十章开始)包含了几个完整的逐步教程,展示了 Inkscape 在实际应用中的使用,包括动画、名片以及以不同风格绘制的复杂玫瑰插图。本书最后还附带了几个附录,提供参考信息。

Inkscape 是一个持续进步的项目——即使这个进展有时看起来很慢。前一版书籍描述了 0.47 版,并于 2009 年发布。自那时以来,Inkscape 已经经历了巨大的演变和成熟,而本版书籍将最新的进展带入了读者眼前。以下是 Inkscape 1.1 与 0.47 相比的主要新特性:

  • 更快! Inkscape 的慢速一直是多年来用户最主要的抱怨。版本 1.1 大大提升了渲染速度和 UI 响应速度,特别是在使用滤镜时 (第十七章),因为现在所有滤镜都支持 OpenMP 多线程。

  • 全新用户界面。 Inkscape 采用了基于 GTK 3 的现代化 GUI 工具包,并且提供了更易用的可停靠对话框实现。

  • 不再有与 SVG 不兼容的文本。 在之前的版本中,创建自动换行文本会使文件不符合 SVG 标准,因为 Inkscape 使用了已废弃的草案 SVG 规范来实现此功能。现在,Inkscape 自动换行文本符合 SVG 标准,并且在所有兼容 SVG 的渲染器中(包括网页浏览器)都能正确显示 (第十五章)。此外,现在有一个新的选项,可以将文本自动换行到一个无限高度的列中 (15.2.1.1)。

  • 新工具。 橡皮擦 (14.4)、喷枪 (4.7)、图表 (14.5) 和渐变网格 (10.7)。

  • 更强大的路径工具。 现在,您可以同时编辑多个选中的路径。

  • 画布便捷功能。 现在,您可以使用键盘快捷键旋转画布,便于编辑或绘图,还可以垂直或水平镜像画布 (3.13)。

  • 许多新的路径效果和扩展。 这些在 第十三章 中进行了描述。

  • 混合模式。 这些工具现在支持作为一种强大的方式来改变重叠对象如何融合在一起 (17.2)。

  • 更多更好的滤镜。 现在有许多新的预设滤镜 (17.4),您还可以编辑画布上的滤镜区域 (17.3.1)。

  • 位图性能。 Inkscape 现在能够导入、显示和导出更大的位图 (第十八章)。

  • 更多导出格式。 除了 PNG,Inkscape 现在还可以将位图导出为 JPG、WebP 和 TIFF (18.6)。

想了解本书的最新更新和新闻,请访问 nostarch.com/inkscape

本书适合谁阅读?

本书可以作为您进入矢量图形世界的第一本书。您不需要是图形专业人士才能觉得它有用。您会学习一些新的概念和术语,但只要您在实践中应用所学内容,这些应该是自然而然地掌握的。安装 Inkscape(如果还没有安装的话),并在阅读本书时立即尝试这些技巧。

即使是那些有经验使用 Inkscape 或其他矢量图形程序的用户,也会在本书中找到足够的内容。我是从两个角度来写这本书的——一个是作为一名长期使用 Inkscape 的用户,另一个是作为一名为 Inkscape 提供了大量代码的开发者。我希望这两个角度能够让我更清晰地理解程序界面和行为的逻辑,识别它的独特优缺点(并提出一些解决方法)。

第一章:Inkscape 与世界

也许这是你第一次接触矢量图形。也许你之前使用过矢量图形,现在好奇它还能为你做些什么。或者你在尝试过其他矢量编辑应用后,考虑使用 Inkscape,想了解它与其他软件的区别。不论是哪种情况,你可能会发现一些背景信息很有启发性。什么是 SVG?什么是 Inkscape?它来自哪里,未来将走向何方?你可以用它做什么?Inkscape 在计算机图形学的世界中处于什么位置?本章将为这些问题提供最新的答案。

1.1 什么是矢量图形,为什么它重要

Inkscape 是一个矢量图形编辑器。这意味着什么?

目前大多数存储和处理的图像都是栅格图像,也叫位图。栅格图像是一种原始的表示方式——只是一个由小矩形区域构成的网格,这些小区域叫做像素。对于每个像素,存储的信息只有其颜色,有时还包括其透明度。

例如,如果你有一张位图图像,里面有一个黑色圆形,背景是白色(参见图 1-1,左),实际上图像中并没有黑色圆形这样的元素。只有当查看图像时,你才会(或者不会)认为它是一个黑色圆形。计算机对图像的了解仅限于它的一些像素是黑色的,有些是白色的(有的可能是介于黑白之间的灰色)。

图 1-1:位图或栅格形式的圆形(左)与矢量形式的圆形(右)

因此,计算机对于这种图像可以做的事情非常有限,除非有人工指导。它可以将所有白色像素变成蓝色,但不能轻易地移动圆形,因为它并没有看到它是一个独立的对象。即使对于人类来说,这个任务也可能很困难,任何使用过 GIMP 或 Photoshop 的人都会证明这一点;你将不得不使用一些不可靠的工具来“选择”圆形——如果圆形的边缘是抗锯齿的(即,圆形边缘的一些像素是黑色和白色之间的中间值),这种操作尤其困难,如图 1-1 所示。

所有这些与矢量图形不同(参见图 1-1,右)。在矢量格式中,实际的圆形及其属性作为对象存储。这意味着它与其他任何对象都是分开的,因此你可以随意处理它。使用这样的图像时,你的计算机可以自动做许多智能操作——例如,它可以删除所有圆形,给所有红色对象涂上绿色,或者将所有黑色圆形的大小缩放到原来的两倍。

不再烦恼像素选择——随时选择任何对象,并按需编辑。这就是 Inkscape 的工作方式,也是它与像 Photoshop 这样的栅格编辑器的主要区别。

让我们来看一下矢量方法的最显著优点:

矢量图像是可缩放的。

可扩展性意味着你可以在任何分辨率下查看或导出你的绘图,永远不会看到任何锯齿状、像素化或不必要的模糊。无论大小,所有内容都保持完美清晰。这通常被认为是向量图形的主要优势;在我看来,其他优势同样重要。

向量图像可以随时编辑。

无论你的绘图多么复杂,你都可以随时选择其中的任何对象进行编辑。可以将其想象成一个 Photoshop 文件,其中每一笔画都自动被放置在自己独立的图层上。此外,在位图编辑器中,你最终需要“合并”图像,将所有独立的图层合并起来。相反,向量绘图没有必要——事实上也不可能——将其“合并”(除非导出为位图格式)。

向量图像易于创建和阅读。

向量对象更符合人类视觉感知。当我们看一个场景时,我们倾向于将其在脑海中分割成不同的对象——这正是向量图绘制的方式。这使得向量图形成为一个非常自然的工作媒介。而且,由于许多向量格式(包括 SVG)是基于文本的,因此很容易手动编写一个简单的向量图(即使没有任何图形编辑器)或编写脚本来生成或修改这样的图形。

向量图像简洁明了。

由于不需要存储关于每个像素的信息,向量图像通常比对应的位图图像占用更少的字节进行存储和传输。一个很好的副作用是,Inkscape 具有无限的撤销历史,因为每个撤销步骤作为向量时占用的内存远少于作为位图时的内存。

向量图像是无限的。

位图总是具有固定的像素大小——例如,468 x 60 像素。在未压缩的位图中,双倍增加尺寸会使文件大小增加四倍,因为即使额外的像素为空,它们也需要存储。向量图像则不同。向量图像几乎是无边界的,通过将对象移动一英寸或一英里来扩展它,在文件大小或计算机内存方面不会产生任何成本。类似地,向量文档在深度方面几乎是无限的:你可以随意放大,创建任何数量的微观尺寸对象在任何给定的空间中。(当然,实际上,画布大小和缩放级别是有限制的,但这些限制远远超出了位图编辑器的范围。)

向量图像可以进行动画处理。

由于在向量绘图中,物体是分开存储的,所以可以通过移动或变换它们,改变它们的颜色等等来进行动画处理。自然,一些向量格式,如 SVG 或 Flash,内置了动画功能。Inkscape 目前尚不支持动画 SVG,但在未来版本中可能会有所更改。

向量图像可以是互动的。

你不仅可以动画化对象,还可以让它们具有交互性。一个绘图可以根据用户的操作改变其对象的属性——这使得复杂的用户界面成为可能,比如按钮、链接、拖放等。当然,Inkscape 在这一领域目前的功能有限,但你可以手动编辑在 Inkscape 中创建的 SVG 文件,添加交互性,然后可以在 SVG 查看器中播放。

矢量对象是可重用的。

从一个绘图中选取一个对象,变换或重新设计它而不会失去任何质量,然后再将它插入到另一个绘图中,这是非常容易的。

如果你喜欢数字音乐,你可能会通过将矢量图形类比为 MIDI 声音文件,将光栅图形类比为 WAV 声音录制,来更好地理解矢量/光栅的区别。程序员可能会认为,矢量是图像的“源代码”,而光栅是其“编译后的二进制文件”。

当然,事情不可能总是没有缺点。以下是矢量图形相较于光栅图的两个主要缺点:

格式本质上是有限的。

一种矢量图像格式(就像有许多不同的光栅格式一样)总是将你限制在一定范围内的对象及其属性。格式的新版本发明并引入新的功能,但这只是突显了完美是无法达到的这一事实。矢量格式永远处于“建设中”。

许多图像很难,甚至不可能在矢量形式中精确复制。例如,需要复杂纹理的图像,如人类皮肤、头发或木材,本质上对矢量不友好。矢量世界传统上由精确的形状、平坦的颜色和光滑的渐变组成;如果你想要的是自然纹理,比如噪声、刮痕或污垢,那么在典型的矢量编辑器中渲染这些将会非常困难。

尽管 SVG 的透明度、渐变和滤镜功能使得你可以在 Inkscape 中创建令人惊叹的逼真矢量图像(参见插图 1 中的图)。此外,作为一种更高层次的抽象,任何矢量绘图都可以将光栅图像作为一种特殊类型的对象。这意味着,你总是可以将一张照片插入到 Inkscape 绘图中,并将其与任何矢量对象结合。

矢量格式转换是不可靠的。

出于同样的原因,将图像从一种矢量格式转换为另一种格式从来都不是简单的事情。这些格式的对象类型和功能集总是有所不同,有时差异并不显而易见;格式的不同版本让问题变得更加复杂。例如,SVG 支持模糊效果(17.1),而 PDF 不支持;另一方面,PDF 支持渐变网格(1.5.5),这是 SVG 目前所没有的特性(尽管 Inkscape 在实验性基础上支持它,10.7)。这使得任何形式的矢量转换都变得不那么确定。在最理想的情况下,目标格式无法直接表示的对象将被近似表示——例如,将 SVG 导出为 PDF 时,模糊对象可能会被嵌入的光栅图像替代。在最坏的情况下,格式转换会直接生成一个或多或少破损的图像。

这是 Inkscape 的矢量格式 SVG 如此重要的原因之一。它是一个公认的国际标准,具有丰富且定义明确的功能,因此可以作为矢量图形的共同语言(尽管 Adobe 的 PDF 在这一角色中仍然更为常见)。我们将在本章稍后详细讨论 SVG。

那么,矢量图形中到底存储了什么呢?除了刚刚提到的嵌入的光栅对象外,最常见的矢量对象类型是路径。路径只是一个命令序列,例如“画一条直线到某个点”和“画一条平滑的曲线通过若干个点”。这样的命令序列可以有任意多条,这意味着路径可以以任意精度近似任何几何形状或现实世界中的形状。路径可以具有填充(在路径所围成的区域内填充颜色)和描边(在路径本身上描绘颜色),以及定义路径外观的许多其他属性(图 1-2)。

图 1-2:一个路径对象可以表示任何形状。

还有其他几种对象类型(如文本对象、克隆和组)以及许多其他对象属性(如字体大小、可见性和模糊效果)。许多属性可以应用于所有类型的对象,而其他一些则特定于某些对象类型。一个图形只是各种类型对象的集合;你可以将这些对象放置在你需要的位置,甚至可以将它们放在彼此之上,并且可以使它们部分或完全透明,以便下面的内容能够透过显示。彩色插图中的图 1 展示了一个复杂的 Inkscape 图形示例,该图形大量使用了透明度、渐变和模糊效果来实现逼真感(如果你想全面查看它,可以从 Inkscape 的示例文件夹中加载)。

1.2 你能用 Inkscape 做什么?

很多。

方案、图表、示意图。计划和草图。科学插图和数据图表。图标、符号、标志和徽章。纹章、旗帜、交通标志。漫画、卡通、动漫角色、页面布局。土地地图——无论是现实的还是虚构的。各种类型的排版。横幅、传单、海报。网页图形。(广告也是。)书籍封面、贺卡、标题和小插图。儿童涂鸦和惊人的照片现实主义艺术。幻想艺术、粉丝艺术、游戏艺术,以及各种风格和类型的艺术。

本书的目标之一是展示矢量编辑工具在许多任务中的应用范围远超通常所认为的。事实上,与其试图列出所有 Inkscape 适用的用途,不如描述它适合的情况。让我们试着勾画出 Inkscape 的应用边界。

  • 许多与照片或其他现有的光栅图形相关的任务,例如颜色校正、修饰、格式或大小转换,最好在光栅编辑器中完成,如 GIMP 或 Photoshop。在矢量图像的所有局限性中,这一点是最明显的,因为它区分了两种常见的对比图形工具:矢量图和光栅图。需要注意的是,一些与光栅相关的任务——例如添加标注或标记、在位图背景上绘制形状、遮罩(18.3),甚至简单的修饰(18.4)——仍然可以在 Inkscape 中很自然地完成。

  • 使用自然媒介工具进行绘画——那些模拟油画、粉彩、水彩等的工具——最好在专门的光栅工具中完成,如 Krita、Corel Painter、MyPaint 或 ArtRage。更一般而言,这适用于任何艺术形式,其中颜色表面纹理是最重要的。尽管如此,如果你更注重形状和颜色,而不是纹理,或者你的艺术看起来只需要平面颜色、渐变和模糊,Inkscape 是“简单绘画”(第十四章)的最佳工具之一。

  • 生成文字丰富的多页文档,尤其是带有复杂功能的文档,如脚注、索引或目录,通常属于页面布局软件的范畴(如 Scribus 或 Adobe InDesign)或批量格式化工具(如 TEX 或 Apache FOP)。然而,Inkscape 在图形丰富的单页文档中表现得非常好,例如海报或传单。你甚至可以通过将每一页存储为单独的文档或图层来使用它进行一些多页设计(它尚不支持在一个文档内有多个页面)。此外,Inkscape 不支持 CMYK 颜色分离或专色,这限制了它在印刷工作中的实用性。

  • 虽然 Inkscape 的 3D Box 工具(11.3)可以用于简单的三维草图和场景,但它更适合传统 2D 艺术家使用,帮助他们描绘 3D 对象,而不是为创建 3D 世界的 3D 艺术家设计的工具。换句话说,如果你只需要一幅简单的 3D 场景图,Inkscape 能够帮你获得一个外观精美且几何上正确的结果。然而,如果你需要从不同角度呈现同一场景,或是制作 3D 动画,还是使用真正的 3D 软件(如 Blender、Maya 或 SketchUp 等)更为合适。

  • 你可以在 Inkscape 中做一些简单的CAD(计算机辅助设计;这个术语通常适用于工程图纸)工作。Inkscape 提供了精确绘制和变换对象的方式,以及大量的对齐、分布和吸附功能。然而,Inkscape 不支持像参数化建模这样的功能,也没有 CAD 元素库(如螺丝或管道),这些都是专业 CAD 工作所必需的。虽然你可以尝试从其他地方借用这些元素,但在大多数情况下,使用专业工具(如 QCAD 或 AutoCAD)仍然是更好的选择。

  • Inkscape 有一个专用的连接器工具,可以用来绘制相当复杂的图表和流程图,并自动路由连接器。然而,这个工具有一定的局限性;如果你需要创建许多标准化的图表,可以考虑使用专业工具,如 Visio 或 Dia。

  • 一些人成功地使用 Inkscape 进行演示文稿。凭借其便捷的对象操作和众多的视觉效果,Inkscape 在你需要制作演示文稿时确实是一个有吸引力的选择。你可以创建并重复使用带有标题和占位符文本的页面模板(3.2)。Inkscape 甚至包括一个独立的 SVG 查看器(Inkview),支持全屏模式和空格键进行“下一页”命令,这通常是展示保存为独立 SVG 文档的演示文稿所需要的全部功能。虽然 PowerPoint 或 OpenOffice.org Impress 等办公演示应用程序仍然有其优势,但一旦你习惯了 Inkscape 的图形功能,这些程序会显得比较笨拙。有些人使用 Inkscape 绘制图形,再用演示文稿应用程序添加文本和制作实际演示文稿。还有一些有用的插件,如 InkSlides(将多层 SVG 转换为多页 PDF)或 JessyInk(将多层 SVG 转换为可在 Firefox 或其他支持 SVG 的浏览器中查看的脚本演示文稿)。

  • Inkscape 的路径效果(13.3)和扩展(第十九章)可以生成许多有趣的图形效果,如林登迈尔系统、随机树、螺旋曲线或条形码。新扩展也很容易编程。然而,如果你需要的是一些复杂的算法艺术,例如分形图形,建议使用专业软件,并将结果导入 Inkscape 中。

  • Inkscape 目前尚不支持 SVG 动画,也无法在 SVG 文档中运行脚本(尽管你仍然可以在 Inkscape 中查看和编辑文档的脚本)。因此,虽然你可以用它绘制动画帧、角色和 UI 原型,但你仍需要其他应用程序将这些元素组合成一个可工作的动画或互动应用程序。

这些领域目前虽然还存在模糊不清(并且仍在变化),但它们是矢量图形领域的前沿。一切这些边界内的内容,都是现代矢量编辑器如 Inkscape 的合法领域。需要注意的是,这些限制中的一部分本身就是矢量图形所固有的;而其他一些则只是当前 Inkscape 的局限,可能在未来版本中得到克服。

有趣的是,很多人徘徊在图形领域的外围,却对矢量的核心领域视而不见。因此,他们常常为使用自己喜爱的专业工具来完成错误的通用任务而感到沮丧。比如,Microsoft Office 用户每当需要制作任何类型的图片或布局时都会在 PowerPoint 中挣扎,或者新手在论坛中抱怨在 GIMP 中绘制简单几何形状是多么困难。这些都是矢量盲目的典型例子;不要成为这种疾病的牺牲品!

矢量领域也是许多项目路线图的起点。无论我开始的是哪种项目,以及最终会使用什么软件,我的第一步通常是打开 Inkscape 并开始快速草拟。只有当我遇到上面提到的某些限制时,才会转向更专业的应用程序来完成我的项目。越来越多的时候,我发现自己实际上不需要离开 Inkscape 就能完成我开始的工作。Inkscape 的世界不断扩展。

1.3 Inkscape 艺术来源

没有用户社区,工具就是死的,而没有他们可以研究和重用的作品,用户社区也就不存在。如果每次都得从空白页面开始项目,或者根本没有人可以分享你的作品,Inkscape 使用起来就不会那么有趣了。

寻找 SVG 艺术的两个主要原因是学习重用。重用很简单;这正是“剪贴画”这一概念的核心所在。你不必从头开始绘制所有内容,而是将其他人创作的元素与自己的作品结合起来(当然前提是这些元素的许可允许这么做)。

在重用他人艺术作品时,只要 Inkscape 能读取源格式,格式本身并不是太重要(附录 B)。你不仅可以使用 SVG,还可以使用 PDF 和 AI 文件作为你设计中的矢量图像来源。PostScript 和 EPS(封装 PostScript)支持较少;你还可以导入 CDR(CorelDRAW)文件。

此外,任何东西都不会阻止你将位图文件导入 Inkscape,并将其用于设计中,或者利用 Inkscape 多功能的位图追踪器(18.5.2)将其转换为矢量路径。

即使你不需要剪贴画,学习也是下载你觉得有趣的 SVG 源文件的一个好理由。与位图不同,矢量图像包含了很多关于它如何创建的信息,而在 Inkscape 中你可以详细查看这些信息。可见区域与对象之间的对应关系、这些对象的类型、它们的属性、分组和层级结构——这些方面在你学习 Inkscape 或 SVG 技术时非常具有指导意义。

与大多数其他矢量工具相比,Inkscape 的文件在网上更容易找到。这并不令人惊讶,因为它的原生格式 SVG 是人类可读的,并且天然适合网页使用(大多数现代浏览器直接支持它)。此外,作为开源软件,Inkscape 推广共享文化,这种文化也延伸到内容方面。网上已经有大量的 SVG 素材(例如,可以在images.google.com/上搜索filetype:svg face)——比起 AI 或 CDR,SVG 的数量要多得多(但仍然远远少于 PDF)。

除了在网上搜索 SVG 内容,你还可以尝试以下资源:

  • FreeSVG.orgwww.openclipart.org/是两个社区网站,提供大量公共领域的 SVG 格式剪贴画。

  • Wikimedia Commons(commons.wikimedia.org/)包含了成千上万种各种各样的 SVG 图像,其中大多数是用 Inkscape 创建的。

  • 官方 Inkscape 论坛(inkscape.org/forums/)是 Inkscape 用户互相帮助、分享和讨论创作的地方。DeviantArt、Flickr、Reddit 和其他社交媒体上也有 Inkscape 的相关小组。

  • 最后,你并不局限于 SVG——Inkscape 是一个通用的矢量编辑器。只需在线搜索“矢量剪贴画”,你就能找到大量的免费和商业资源;大多数剪贴画将以 EPS、AI 或 PDF 格式提供,而 Inkscape 可以很好地使用这些格式。

1.4 SVG 的简短历史

Inkscape 使用 SVG 作为保存矢量文件的格式。什么是 SVG?

SVG(可缩放矢量图形)标准诞生于 1990 年代末 XML 革命的高峰时期。在那个时候,当简单而无限表达力的 XML 吸引了人们时,大家希望为一切创建 XML 词汇;矢量图形自然成为一个候选项。1998 年,W3C 成立了一个工作组,W3C 是负责 HTML、CSS、XML 等最常用网页标准的国际联盟。它们的第一次成果——SVG 1.0——于 2001 年发布;最新的官方版本是 1.1,发布于 2003 年。

然而,从那时起,SVG 的发展进展放缓。直到多年后,所有主要浏览器和图形应用程序才开始支持 SVG。经过长期开发的 1.2 版本最终被放弃,转而支持 2.0;截至本文撰写时,SVG 2.0 仍处于草案标准阶段。另一方面,SVG 已经超过了大多数专有竞争者(如 Adobe 的 Flash 或 Microsoft 的 XAML 和 Silverlight),并且已经稳固地成为互联网的默认矢量格式,并开始进入传统设计和出版领域。归根结底,开放性确实具有一定的价值!

源自矢量格式的漫长而复杂的历史,SVG 从一开始就努力做到正确的方式。受 PostScript 和 PDF 启发(1.5.1.1),它的设计旨在摆脱这些格式的限制。SVG 原生支持透明度、渐变、文本的 Unicode 编码以及许多其他在 21 世纪被视为理所当然的便利功能。它还添加了独特的滤镜效果(第十七章),这些效果本质上是栅格操作(如模糊),可以应用于对象而不失去矢量可编辑性和分辨率独立性。

就像曾经无处不在的 Flash 一样,SVG 也包含了相当全面的动画功能。仍在开发中的 2.0 版本添加了更多新功能,如自动换行(流式文本)、矢量效果、WOFF 字体等。

所有现代浏览器都在某种程度上(通常是足够的程度)支持 SVG。这意味着你可以像加载 JPG 或 HTML 文件一样将几乎任何 Inkscape SVG 文件加载到浏览器中,浏览器会准确显示它在 Inkscape 中的样子。

SVG 是一个庞大而复杂的标准,大多数现有软件仅提供有限的支持,Inkscape 也不例外。最显著的是,它无法进行 SVG 动画或脚本编写。还有一些较小的 SVG 特性也缺失;例如,对资源的引用(如渐变或符号)仅在同一文档内有效。Inkscape 项目的目标之一是最终支持所有 SVG 特性。

当你保存一个 Inkscape 文档时,你可以选择两种 SVG 格式:纯 SVGInkscape SVG。纯 SVG 就是纯粹的 SVG 1.1 代码,仅此而已。然而,Inkscape SVG 会在 Inkscape 的私有命名空间中添加相当多的元素和属性。

不必害怕 Inkscape 的 SVG!它是完全有效且符合标准的 SVG;这些额外的元素和属性的目的是提供 Inkscape 特有的关于 SVG 对象的元数据关于这些 SVG 对象,而不是添加一些 Inkscape 自有的不兼容对象。Inkscape 扩展可能会影响你在 Inkscape 中编辑对象时它们的行为,但从不影响文档的渲染。不过,参考 15.2.2 中的遗留例外。因此,Inkscape SVG 和普通 SVG 版本的同一文件在任何兼容的 SVG 渲染器中看起来完全一样。使用普通 SVG 的唯一理由可能是为了减少文件大小或生成更适合 SVG 专家手动编辑的文档。

Inkscape 还可以将文件保存为压缩 SVG(包括普通的和 Inkscape 版本)。压缩文件的扩展名为 .svgz;与 SVG 不同,它们不可读,但占用的磁盘空间要小得多。大多数程序都会像读取 SVG 文件一样轻松读取 SVGZ 文件。

1.5 Inkscape 与它的竞争者

当然,Inkscape 远不是唯一的选择。曾经和现在仍然存在着数十款矢量编辑器:有商业的,也有开源的,有针对不同平台的,有通用的,也有专业化的,活跃的和已停止开发的。有一些是值得在这里提到的。

在本书的第一版(2009 年)时,Inkscape 所面临的所有严重竞争者都是商业性的(且通常价格不菲)桌面应用程序,适用于 Windows 和 Mac。现在,在线编辑器带来了重要的新竞争,其中一些是部分或完全免费的(1.5.4);像我们生活中的几乎所有其他事情一样,矢量编辑也已经进入了在线和云端。(此外,这些新加入的工具通常并不强调它们是矢量编辑器,尽管它们本质上就是;它们只是“普通”的图形和设计工具。)然而,Inkscape 强大的原始功能、广泛的生态系统、零成本以及跨平台的可用性,依然使它保持着显著的竞争优势。

1.5.1 Adobe Illustrator

Adobe Illustrator 在这个列表中毫无疑问占据了第一的位置。虽然它已有些年头,但一直在不断发展,是一款功能强大、特性丰富的应用程序,通常被认为是该领域的领军者,也是矢量图形的事实标准。即使你不使用 Illustrator,你也很可能会遇到它的功能和版本介绍,其他程序与它的对比,当然,还有以 AI 创建的各种格式的矢量文件(包括 SVG)。

毫无疑问,Illustrator 的影响力很大程度上来源于它那位更为知名的“表亲”——Adobe Photoshop。作为同一创意套件的一部分,Photoshop 和 Illustrator 共享许多用户界面特征,并且经过优化,能够更好地协同工作。然而,与 Photoshop 相比,Illustrator 在其领域的地位幸运地并非垄断性。即使没有 Inkscape,它依然面临着非常强劲的竞争,尽管 AI 的影响力稳步增长。

Illustrator 起源于 1980 年代末,拥有悠久而曲折的历史。它并非一直都是矢量图形领域的主导者。许多功能最初是在竞争软件中开创的,有些甚至是在多年后才被重新实现到 AI 中。然而,如今它已经变得如此庞大——每个版本都在不断增长,尤其是当你考虑到 Adobe 的其他 Creative Suite 以及整个第三方 AI 插件行业时——因此任何概括都充满风险。对很多人来说,Illustrator 是多种多样的。

但我认为我可以冒险做出这样的概括:无论其功能如何,很少有人会称赞 Illustrator 的用户界面是可用性的典范。批评者(显然大多是竞争软件的用户)指出,界面杂乱无章,浮动对话框成群,工具过多且功能过于狭窄,无法在画布上直接编辑对象属性,以及缺乏上下文信息。竞争编辑器也常声称在速度上超过 AI。

1.5.1.1 Adobe 的矢量格式

与 Illustrator 以及 Adobe 相关的矢量格式在现代数字世界中发挥着至关重要的作用。即使你不打算在 Inkscape 中使用除 SVG 外的任何格式,了解 PostScript 和 PDF 的概念、它们之间的关系以及它们的功能也是非常有用的。

Adobe 在 1984 年的第一个重要成就,就是创造了所有矢量图形格式的祖先:PostScript。PostScript 被设计为一种发送数据到打印机的标准,它恰好在 1980 年代,由于个人电脑和激光打印机的普及,参与了“桌面出版革命”的关键时刻。

PostScript 是一种相当不寻常的格式,因为它不仅仅是一个数据格式,而是一个完整的编程语言。PostScript 文件实际上是一个程序,打印机或计算机必须运行它才能获得图像。例如,它可能包含一条指令来打印一行文本,例如 "I must not disrupt the class",并且有一个循环会重复打印这一行一百次。不幸的是,这也意味着由于程序中的错误或某人的恶意意图,PostScript 程序可能会无限运行,耗尽系统资源。

从积极的一面来看,PostScript 的解释器占用的内存很少,因此可以嵌入到当时的硬件中。因此,它很快在打印机制造商中流行开来,并成为发送文件进行打印的事实标准。

它还被用作第一版 Adobe Illustrator 原生文件格式的基础,该版本大约在那个时候问世。尽管随着每个版本的发布,AI 文件格式发生了许多变化,但长时间内其基础始终保持不变:AI 文件只是遵循某些约定并使用 Adobe 的 PS 函数库的 PostScript 文件。

对于 Illustrator 用户来说,不幸的是,PostScript 作为一个高度优化的打印机语言的优先级,与其成为通用矢量图形媒介的目标并不容易平衡。例如,PostScript 的 Level 2(1991 年)增加了设备无关的 CMYK 颜色,但直到 Level 3(1997 年),基本的渐变才得以直接实现。(直到 PS 3,想要在 PostScript 中创建渐变的应用程序必须通过叠加许多狭窄的逐渐变化的色条来“伪造”渐变。)即使是最新版本的 PostScript,也没有足够的演进来原生支持透明度。

这无疑是早期版本的 Illustrator 很难快速获得用户需求的新特性(而竞争对手的矢量编辑器已经提供这些特性)原因之一。直到今天,Illustrator 的用户界面仍然保留着基于 PostScript 功能集构建的痕迹,其他所有功能似乎都是事后添加的。

然而,PostScript 最大的问题并非其功能限制。随着时间的推移,作为编程语言的特点变得愈加沉重。曾经(在 1980 年代末)是一种巧妙的黑客技术,现在却越来越显得繁琐且危险。由于任何 PostScript 文件都是一个程序,你根本无法知道该文件究竟会显示什么,除非 运行 这个程序。这意味着你需要一个完整的 PostScript 解释器才能进行最简单的 PostScript 文件处理;你甚至无法直接将两个 PostScript 文件合并为一个文档并获得可预测的结果。

Adobe 试图通过对 PostScript 文件施加各种限制来纠正这一问题。其中一个限制就是 封装 PostScript (EPS) 格式。EPS 文件只是一个可以可靠地插入到其他文档中的单页 PostScript 文档。然而,显然这还远远不够。

所以在 1993 年,Adobe 采取了更为激烈的措施。它推出了 便携文档格式 (PDF),尽管基于 PostScript,但抛弃了作为编程语言的概念。最初,PDF 只是简化的 PS,以声明式的方式重写,并增加了压缩和一些顶层的文档管理功能。后来,Adobe 将 PDF 发展得远远超出了 PostScript 所能提供的功能;例如,PDF 版本 1.4(2001 年)中就加入了透明度功能。

尽管 PDF 的既定目标是互联网文档交换,但它的普及度逐渐提高,最终在印刷和设计领域也占据了一席之地。PDF 是开放格式、由 ISO 标准化且任何人都可以实施的事实也帮助了它的传播。到现在为止,PDF 已在大多数商业应用中取代了 PostScript,包括印刷领域。

对我们讨论更为重要的是,从 9.0 版(2000 年)开始,Adobe Illustrator 将其原生的 AI 文件格式从基于 PostScript 转为基于 PDF 的格式。这意味着任何在现代版本的 Adobe Illustrator 中保存的 AI 文件,实际上都是 PDF 格式,可以被任何支持 PDF 的软件查看和导入。Inkscape 的 AI 导入器实际上与其 PDF 导入器是一样的。

总结来说,在目前的情况下,如果可以使用 PDF,使用 PostScript 或 EPS 就没有意义了。Inkscape 可以导入 PS 和 EPS 文件,但需要先将它们转换为 PDF,这要求你的系统中安装免费的跨平台软件包 Ghostscript (B.4)。从 Inkscape 导出 PDF 格式的结果比导出 PostScript 格式的效果更好。

1.5.2 CorelDRAW

Illustrator 的最大竞争对手之一是 CorelDRAW。像 Illustrator 一样,它是一个大型的、功能齐全的应用程序,并且是一个图形应用套件的一部分。然而,它们的相似之处到此为止。

CorelDRAW 一直以来将自己定位为“为我们这些普通人”设计的矢量编辑器。它的价格低于 Illustrator 或 Freehand(早期 1990 年代 Illustrator 的主要竞争者,现已被 Adobe 收购并停产),CorelDRAW 强调易用性,并且在 1990 年代大大拓展了矢量编辑工具的用户群体。在一些国家和社区中,它曾经比 Illustrator 更受欢迎,直到现在依然如此。

CorelDRAW 首创了一些有价值的 UI 概念,这些概念被传承到许多其他应用程序中,包括 Inkscape。例如,首次出现在 CorelDRAW 中的单一选择工具,可以进行各种选择和变换(点击选择、移动和缩放,再点击一次可以进行旋转和倾斜);而 Illustrator 和 Freehand 则分别有“选择”、“缩放”和“旋转”工具。

它还引入了将形状(如矩形或椭圆)作为独立对象类型的概念,路径编辑工具在这些形状上的表现不同于在普通路径上的表现。长期以来,Illustrator 没有形状的概念;它有一个工具来绘制矩形,但任何新绘制的矩形都会变成一个矩形路径,没有矩形特定的可编辑属性。

1.5.3 Xara

Xara(其当前版本名为 Xara Designer Pro)一直是矢量编辑器竞争中的一个小角色,但它具有重要的历史意义。它是第一个具有完整屏幕抗锯齿、画布上的渐变编辑与方便的控制手柄、便捷的透明度支持、以及根据当前工具提供上下文相关控制面板的矢量编辑器。此外,Xara 一直以来都非常快速,这在 1990 年代和 2000 年代的硬件环境中尤其重要。

总体来说,Xara 遵循了 CorelDRAW 的 UI 范式,但在此基础上进行了很大的改进。长期以来,Xara 维持着一个相当庞大且非常忠实的用户群体。难怪 Inkscape 借鉴了 Xara 的许多想法和方法。然而,随着时间的推移,Xara 的创新逐渐消退,而其竞争对手则逐步迎头赶上;到 2000 年代中期,大多数人认为 Xara 只是一个“不错的小应用”——非常稳固和易用,但稍显过时。

2005 年,Xara 有限公司将其矢量图形编辑器发布为开源并移植到 Linux,名为 Xara LX。这样做的原因之一是 Inkscape 的快速发展——尽管 Inkscape 比 Xara 年轻,但它已经拥有一些独特的功能。另一方面,Inkscape 的开发者一直将 Xara 视为其榜样,Xara 凭借一致的界面设计和出色的可用性成为了 Inkscape 的模范。显然,Xara 希望借助开源人才来振兴其产品。

然而,在最初的一段时间后,Xara LX 未能吸引到开源开发者的重大关注,主要是因为 Xara 有限公司拒绝开源其一项关键代码——渲染器。现在,Xara LX 已经到了 0.7 版本,仍然可以使用,但其开发已经停滞。

1.5.4 在线编辑器 [1.1]

一类自本书第一版以来已经成熟的矢量编辑器是在线矢量编辑器——这些编辑器在你的浏览器中运行,不需要在计算机上安装任何软件。这类在线工具自然在性能和功能上受限,相比桌面应用程序有所欠缺。与此同时,许多用户甚至不需要那么强大的功能:他们只需要一个快速的草图、草案或模型,比如一张照片加上一些文字和简单的形状。对于这些用户来说,在线编辑器的便利性非常有吸引力。

尤其是在这种在线编辑器属于提供打印或其他设计服务的公司时,情况尤为如此。每当你希望客户提交他们的设计时,给他们提供一个即便是原始的在线编辑器也比强迫他们使用一款复杂的软件要好得多——大多数情况下,他们对这种软件几乎没有需求(即便这个软件是免费的,比如 Inkscape)。那些觉得在线编辑器功能受限的用户,仍然可以通过将复杂的离线设计上传为位图来使用它们。

最具能力的在线编辑器之一是 Canva。它确实提供打印服务,但你也可以将你在 Canva 上制作的设计下载为位图或 PDF 文件(但不能是 SVG 文件),然后随意使用。Canva 的吸引力不在于其编辑器本身(虽然它足够用),而在于其在线社区以及它提供的丰富字体、图形和可重用模板。另一个不错的在线编辑器(支持 SVG 导出)是 Gravit;它和 Canva 一样,都提供免费的基础版在线编辑器,但对具有附加功能的高级版收费。

在开源方面,一些项目提供了可嵌入的矢量编辑器库,你可以将其添加到你的网站上。两个著名的项目是 SVG-Edit 和 Fabric.js,它们都原生支持 SVG。使用这样的库需要扎实的 JavaScript 编程技能,但在自己的网站上拥有一个不错的简单图形编辑器,可能值得为此付出的努力。

1.5.5 . . . 和 Inkscape

与商业竞争对手相比,Inkscape 在几个方面仍然得分较低,如渲染性能和对先进打印技术的支持。另一方面,Inkscape 拥有一些在其领域几乎独一无二的创新编辑功能,例如克隆拼接器(16.6)、3D 立方体工具(11.3)、路径效果(第十二章)以及 Tweak 工具的部分功能(8.9)。

Inkscape 中某些功能尚未实现的最明显原因是它们在 SVG 中缺失。例如,Inkscape 实现了 SVG 的线性和椭圆渐变(10.1),甚至还有渐变网格(10.7)——但它缺少其他类型的渐变,例如 Xara 支持的圆锥渐变。多页文档也是如此:目前 SVG 标准中并未提供此功能(虽然你可以通过图层在某种程度上模拟页面)。

另一方面,SVG 的限制仅影响 Inkscape 能够处理的对象或属性类型。在处理这些对象以及将它们组合成更高级别对象的方式上,Inkscape 完全可以自由创新——并且它很好地利用了这种自由。

在界面和可用性方面,Inkscape 通常被认为容易学习和使用。Inkscape 的用户界面与 Xara 相当,实际上非常相似。有些功能在这两个程序中做得更加便捷,但这两个程序都拥有一个不干扰、简洁的界面,并提供了很多易于访问的强大功能。

作为一个真正的开源应用,Inkscape 的代码大多由极客编写,而极客的兴趣和优先事项通常与商业开发者不同。首先,极客讨厌简化的界面,喜欢强大的控制和无限的调整。他们尤其欣赏丰富的键盘控制,而 Inkscape 拥有前所未有的键盘快捷键,涵盖了大部分模式、工具、命令和功能(3.4)。

与功能或可用性同样重要的是应用程序的稳定性和速度。Inkscape 的发布版本偶尔可能会崩溃或冻结(请经常保存!),但通常情况下,其稳定性对大多数用户来说不是问题。速度曾经是旧版本程序的主要抱怨——但最近,随着多线程渲染器的引入,Inkscape 的显示速度已经大大提高。

1.6 开源应用的生命周期

从关于 Inkscape 竞争的讨论中可以看出,对于一个严肃的矢量编辑器来说,成为一个开源应用是相当不寻常的。是什么让 Inkscape 在其他开源尝试(且失败的尝试众多)中脱颖而出呢?让我们简要回顾一下 Inkscape 的历史。

Inkscape 的故事几乎与 SVG 的故事几乎同时开始,尽管那时的第一段代码还没有被称为 Inkscape。它叫做Gill,是由一个人,Raph Levien,在 1999 年初为 W3C 讨论中的新矢量格式开发的一个简单查看器和编辑器。这是一个典型的单人项目,最终也命运多舛——它的作者很快就失去了兴趣。

但是,Gill 代码是开源的,另一位开发者接手了这个项目的开发。Lauris Kaplinski 将项目重命名为Sodipodi,并为其设定了一个更为雄心勃勃的目标:开发一个真正的矢量编辑器,具备这个类别的大部分功能,用户界面主要模仿 CorelDRAW,但也受到了知名开源位图编辑器 GIMP 的影响。

Sodipodi 的第一次发布是 Lauris 单独完成的,吸引的关注不多。然而到了 2002 年,越来越多的人开始发现 Sodipodi,其他开发者的补丁也开始涌入。然而 Lauris 依然是唯一的维护者;他决定哪些补丁会被采纳,以及何时发布新版本。除了他之外,很少有人有权限提交项目代码。

Lauris 在 Sodipodi 上做了大量工作;直到今天,Inkscape 的大量代码仍然保留着他的版权。然而,随着时间的推移,他独裁的项目管理方式逐渐成为障碍。长时间忽视补丁以及在开发方向上发生的分歧,带来了不健康的局面。

2003 年 10 月,事情达到了一个转折点。一群不满的开发者,在与 Lauris 无法达成共识后,宣布了一个分支。他们拿到了最新的 Sodipodi 代码库,添加了他们的补丁,并为这个新项目取了个酷名字:Inkscape。(如果你在想为什么可以合法地拿别人的版权代码进行修改和重命名,阅读你手中 Inkscape 副本中的通用公共许可证(文件 COPYING)即可。)短暂的一段时间内,Inkscape 和 Sodipodi 是并行开发的,但母项目很快就进入了休眠状态,无法跟上其充满活力的后继者。

与 Sodipodi 相比,Inkscape 项目非常开放。没有一个人拥有决定事物做法的至高无上的权利。要获得完全的开发者权限,包括直接提交代码到代码库的权限,你只需要提交两个成功的补丁。尤其是在 Inkscape 的早期,几乎没有进行任何讨论;如果某人对程序的某个方面表现出积极兴趣,其他人通常会认为那个人知道自己在做什么,并不会干涉。

随着时间的推移,许多指导原则逐渐浮现,现在如果某个贡献与开发者对事物运作方式的看法相悖,它被拒绝的情况并不罕见。然而,仍然没有一个顶级的权威人物;一切都由讨论和共识决定。这意味着任何对说服他人充满热情且能高效编程的人,仍然有很大的机会影响项目的整体方向。

在这个项目的指导原则中,有一个简单的规则:倾听用户的声音。这听起来是常识,但令人惊讶的是,许多软件项目,无论是商业项目还是开源项目,实际上都没有遵循这一点。在 Inkscape 中,这一点尤其有帮助,因为许多开发者本身就是该程序的活跃用户。此外,在早期,Inkscape 必须争取 Sodipodi 的用户支持才能生存下来——但在 Sodipodi 停止成为竞争对手之后,重视用户反馈的传统仍然得以延续(尽管 Inkscape 并不缺乏其他竞争对手)。

项目的另一个规则是 先补丁,后讨论。也就是说,如果你有一个想法并且能编写代码,别试图说服别人来实现它;自己动手做,看看其他人在程序中实际使用后给出的反馈。如果效果不错,其他开发者会帮你把它完善。(如果不好,你只需撤回即可。)

"先补丁"规则的一个结果是开发版本必须始终可用;任何回退都要尽早发现并修复。一群热心的用户每天都会下载最新的代码并进行测试,远在正式版本发布之前。开发者鼓励这种持续的测试,并通过每天为所有主要平台提供新的编译二进制文件来便利这一过程。结果是项目稳步增长——如今它被广泛认为是最重要的开源项目之一,并且在其软件领域中是一个强有力的竞争者。

第二章:Inkscape 入门指南

如果你之前没有使用过 Inkscape,也几乎没有使用过其他矢量编辑器的经验,那么这一章适合你。这是你迈入新世界的第一步。如果你已经尝试过在 Inkscape 中工作,并且觉得自己可以独立重建本章的最终示例(图 2-26),那么可以直接跳到下一章。

2.1 安装 Inkscape

在安装 Inkscape 之前,首先要问自己一个问题,那就是你想要一个稳定版本还是开发版本。稳定版本已经正式发布,并且有版本号与之对应。称一个版本为稳定版本并不意味着它完美无缺、永远不会崩溃;它只是意味着这个版本已经经过了相当的测试,文档也更为完整,并且是大多数人使用的版本。实际上,除了稳定性,运行稳定版本的最大优势是其他用户也在使用这个版本,因此其他 Inkscape 用户更有可能帮助你。

总体而言,我建议你从稳定版本开始,但如果你发现自己喜欢 Inkscape,并希望支持它的开发,或者你需要使用自上次发布以来新增的功能,可以考虑升级到开发版本(访问下一个版本的发布说明,网址为 wiki.inkscape.org/,查看正在开发的功能)。

使用开发版本有其独特的优势。首先,这些版本拥有所有最新和最好的功能,与稳定版本相比,这些新特性可能具有重要意义(尤其是当稳定版本已经发布了几个月时)。这些新功能通常包括修复稳定版本中的重要漏洞。此外,通过运行开发版本,你也在帮助开发社区发现并解决新的 bug。自然,活跃的开发者更倾向于使用开发版本,因此你更有可能直接从开发者那里获得及时的帮助。

那么稳定性如何呢?确实,开发版本通常会有更多的 bug,并且崩溃的频率也较高。然而,如果你遇到了让你抓狂的新 bug——而且这个 bug 没有得到及时修复——你可以随时回到最新的稳定版本,避免这个 bug。(无论使用哪个版本,都记得常常保存文件!)

在 Inkscape 网站上(inkscape.org/),从菜单中选择下载,并选择当前的(稳定)版本或最新的开发版本。然后,选择适合你操作系统的版本。

Windows

你可以选择 .exe.msi 格式的安装程序。对于 .exe,只需运行它;对于 .msi,右键点击并选择安装。然后按照提示选择语言、文件夹以及其他选项。最后,你会在桌面和开始菜单中看到一个可点击的 Inkscape 图标。你也可以从 Windows 应用商店下载 Inkscape。

Linux

这里有几个选项。如果你只需要一个稳定版本,大多数 Linux 发行版已经包含了一个;只需在你的软件安装应用程序中选择它(例如,在 Ubuntu 上,启动 Ubuntu 软件中心或直接从命令行运行 apt-get install inkscape)。

但是,这个版本可能比较旧。如果你想要更新的稳定版本或最新的开发版本,Inkscape.org 提供了许多可下载的软件包,可以与 Linux 软件包管理器一起使用。

macOS

对于 Mac,你将下载一个磁盘映像 (.dmg) 文件。你也可以通过 MacPorts 安装 Inkscape。

新的开发版本会相当定期地发布,通常是每天。但是,如果你想要绝对最新的 Inkscape,你可以从 GitLab 获取最新的 Inkscape 代码并编译它(通常在 Linux 上设置开发比在 Windows 或 Mac 上更容易)。这需要高于平均水平的计算机知识,因此我们在此不作讨论。

2.2 Inkscape 的“Hello, World!”

学习一门新的编程语言通常从“Hello, World!”示例开始。这是一个最小但真实且可工作的程序,它只是在某个地方输出字符串“Hello, World!”,然后退出。我现在将向你展示一个最小但真实的 Inkscape 编辑会话,其中包括启动程序、创建一些对象、编辑它们以及保存结果。

启动 Inkscape 与启动任何其他程序没有什么不同。根据你的操作系统和个人偏好,你可以单击图标,从菜单中选择它,或者在命令行中键入 inkscape

首次运行时,Inkscape 首先显示一个有用的欢迎对话框(图 2-1)。它的第一个选项卡“快速设置”允许你调整程序的外观和行为:UI 和图标的主题(所有主题都包含一个深色变体)、活动的键盘快捷键集以及画布的外观。在此对话框的“开始绘图”选项卡上,你可以选择最近编辑的文档(如果有)或新的文档模板之一,这些模板分为“打印”、“屏幕”、“视频”、“社交”和“其他”(3.2)。同样在此选项卡上,你可以取消选中“每次都显示此对话框”以避免将来看到该对话框。

图 2-1:Inkscape 欢迎你。

在关闭欢迎对话框(通过选择文档或按 Esc 键)后,Inkscape 会打开其主编辑窗口。图 2-2 显示了默认的 Inkscape 界面。

图 2-2:Inkscape 的第一印象

Inkscape 的窗口在中间显示一个白色的工作区域,称为画布,并在边缘显示许多工具和控件。画布包含 Inkscape 为你创建的新的空文档,因此你无需选择“文件 ▶ 新建”。你可以立即开始处理它。

在左侧的图标列中,点击带有蓝色方块的图标。这是矩形工具,可以让你创建和编辑矩形。现在,点击画布上的任何位置并拖动(如果使用平板,点击并拖动)。一个蓝色矩形将出现;当你松开鼠标时,矩形将作为文档中的新对象创建(图 2-3)。

图 2-3:我们创建了一个矩形。

现在,点击左侧的A按钮,这将切换到文本工具。点击(但不要拖动)矩形内部。你会看到一个文本光标在你点击的位置闪烁。输入**Hello, World!**。你刚刚创建了一个文本对象,它是文档中的第二个对象(图 2-4)。

图 2-4:我们添加了一些文本。

现在,你可能对对象的大小、位置或颜色有了更清晰的想法。轻松解决!在左侧工具栏中,点击最上面的按钮(一个箭头)。这是选择工具。现在你可以通过鼠标拖动将任何对象移动到画布上的任何位置。要改变对象的颜色,只需从窗口底部的调色板中拖动该颜色,并将其放到对象上。

足够的调整。文档看起来完美。唯一的问题是它还没有保存到文件。只需选择文件 ▶ 保存,导航到你选择的文件夹,并输入文件名。就这样。你刚刚创建了一个包含图形和文本的新 SVG 文档。恭喜!

2.3 界面概览

让我们更仔细地看一下 Inkscape 的界面(图 2-5)。

图 2-5:Inkscape 界面的元素

通常最好最大化 Inkscape 的窗口。如果你需要更多的工作空间,可以按 F11 切换到全屏模式。

窗口的大部分区域被画布占据,四周被标尺(上方和左侧)和滚动条(底部和右侧)包围。在画布上,你可以看到一个矩形页面(默认 A4 纸大小)带有阴影。这个页面框架定义了文档的边缘。然而,Inkscape 允许你在画布上和画布外的任何地方自由绘制——页面框架并不是限制,只是一个提示。只有在将文件导出为某些矢量格式时,或在外部查看器中查看 SVG 文件时,这个框架才有意义;在这两种情况下,你将只能看到与页面矩形重叠的对象。如果你不关心它,可以隐藏页面框架。

你看到的画布部分远远不代表画布的全部。事实上,画布非常大,几乎是无限的。你可以通过缩小或在任何方向上滚动来查看更多内容,如下一节所示。在 Inkscape 中,你永远不会没有空间!(事实上,你甚至可能会迷失在这片广阔的画布中;如果想返回页面框架,随时按下 5 键即可。)

画布左侧是主工具箱(垂直)。此工具箱上的按钮可以激活各种 Inkscape 工具。每个工具都有其特定的用途、功能、控制、键盘快捷键、鼠标光标及其他相关内容。有些工具用于创建新对象,有些用于以不同方式编辑对象,其他工具则帮助你在文档中导航。本章中我们将简要介绍一些工具,并在接下来的章节中详细探讨它们。

画布上方是一个水平工具栏,称为工具控制栏(或简略为控制栏)。顾名思义,它包含了当前选择的工具的各种选项和控制。点击左侧的一些工具按钮,观察控制栏的内容发生变化。

Inkscape 窗口顶部是一个标准菜单栏:文件、编辑、视图等。整个书中,我们会多次提到这些菜单中的命令和子菜单(例如,编辑 ▶ 克隆 ▶ 解除克隆)。要搜索菜单,按下 ? 键以打开命令面板。开始输入以过滤所有当前可用命令的列表,或者按下搜索框中的上箭头以访问你的命令历史记录(图 2-6)。

图 2-6:菜单和命令面板(在你按下 ? 后)

在右侧,有两个垂直工具栏。命令栏是一个常见的工具栏类型,你可以在许多程序中找到它。它有用于执行保存、打开、撤销等操作的按钮。另一个工具栏,位于更右侧,是对齐控制栏,在这里你可以查看并切换多种对齐选项(7.3)。

在画布下方,有一个颜色调色板;它可以通过自己的滚动条进行水平滚动。在更下方,有一个状态栏,里面包含许多组件,我们稍后会详细探讨。现在,请注意状态栏中的消息区域,它始终显示与你当前操作相关的消息。请留意这些消息,它们可能会为你节省大量时间并避免挫折!

最后,Inkscape 有一组对话框,每个对话框专门用于特定任务。你可以将对话框放在浮动窗口中,或放在画布左右两侧的两个静态停靠区(最初为空)中(图 2-7)。

图 2-7:多个对话框在静态停靠区和浮动窗口中的显示

在每个窗口或停靠区内,窗口可以作为标签叠加显示,或者垂直堆叠。只需拖动每个对话框的标题标签,将其放置到所需的位置(一个绿色框架会出现,指示你可以放置对话框的位置)。要将对话框从停靠区移到独立的静态窗口中,右键点击它的标题并选择移动标签到新窗口,或者将其拖离 Inkscape 窗口。Inkscape 会记住并恢复每个对话框上次可见时的位置和大小。

若要显示或隐藏界面中的任何元素(菜单、画布和停靠窗口除外),可以使用查看 ▶ 显示/隐藏子菜单中的命令。对于对话框,无论是停靠还是浮动,都可以方便地按 F12 键来隐藏或重新显示所有当前活动的对话框。

2.4 平移和缩放

在一个无限的矢量画布上,能够移动画布以及缩放以便获得更便捷的视图的工具非常重要。Inkscape 提供了多种平移(滚动)和缩放方式——足以满足各种需求。

当然,画布的滚动条也可以正常工作以滚动画布——但它们并不是特别方便,所以我通常通过按 Ctrl-B 将它们隐藏。相反,我最常用的是中键拖动。按下鼠标中键并在画布上任何位置拖动,可以向任何方向平移画布。中键拖动在任何工具或模式下都能工作。

然而,我的右手经常在键盘上,而不是在鼠标上。在这种情况下,滚动画布最简单的方法是按 Ctrl+方向键。例如,如果按住 Ctrl-↑,画布会开始向下滚动(也就是说,你的视图开始向上移动),一开始较慢,但会逐渐加速。当你熟练掌握后,这种操作感觉非常自然。

放大和缩小也很容易。使用键盘,只需按加号 + 或减号 – 键即可放大或缩小(与大多数其他程序不同,这里只需要按普通的加号和减号键,无论是主键盘还是数字键盘;不需要按 Ctrl 或 Shift)。使用鼠标,中键单击可以放大,按住 Shift 再中键单击则可以缩小。或者,切换到缩放工具,使用常规的左键单击进行放大,Shift+左键单击进行缩小,或者按住左键拖动进行矩形区域的缩放。

欲了解更多的缩放和平移信息和技巧,请跳转到 3.10。

2.5 创建对象

现在你可以在画布上自由导航了,让我们更详细地看一下用于创建对象的工具。

在主工具箱中,首先看到的创建对象的工具是矩形工具。这个工具和接下来的四个工具——椭圆、星形、3D 盒子和螺旋——统称为形状工具,它们所创建的对象被称为形状(图 2-8)。

图 2-8:玩转形状工具

形状是一个几何对象,你不仅可以移动、缩放或旋转它(就像处理其他任何对象一样),还可以根据其类型以特定的方式进行编辑。例如,对于矩形,你可以让它的角变圆;对于椭圆,你可以将其转换为一个线段(如饼状图形)或椭圆弧;对于一个 3D 盒子,你可以在它自己的 3D 空间内移动和调整大小。我们将在第十一章讨论形状;现在,选择任何形状工具并开始在画布上绘制。每次鼠标拖动,从按下到松开左键,都会创建一个新的形状。

工具箱下方是钢笔铅笔工具(图 2-9)。这两种工具都可以创建任意路径,但它们的方式不同。铅笔工具的工作方式就像真正的铅笔——你在画布上绘制,它留下痕迹。(请注意,这个痕迹并不完全准确;与实际的鼠标轨迹相比,它稍微有些平滑。)

图 2-9:使用铅笔和钢笔工具

钢笔工具更为复杂;它假设你了解路径是由通过线性或曲线段连接的节点组成的。现在,只需在不同的点点击几次(这会在点击点之间创建线性段),然后点击并拖动几次,最后按 Enter 完成路径。铅笔工具和钢笔工具默认创建的路径是细黑线条,没有填充颜色。我们将在第十四章中讨论这些工具。

接下来的两个工具,书法钢笔油漆桶,也会创建路径,但与铅笔和钢笔不同,它们默认创建的路径是填充的,没有边框(图 2-10)。

图 2-10:使用书法钢笔和油漆桶工具

书法钢笔是 Inkscape 中最通用的工具之一;它的许多选项和参数不仅能模拟书法钢笔(它的最初用途),还可以模拟各种画笔和许多其他绘图工具及行为(其中一些在现实世界中没有对应物)。这是那些使用 Inkscape 来简单绘画的人的主要工具(第十四章)。

油漆桶工具对于漫画家或插画师来说也是一个很大的帮助。正如你所期待的,它可以填充任何封闭区域,创建一个填充的矢量路径。练习时,可以用书法钢笔画出几个笔画围绕一个封闭区域,然后点击内部使用油漆桶工具。(如果点击的是一个未封闭的区域,工具将无法填充并会在状态栏中提示。)

我们最后要看看的是文本工具,它创建和编辑文本对象(图 2-11)。创建一个新的文本对象就像在任何地方点击并开始输入一样简单。或者,你可以点击并拖动,这样你就创建了一个矩形的流动文本对象,当你输入文本直到右边缘时,它会自动换行。

图 2-11:使用文本工具

编辑现有文本对象同样简单——用文本工具点击它以定位光标,并使用常见的文本编辑快捷键(方向键、Home、End、Delete、Enter 新行等)。文本工具是第十五章的主题。

现在,如果你需要在 SVG 文档中插入一个光栅对象,比如照片,怎么办?无需工具,使用文件菜单中的导入命令。只需选择任何光栅图像文件(JPG、PNG、GIF 和 TIFF 都可以),它将被插入到你的文档中。然而,它仍然是光栅格式;有关将其转换为矢量对象的方法,请参见 18.7。

2.6 选择

如你所见,在你创建一个新对象(例如,使用矩形工具或书法笔)后,该对象周围会出现一个虚线框。这个框表示该对象是选中的

选择是 Inkscape 中的一个基本概念。几乎所有的工具、命令、对话框和快捷键都作用于当前选中的对象。各种信息显示,如状态栏,始终描述当前选中的对象。快速、精确地选择所需的对象,以及弄清楚当前选中的是什么对象,是在 Inkscape 中高效工作的关键。

允许你选择对象的主要工具被恰当地称为选择器(图 2-12)。它也是工具箱中的第一个(最上面)工具,因为选择是如此重要。你不仅可以通过点击按钮切换到这个工具,还可以按 F1、S 或空格键。你真的不可能错过这个工具!

图 2-12:选择器工具和一个已选择的对象

使用选择器进行基本选择非常简单(就像 Inkscape 中的任何其他基础操作一样)。你只需点击任何对象,哇,那个对象就被选中了。现在试试看。观察状态栏消息如何立即更新,告诉你你选择的是什么:矩形、路径、椭圆、文本对象等等。

任何时候都可以选择多个对象,如图 2-13 所示。通常,当你已经选择了某个对象时,点击另一个对象会取消选择第一个对象。然而,如果你按住 Shift 键并点击一个未选择的对象,它会添加到已选择的对象列表中。(如果你按住 Shift 键并点击一个已选择的对象,它会移除该对象的选择。)注意状态栏上显示的新选择信息。还要注意每个被选择的对象都有自己独立的虚线框。

图 2-13:多个对象被选中

想一次选择 1,000 个对象吗?不需要 Shift 键点击 1,000 次。使用选择器,只需拖动(按住鼠标按钮并移动鼠标而不松开按钮)穿过你想选择的所有对象。你会看到一个跟随鼠标的矩形橡皮筋。当你松开鼠标时,所有完全在橡皮筋内的对象将被选中,如图 2-14 所示。

图 2-14:使用橡皮筋选择多个对象

你也可以使用键盘快捷键来选择。Tab 键的通用含义是“转到下一个”——因此在 Inkscape 中,按 Tab 键会选择下一个对象(按 z-order 排序,4.4,除非你更改它,否则这与对象创建顺序相同),而按 Shift-Tab 则选择上一个对象。熟悉的 Ctrl-A 在许多程序中表示全选,在这里也同样有效。

需要不同的选择?按下 Escape 键,或点击空白画布上的任何地方(不是在对象上)取消选择任何已选中的内容。

这只是 Inkscape 提供的所有选择方法和技巧的一小部分,但足以帮助你入门。接下来我们将实际操作改变所选内容。

2.7 变换

选择工具的另一个功能,除了选择对象外,就是变换它们。

变换是一个总括性的术语,包括移动缩放(调整大小)、旋转倾斜。其中前两种,特别是移动,在矢量图形工作中非常常见,因为几乎不可能在一开始就精确地将对象放置在正确的位置和大小。你会发现自己经常需要移动对象,因此,学会如何快速且精确地完成这项操作非常重要。

使用选择工具移动选区非常简单——只需用鼠标拖动任何已选中的对象。如果选中了多个对象,拖动其中任何一个都能一起移动它们。

一个非常常见的操作是复制对象,即创建选区的精确副本。按下 Ctrl-D 即可;一个副本会被创建,并精确地放置在原始选区上(因此,原始选区看起来并没有发生变化)。只需用选择工具将副本拖动到你想放置的位置。你也可以使用传统的复制粘贴方法来复制对象(Ctrl-C,Ctrl-V)。

其他类型的变换稍微复杂一些。每当你选中某个对象时,选区周围会出现八个箭头标记(图 2-15)。拖动这些箭头标记会进行缩放操作。这就是你如何让选区变大或变小、更高或更宽,等等。四个角落的箭头可以任意方向移动,自由调整选中对象的大小;四个中心的箭头只能在一个方向上缩放(上下中心标记垂直移动;左右中心标记水平移动)。

图 2-15:缩放对象

对于剩下的两种变换模式,旋转倾斜,点击已选中的对象的任何地方(或者按下 Shift-S)。箭头标记发生变化——现在你的选择处于旋转模式,而不是之前使用的缩放模式(图 2-16)。

图 2-16:旋转和倾斜对象

现在,拖动四个角上的箭头会围绕其中心旋转选择区域,而四个中心箭头则会扭曲选择区域。此外,在旋转模式下,你仍然可以通过拖动来移动选择区域。要返回缩放模式,点击选择区域或再次按 Shift-S。下次你选择这些或其他对象时,它们会首先进入缩放模式。

如果你更喜欢通过键盘控制 Inkscape,你可能不会惊讶地发现,四个箭头键分别可以将选择区域在相应的方向上移动。更不明显的是,左右尖括号(<和>)分别缩小和放大选择区域,而方括号([和])则分别让选择区域逆时针和顺时针旋转。没有快捷键可以扭曲对象。

这应该能让你开始使用选择工具进行对象的基本变换。再次强调,接下来我们还会讨论更多的技巧、快捷键和经验法则,但现在,这应该能给你提供一个关于 Inkscape 工作原理的大致感觉。

2.8 样式设置

在 Inkscape 中,任何对象都有样式。样式是一个复杂的概念,包含许多独立的属性,从填充颜色到描边宽度,再到完全改变对象外观的复杂 SVG 滤镜。这里介绍一些最简单、最常见的更改对象样式的技巧。

首先,你现在应该已经猜到,像所有 Inkscape 中的其他操作一样,改变样式的操作也适用于当前选择的对象。也就是说,在你改变某个对象的样式之前,必须先选择这个对象。

一旦你选择了想要设置样式的对象,最简单的做法就是点击画布底部的颜色调色板。你点击的颜色将成为所有选定对象的新的填充颜色(图 2-17)。即使一个对象根本没有填充(比如用铅笔工具创建的路径),它也会被填充上这种颜色。(注意,你可以滚动调色板到右侧,查看更多屏幕上无法显示的颜色。)

图 2-17:从颜色调色板设置填充或描边

你也可以像改变填充颜色一样,轻松改变选定对象的描边颜色——只需按住 Shift 键点击颜色即可。同样,如果某些对象之前没有描边,它们现在也会有描边。

接下来,看看 Inkscape 窗口左下角的复杂控件,位于状态栏的左端。这个控件(如图 2-18 所示)称为选定样式指示器;顾名思义,它指示选择对象的样式(或者说,它指示最重要的样式属性,实际上一个对象的样式比这个指示器显示的要复杂得多)。你可以通过它查看选定对象的填充和描边颜色。

图 2-18:选定的样式指示器

此指示器还允许你更改其显示的样式属性。一项非常常见的操作是移除选定对象的填充或描边。只需中键单击填充(顶部)或描边(底部)样本即可完成此操作,或者右键单击相应的样本并从弹出菜单中选择移除。请注意,没有填充和描边的对象是完全不可见的——你无法看到它,也无法点击它进行选择(尽管你可以围绕它拖动选框来选择它)。

除了填充和描边颜色外,一个重要的样式属性是不透明度。想象一下彩绘玻璃,它有自己的颜色,但仍然能够透过其后面的物体;这就是在 Inkscape 中不透明度小于 100% 的对象的行为。(显然,不透明度为 0% 会使对象不可见。)要改变不透明度,使用所选样式指示器中的O: 控制。试着选择一个位于其他对象上方的对象并输入一个不同的不透明度值;注意对象如何变得半透明(图 2-19)。

图 2-19:改变不透明度

如果你只是想让两个对象具有相同的样式,那么很容易实现。选择第一个对象并按 Ctrl-C;这会将该对象复制到剪贴板上。然后选择另一个对象(或多个对象),按 Shift-Ctrl-V 将剪贴板对象的样式粘贴到它们上。 这是使多个对象看起来相同的最简单方法。

2.9 保存与导出

假设你在 Inkscape 中创建了一些内容,并希望与他人分享。最佳的做法是什么?

保存文档为 SVG 格式的操作按预期工作。只需按 Ctrl-S 或从菜单中选择文件 ▶ 保存,导航到文件夹,输入文件名,然后点击保存

就共享而言,SVG 格式完全不是一个坏选择;例如,如前所述,你可以在任何现代浏览器中查看其矢量效果。然而,出于各种原因,SVG 在某些情况下可能不是一个可行的选择。在这种情况下,你需要将文档导出为其他格式。再次打开保存对话框。注意下拉列表中显示的Inkscape SVG (.svg)*;看看还有哪些可用格式。实际上,很多!列出了超过 20 种不同的矢量格式。

不过,别太激动。几个格式其实只是 Inkscape SVG 格式的变体(比如普通 SVG 或压缩 SVG)。其他格式在某些方面受限,要么是因为目标格式本身相较于 SVG 有限制,要么是因为 Inkscape 为该格式的导出器尚未完全开发,或者两者都有。这些导出格式是可用的,但只有在你了解其限制并在设计文档时考虑到这些限制的情况下才能使用。

除了 SVG 格式外,也许最安全的导出格式是 PDF(附录 B)。它仍然无法完全保留某些 SVG 特性(例如默认会被栅格化的滤镜),但对于大多数 Inkscape 文档来说,它应该是完全足够的。PDF 格式的最大优势,除了它是矢量格式外,还在于它比仅限于标准 Adobe Acrobat 的软件支持范围要广得多。

如你所见,保存对话框仅列出了用于导出的矢量格式。那么,如何导出为栅格格式呢?这是通过一个名为导出 PNG 图像的不同对话框来完成的(18.6.1)。顾名思义,Inkscape 只能导出 PNG 格式的栅格图像。不过,在大多数情况下,这不是问题;PNG 是一种普遍支持的格式(可以在所有浏览器中查看),支持完整的 RGB 色彩和渐变(透明度)效果,是一种非常适合呈现任何矢量艺术作品的多用途格式。如果你真的需要 JPG、GIF 或 TIFF 格式,可以使用许多专门的工具将你的 PNG 图像转换为其他格式。

通过按 Shift-Ctrl-E 或选择文件 ▶ 导出 PNG 图像 (图 18-22) 打开对话框。在对话框顶部,有四个按钮用于选择导出的内容。如果你绘制的图像遵循了页面框架的布局,并且该框架很好地围绕了你的艺术作品,那么选择页面。否则,选择绘图,让导出区域覆盖绘图中的所有对象,无论它们的位置如何。你还可以仅导出当前选择的部分,或者指定一个自定义的导出区域。

然后,设置所需的栅格图像像素大小或分辨率(这两个值显然是相关的:增加一个会增加另一个,反之亦然)。最后,输入导出文件名(或使用另存为选择位置和文件名),然后点击导出。(导出后,对话框保持打开状态,方便你反复使用;这种工作流程在 18.6.1 中有详细讨论。)

完成了!拿着你保存或导出的文件,发出去吧。

2.10 最后的示例

让我们将目前所学的内容应用到一个稍微复杂一点的插图上:一个傻乎乎的、南方公园风格的男孩脸。 当然,这并不算什么挑战,但它应该对消化你所学的新知识有所帮助。

首先,运行一个新的 Inkscape 实例,或者如果你已经在运行 Inkscape,可以按 Ctrl-N 创建一个新的空白文档。

选择椭圆工具并绘制一个椭圆(图 2-20)。那将是男孩的头部。滚动底部的调色板,选择一个合适的身体颜色,点击它来为椭圆赋予颜色。(你可以尝试几种颜色,直到找到最佳的。)如果椭圆上有边框,右键点击状态栏左下角的描边色板来移除它。

图 2-20:一个椭圆

在头部椭圆的顶部画一个较小的椭圆。发生了什么——它是不是看不见了?!不是的。椭圆(像大多数其他工具一样)会记住你为头部指定的颜色,并将相同的颜色用于新椭圆,因此它看起来像是与较大的头部椭圆合并在背景中了(尽管你仍然能看到它的选择框和控制点)。将调色板滚动回左侧,点击白色色板,你就可以看到较小的椭圆了(图 2-21)。

图 2-21:两个椭圆

这个较小的椭圆应该是男孩眼睛的白色部分。它可能不是你想要的眼睛大小,并且位置也有点怪。切换到选择工具,将小椭圆拖到大致想要的位置。然后拖动角落的箭头标记,使其大小接近合适的大小(图 2-22)。

图 2-22:定位第二个椭圆

现在你需要为眼睛的瞳孔再画一个椭圆。不过,我们这次不回去使用椭圆工具,而是采用复制的方式。在仍然选中的白色椭圆上,按 Ctrl-D。虽然没有明显的变化,但你现在有了两个椭圆,新的椭圆已被选中。点击黑色色板,然后拖动箭头标记使瞳孔变小,并将其放到合适的位置,如图 2-23 所示。

图 2-23:头部和一个眼睛

眼睛已经完成——但你需要两个相同的眼睛(图 2-24)。让我们复制刚才创建的整个眼睛。眼睛由两个独立的对象组成,因此在复制之前你需要选中它们。为此,我们可以通过拖动一个橡皮带围绕眼睛(确保从空白处开始拖动,而不是从头部椭圆开始;否则头部也会被拖动,这不是你想要的!),或者直接点击瞳孔,然后按住 Shift 键点击白色部分。按 Ctrl-D 然后将第二只眼睛向旁边拖动(当其中一个对象被拖动时,两个对象都会移动)。

图 2-24:头部和两个眼睛

现在,为了完成绘图,选择书法笔工具,画出鼻子、嘴巴、耳朵和一些头发(图 2-25)。如果路径出现了错误的颜色,点击调色板上的黑色;之后,所有新的书法路径也会变为黑色。如果画笔太宽或太细,可以在画布上方的工具控制条中调整宽度值。如果出错了,按 Ctrl-Z 撤销。

图 2-25:欢迎来到这个世界!

图片已经准备好,但我们还没有完成它所提供的所有可能性。到目前为止,你所做的与在栅格编辑器中完成的工作一样简单。但我们是在使用矢量—所以让我们利用矢量的特定优势来玩转结果。使用选择器,选择两个眼睛的白眼部分,并缩放它们的大小。或者移动瞳孔的位置。又或者缩放、旋转和移动嘴巴。这些操作可以创造出多种面部表情。现在,让我们选择、复制并拖动整个图形,展示几个并排的例子,如图 2-26 所示。

图 2-26: 生活及其多面性

保存或导出结果。就这样!

第三章:设置和移动

在前几章的介绍之后,本章将正式让你开始认真使用 Inkscape。从这里开始,我将深入探讨实际的主题,细致入微,不留任何遗漏。我无法知道你会发现哪些功能或技巧最有用——这取决于你的工作性质和个人喜好。因此,本书尝试涵盖 Inkscape 所有的功能。

在这一简短的章节中,我们还不会创建或编辑任何对象。相反,我们将准备工作区,讨论一些有用的自定义设置,并学习通过缩放和平移浏览文档的技巧。

3.1 首选项

Inkscape 是一款极其可配置的软件。在本书中,我将提到各种你可以更改的 Inkscape 首选项,以调整程序的功能,并更好地适应你偏好的工作方式。在开始使用 Inkscape 进行任何重要操作之前,让我们先来看看所有这些不同的首选项是如何设置和存储的。

所有 Inkscape 用户首选项都属于两个主要类别之一。

3.1.1 Inkscape 首选项

Inkscape 首选项(通常称为 全局首选项 或简称 首选项)控制程序中不依赖于你正在编辑的特定文档的那些方面。这些包括各种工具和快捷键的默认行为、各种对象类型的处理细节、显示和颜色管理选项等。

大多数选项可以在首选项对话框中编辑(按 Shift-Ctrl-P 或选择 编辑 ▶ 首选项)。然而,有些首选项是通过命令或快捷键设置的;例如,当你按 Ctrl-B 隐藏或显示滚动条时(或从“视图 ▶ 显示/隐藏”子菜单选择相应命令),该设置也会作为全局首选项记住。

在本书中,我将在相关内容中讨论具体的全局选项,并引用首选项对话框相应页面。页面树位于对话框的左侧面板;其上方有一个搜索框,你可以在其中输入关键词以搜索对话框的全部内容。对话框中的每个选项都有描述;如果你需要帮助,只需将鼠标悬停在选项上,查看浮动工具提示(图 3-1)。

图 3-1:首选项对话框中“滚动”页面的浮动工具提示解释了其中一个选项。

请注意,首选项对话框没有“保存”或“应用”按钮。大多数更改会立即生效。少数更改需要重新启动 Inkscape,相关说明会在选项的描述中提到。所有全局首选项在退出程序时会自动保存。

存储全局首选项的文件称为 preferences.xml;你可以在首选项对话框的系统页面中查看(并更改)其位置。

一些很少使用的选项没有图形界面;设置它们的唯一方法是手动编辑 preferences.xml 文件。这是一个简单且基本自解释的 XML 文件格式。你可能需要更改一个具有特定 ID 的元素的特定命名属性,例如 printing。然后,你可以在文本编辑器中打开该文件,搜索字符串 id="printing",并编辑该元素中特定属性的值,例如,将 attribute="old" 替换为 attribute="new"(注意,属性值总是用引号括起来)。

3.1.2 文档属性

文档属性,与全局偏好设置不同,适用于单个文档。此类别包括画布的大小和方向、默认测量单位、各种对齐选项、对齐网格和辅助线的状态等。这些选项大多数在文档属性对话框中设置(见 图 3-2)。

图 3-2:文档属性对话框的页面标签

文档属性会自动作为所设置的 Inkscape SVG 文档的一部分保存。例如,如果你在某个文档中更改了对齐模式,Inkscape 会记住下次加载该文档时的设置,但其他文档不会受到影响。要更改新创建文档的文档属性,可以编辑用于创建这些文档的文档模板,正如你将在下一节中看到的那样。

3.2 文档模板

当你运行 Inkscape 时,它会自动为你创建一个新文档。Inkscape 的窗口不能在没有加载文档的情况下存在,因此如果你没有提供现有文档加载,它将为你创建一个新文档。

每当你需要从正在编辑其他文档的窗口中创建一个空白文档时,只需按 Ctrl-N 或使用 文件 ▶ 新建。这将基于 默认模板 创建一个文档。然而,Inkscape 还有许多其他模板,你可以通过进入文件 ▶ 从模板创建来使用它们。只需从左侧的模板列表中选择一个模板,必要时设置其参数(如大小),然后点击 从模板创建(见 图 3-3)。

图 3-3:从模板创建对话框

Inkscape 随附了标准纸张大小、标准图标和网页横幅尺寸、桌面尺寸(用于壁纸)、CD/DVD 封面、名片等模板集合。模板不必为空——它可以包含任何可能有用的对象或文档设置。例如,看看无缝图案模板,其中包含详细的说明(左上方)和一个测试平铺区域(右侧),用于中间的无缝图案方块,如 图 3-4 所示。

图 3-4:无缝图案文档模板。在中间创建你的图案(替换示例内容),并观察它在右侧进行平铺。

在最简单的情况下(没有参数的模板),模板只是一个普通的 Inkscape SVG 文档;当创建新文档时,Inkscape 只需复制一个这样的模板。你可以将自己的模板添加到列表中;任何比默认空白画布更适合起步的文档都可以转化为模板。为此,只需将文档复制或保存到用户模板文件夹,你可以通过点击“打开”按钮并进入“首选项”中的“系统”页面来打开该文件夹。你甚至可以覆盖标准模板,只要你为自定义模板使用相同的名称;特别地,如果你将模板保存为 default.svg,它将被用于你运行 Inkscape 或按下 Ctrl-N 时创建的所有新文档。

3.3 输入设备设置

你不能真正使用像 Inkscape 这样的图形编辑器而不使用某种指点设备。可能无法使用的是任何用手指进行指点的设备,如触摸屏或笔记本触摸板——人类的手指对于精确的图形工作来说太钝了。普通的计算机鼠标完全可以使用,大多数人都用鼠标完成各种 Inkscape 工作。

然而,如果你打算使用 Inkscape 进行艺术绘图(第十四章),你可能想要购买一个压感图形板,比如 Wacom、HUION 或 XP-Pen 生产的设备。使用它,你可以更自然地进行指点和绘图,同时还能创建依赖于压力的变宽笔画——就像常规钢笔或铅笔的线条深浅取决于你施加的压力一样。

Inkscape 有一个对压感设备进行设置的对话框(编辑 ▶ 输入设备)。本书的第一版建议,为了使压感功能正常工作,应该将该对话框中的每个可用设备切换到“屏幕模式”。然而,在现代的 Inkscape 中,我发现我完全不需要在这个对话框中更改任何设置:压感平板设备直接就能工作。

3.4 键盘设置

Inkscape 在键盘快捷键方面非常丰富。其所有键盘和鼠标快捷键的完整列表包含了近七百个条目。

通常,键盘快捷键不需要任何设置——它们直接可以使用。然而,有时你可能想要更改一些快捷键或添加新的快捷键,也许是因为你习惯了其他程序的键盘布局,或者仅仅是因为现有的快捷键没有充分覆盖你的工作习惯。

Inkscape 大多数(但不是全部)键盘快捷键都可以更改。你还可以为菜单中看到的任何命令分配快捷键,包括扩展菜单中的任何扩展(第十九章)。

要查看或编辑 Inkscape 的键盘快捷方式,进入首选项对话框(3.1),界面 ▶ 键盘(图 3-5)。在这里,你可以重新定义任何菜单命令或操作的快捷方式,以及(在修改器选项卡中)最常见的鼠标操作(画布平移、选择、移动和变换)的键盘修饰符。你无法(目前)配置的快捷方式包括那些仅限于单个工具或模式的快捷方式。

图 3-5:查看和编辑 Inkscape 的键盘快捷方式

在进行任何手动调整之前,先查看顶部可用快捷方式文件的列表。Inkscape 提供了所有主要竞争对手(Adobe Illustrator、CorelDRAW、Xara Xtreme、Macromedia Freehand)的键盘布局仿真,以及一些次要矢量编辑器(Zoner Draw、ACD Systems Canvas)的仿真。还有一个标准布局的变种,将最常用的命令放置在键盘的左半部分,这样你就可以避免将右手从鼠标或平板上移开。也许这些仿真布局中的某一个比 Inkscape 的默认布局更适合你,这样你就无需逐个编辑快捷方式了。

替代布局可能不像主布局那样完整或更新。开发者欢迎任何帮助,改进这些替代布局或添加新的布局。

列表中的快捷方式按菜单分组,其中包含相应的命令;你可以使用顶部的搜索框来筛选你感兴趣的命令。要编辑或分配快捷方式给某个命令,请点击中间列;一旦它变为“新加速器...” (加速器是快捷方式的专业术语),只需按下你想要的键盘组合,它就会分配给这个命令。如果出现冲突(快捷方式已分配给其他命令),Inkscape 会警告你。如果搞错了,使用重置按钮。

3.5 页面设置

文档属性对话框的第一个选项卡叫做页面(见图 3-2),其中包含一些你将频繁更改的常规设置,我们现在来看看这些设置。(其他选项卡控制网格、参考线和吸附模式;我将在第七章中描述它们。)

3.5.1 默认单位

文档的默认测量单位——例如 px(SVG 像素;见 A.6)或 mm(毫米)——将影响你在所有显示或可以指定长度或坐标的地方。例如,选择工具的 X、Y、W 和 H 控件会显示以文档默认单位测量的值,尽管你可以通过右侧的单位下拉框来更改它(见图 6-10)。类似地,状态栏提示(例如,当使用钢笔工具绘制路径时,14.1.1)会以默认单位指示距离。

3.5.2 页面大小

标准文档尺寸列表是非常直观的;在相同区域内,你可以指定自定义尺寸和方向(纵向或横向)。Inkscape 的画布几乎没有限制(1.1),所以你可以在其上任何位置进行绘图,无论是在页面内还是页面外;然而,大多数标准的 SVG 查看器只会显示页面上的内容,忽略页面边界之外的任何内容。

因此,如果你打算以 SVG 格式发布或分享你的作品,你可以将页面外的画布用作剪贴板或工作区——但最终将完成的作品放置在页面上。打印或导出为大多数矢量格式时,也会忽略页面外的所有内容。然而,位图导出(18.6)则更加灵活;无论对象位于何处,你都可以导出页面矩形、实际绘图(所有对象)或仅选定的对象。

如果你在绘图时没有太多关注页面边界,但现在希望你的绘图精确地适应页面边界,一个方便的方式是在文档属性对话框中点击调整页面以适应内容...(点击展开该区域)。点击此按钮会让页面边框精确地框住所选对象,或者(如果没有选择)框住整个绘图;你还可以指定四个边距中的任何一个。

在调整页面大小时,你的绘图中的对象会相对于顶部和左侧固定,而右侧和底部则会移动。

然而,在其他情况下,你可能根本不关心页面的大小。例如,你可能在一个 SVG 文件中处理一组图标或徽标,并且不打算分享这个 SVG 文件,而是将每个图标导出为单独的位图文件。在这种情况下,页面的矩形只是一个干扰。文档属性对话框右下角的页面边框控制可以让你更改该矩形的颜色和阴影,或者完全隐藏它。你还可以将边框放置在绘图的顶部,这样它将始终显示在可能遮挡页面边缘的任何对象之上。

3.5.3 背景

你还可以更改文档的背景颜色和背景不透明度(默认是完全透明的白色)。只需点击颜色样本(左下角),并使用弹出的颜色选择菜单,如图 3-6 所示。

图 3-6:选择页面背景颜色和不透明度

改变白色背景的不透明度在屏幕上没有明显效果,但它会影响导出的 PNG 文件——只有当你的 SVG 文档中有透明背景时,它们才会有透明背景。你还可以在文档属性中启用棋盘背景选项,以便更容易管理透明对象。

3.6 实例、文档和视图

你在屏幕上看到的 Inkscape 窗口(如图 2-2 中的窗口)并不等同于 Inkscape 本身。正在运行的程序副本——一个 实例——可能有多个文档打开,每个文档在其自己的编辑窗口中。此外,你可以将相同的文档加载到多个窗口中,以查看同一图形的不同视图。对一个窗口中某个文档所做的任何更改会立即在所有加载该文档的窗口中反映出来(在同一实例内)。

如果你从任何已存在文档的窗口开始,并使用文件 ▶ 打开命令(Ctrl-O),你将打开一个新窗口,显示不同的文档(但仍在同一个实例内)。然而,如果你从一个新建且未更改的文档窗口开始(即仅是一个空白画布),它将被打开的文档替换,而不会打开新窗口。

或者,你可以从命令行启动 Inkscape,并列出所有你希望打开的文档的文件名(C.3):

$ inkscape portrait.svg ../path/to/document.svg another.svg

如果你想在已打开的文档上再打开一个新窗口以查看其他视图,可以使用 视图 ▶ 复制窗口 命令。这样,你将拥有两个窗口,它们展示同一个文档的两个视图,但每个窗口都有独立的缩放级别、活动工具和选择状态。对一个窗口中的文档所做的任何更改会立即在另一个窗口中显示。

要在同一个 Inkscape 实例中的所有窗口之间切换(无论它们是否显示相同或不同的文档),按 Ctrl-Tab(前进)或 Shift-Ctrl-Tab(后退)。

例如,在一个窗口中你可以在较小的细节上进行精细缩放工作,同时在另一个窗口中查看整个文档的缩小版,如图 3-7 所示。

图 3-7:使用多个窗口查看同一文档

3.7 文档窗口

Inkscape 窗口的主要组件(图 2-5)从上到下分别是:菜单、控制栏(当你切换工具时其内容会变化)、左侧的主工具箱和右侧的对话框停靠栏,它们之间是文档画布,底部是调色板和状态栏。默认情况下,画布区域有标尺(上侧和左侧)和滚动条(底部和右侧)。

通过在“视图”菜单的显示/隐藏子菜单中使用命令,你可以隐藏 Inkscape 窗口中的所有部分,除了菜单和画布本身,如图 3-8 所示。

图 3-8:一个最小化的 Inkscape 窗口

只保留你需要的部分;隐藏得越多,你的绘图空间就越大。我通常会隐藏命令栏、标尺和滚动条。大多数时候,我还会隐藏调色板,除非我计划使用 Inkscape 进行颜色密集型任务(例如给卡通上色)。所有这些选项都会被记住,并在下次启动 Inkscape 时恢复。

要将 Inkscape 窗口切换到全屏模式,按 F11 或使用视图 ▶ 全屏。在该模式下,界面元素的显示集合可能完全不同。例如,你可以在常规模式下显示工具栏和工具控制,进行所有编辑,但在全屏模式下隐藏它们,以便以最少的干扰查看你的艺术作品。

3.7.1 窗口几何

窗口几何这个词指的是一个非常简单的概念:Inkscape 窗口的大小和它在屏幕上的位置。为了尽可能提供帮助,Inkscape 会记住每个文档窗口的大小和位置,并将这些值保存在文档中。因此,当你下次加载该文档时,窗口将以文档上次保存时的大小和位置打开。

在大多数情况下,这是有帮助的。然而,有时这反而成了一种烦恼——例如,如果你从某个分辨率不同的用户那里获得了 Inkscape SVG 文件,窗口可能会出现在你屏幕上一个奇怪的位置。要禁用此行为,在首选项对话框中选择界面 ▶ 窗口页面,然后更改保存窗口几何选项,如图 3-9 所示。

图 3-9:保存窗口几何选项

第一个选项禁用保存和读取窗口几何。第二个选项使窗口几何成为全局设置,而不是每个文档的设置,因此每当你改变任何 Inkscape 窗口的大小或位置时,这些几何值将应用于所有随后打开的窗口。最后一个选项——每文档窗口几何——是默认选项。

除了窗口几何外,当前的缩放级别和视图区域始终与文档一起保存,因此下次重新加载文档时,你将看到相同的位置和缩放比例。

3.8 对话框

Inkscape 的用户界面包含多个可移动面板,称为对话框,每个面板都有特定的功能。虽然 Inkscape 努力通过工具和快捷键使大多数编辑操作能够直接在画布上进行,但对话框仍然存在,并且使用频率相当高(图 3-10)。

图 3-10:浮动和停靠的对话框

对于每个对话框,通常有一个菜单命令和一个以 Ctrl 和 Shift 开头的快捷键(例如,Shift-Ctrl-F 打开填充和描边对话框)。新打开的对话框会获得键盘焦点,因此你不仅可以使用鼠标与之交互,还可以使用 Tab 键进行导航,使用 Ctrl-Page Up 和 Ctrl-Page Down 切换标签,输入字段值等。

要关闭对话框,请点击右上角的“X”按钮,或者如果对话框处于键盘焦点状态,按 Ctrl-W。若要在不关闭对话框的情况下将键盘焦点移回画布,点击画布或按 Escape 键。如果一个对话框已经打开,选择其命令或再次调用快捷键并不会关闭它,而是将键盘焦点转移到该对话框。

可停靠的对话框可以被停靠——放置到编辑窗口右侧的停靠区,或者可以浮动在一个独立的小窗口中。(不可停靠的对话框,如首选项,始终在独立窗口中。)只需将任何对话框拖动到停靠区或从停靠区拖出;两个或更多对话框甚至可以一起停靠到一个浮动停靠区中。关闭时,每个对话框会记住其状态(停靠或浮动)和位置,下一次打开时会恢复。

在图 3-10 中,一个浮动窗口包含两个对话框,另一个包含一个对话框,而编辑窗口中的主停靠区包含三个对话框。

如果你不喜欢停靠面板,可以进入首选项窗口页面,将对话框行为选项从可停靠更改为浮动。这将禁用停靠面板,并使所有对话框以浮动状态打开。

3.9 主题与图标

并非每个人都喜欢 Inkscape 的默认外观——这并不令人惊讶,因为它的用户通常对美学非常敏感,并且在程序中花费大量时间。幸运的是,Inkscape 在这方面相当灵活。

在首选项的界面▶主题页面上,你可以选择几个预安装的主题,这些主题会影响 Inkscape UI 中所有元素的外观。也许最实用的主题是 HighContrast(提高标签对比度,增强可读性)和 HighContrastInverse(相同但为白底黑字而非黑底白字)主题(图 3-11)。

图 3-11:Inkscape 使用 HighContrastInverse 主题并带有多色图标

在同一页面上,你可以选择替代的图标集,并且控制各种工具栏中的图标大小。不幸的是,无法以同样的方式更改 UI 标签的字体大小。你可以向程序中添加新的主题和图标集;可以上网查看是否有你想尝试的。

3.10 基本缩放

缩放(放大或缩小)会暂时放大或缩小你的绘图视图,以便你检查细节(放大时)或查看整体(缩小时)。缩放不会改变绘图本身,只会改变你对它的视图。

向量图形的(几乎)无限可伸缩性使得缩放成为向量工作中最常见的操作之一。Inkscape 提供了多种不同的缩放方式,这并不令人惊讶。

首先,当前的缩放级别始终显示在状态栏右端的 Z:可编辑字段中(画布下方),如图 3-12 所示。你可以随时点击它,输入所需的缩放级别,然后按 Enter 键。

图 3-12:状态栏中的缩放指示器

使用键盘缩放的最简单方法是分别按加号键和减号键(+ 和 -)。小键盘上的键(在大多数台式计算机的键盘最右端)与主键盘上的键(在字母键上方)一样有效。更重要的是,等号(=),通常位于与加号键相同的物理键上,也可以用于放大,而下划线(_),通常位于与减号键相同的键上,可以用于缩小;换句话说,你永远不需要按 Shift 键来访问缩放键。

使用加号和减号键的缩放方法适用于所有工具和模式,除了在编辑文本时。在文本中,主键盘上的加号和减号键会插入相应的字符,但小键盘上的加号和减号键仍然可以用于缩放。

通常你的手已经放在鼠标或平板笔上,因此伸手去按键盘会不太方便。通过鼠标缩放的最简单方法是使用中键(在大多数鼠标上,这其实不是一个按钮,而是一个可以点击和滚动的滚轮)。你点击的位置在缩放后会保持相对位置,因此通过点击某个小物体,你可以直接放大到该物体——这与加号/减号键的不同之处在于,加号/减号键会以可见区域的中心进行缩放。要缩小,请在按住 Shift 键的同时中键点击。

此外,使用滚轮鼠标时,你可以通过向上滚动来放大,向下滚动来缩小。默认情况下,你需要按住 Ctrl 键来进行缩放,因为没有修饰键的滚轮会滚动文档,就像大多数其他程序一样。然而,实际上有一个选项可以让你在不使用修饰键的情况下直接进行缩放,而需要按住 Ctrl 键时才能滚动;你可以在首选项对话框的滚动页面中设置这一选项。

你可以调整加号/减号键、中键点击和单次滚轮点击所执行的缩放量。这个值可以在首选项对话框的行为 ▶ 步骤页面中设置。默认值是 141%,也就是 100 乘以根号 2,这样两次连续的放大操作会把你放大 200%。

3.11 缩放工具

在缩放工具(工具栏左侧的放大镜图标)中提供了更多的缩放方法。在我的工作中,我实际上从不切换到这个工具,因为它的所有命令和模式都可以通过各种快捷键在任何工具中使用。尽管如此,我们还是来看看缩放工具,以了解 Inkscape 的缩放功能。

正如你所预期的,简单的鼠标点击在 Zoom 工具中是放大,而按住 Shift 键点击则是缩小。然而,有时你已经知道想要放大的区域,并且不想经过所有的中间缩放级别来达到目标缩放。在这种情况下,只需使用该工具拖动,围绕该区域创建一个矩形的橡皮筋——当你释放鼠标时,Inkscape 会直接放大到该区域,正如图 3-13 所示。

图 3-13:使用缩放工具缩放到某个区域

你也可以在不切换到缩放工具的情况下使用缩放到某个区域的小技巧。在任何工具或模式下,按住 Shift 拖动中键鼠标,开始一个相同的缩放区域橡皮筋,松开鼠标按钮后即可缩放到该区域。

让我们来看一下缩放工具的控制栏,如图 3-14 所示。

图 3-14:缩放工具控制栏上的命令按钮

前两个按钮的功能与加号/减号键相同。接下来是三个预设的缩放按钮:100%(也可以通过 1 键),200%(2 键),和 50%。然后是非常实用的“缩放以适应选择”按钮(也可以通过 3 键);它会缩放并滚动视图,使当前选择完全适应窗口。接下来的三个按钮分别用于整个绘图(4 键)、页面(5 键)和页面宽度(6 键)。你还可以通过按住 Q 键暂时缩放到选择区域;松开 Q 键将返回到上一个缩放(如果没有选择区域,Q 键则会暂时缩放到页面)。

也许最有趣的是缩放控制栏上的最后两个按钮。如上所述,缩放不会改变文档——因此你不能使用撤销命令来撤销它。然而,还有另一种“撤销缩放”的方法。

每次改变缩放级别时,Inkscape 会记住之前的缩放级别以及你所查看的画布区域。缩放控制栏上的“上一个缩放”和“下一个缩放”按钮允许你在缩放历史中前后跳转。例如,如果你在查看整个图纸后缩放到一个小区域进行编辑,然后又想查看整个图纸,你就不需要反复按减号键了。相反,只需按下反引号键(),你将立即返回到上一个缩放和视图。按住 Shift 键并再次按下键,则会重新缩放回相同的小区域。缩放历史是无限的——它会保存从编辑会话开始以来的所有缩放记录。

除了缩放工具栏和快捷键外,所有相同的命令也可以在“视图”菜单的缩放子菜单中找到。

3.12 平移

当你在 Inkscape 中平移文档时,你改变的是窗口内可见区域的位置,而不改变缩放级别。它基本上与滚动相同,不同之处在于滚动假设是单一轴(比如上下滚动),而平移可以朝任何方向进行。缩放后,平移是使用矢量编辑器时最常见的操作。

Inkscape 文档窗口有传统的滚动条,可以水平和垂直滚动以到达画布上的任何位置。然而,滚动条比较笨重,所以我通常更喜欢其他平移方法,并关闭滚动条(Ctrl-B),以腾出更多的画布空间。

你可以使用键盘和鼠标来平移画布。使用键盘时,按住 Ctrl 键并使用箭头键可以在四个方向上滚动画布。比听起来更方便的是,如果按住 Ctrl 键和箭头键,画布移动会加速。这意味着你可以通过按下一个键来微调画布位置,或者如果按住不放,则能迅速地将画布移开。键盘滚动的速度(每次按键的距离)以及加速度系数可以在首选项对话框的行为 ▶ 滚动页面中设置。

使用鼠标,最简单的平移画布方法是按住中键拖动画布。再次提醒,这在任何工具或模式下都适用。Inkscape 没有专门的“手”工具来平移画布。你也可以用鼠标滚轮垂直滚动,按住 Shift 键再滚动滚轮可以水平滚动。

Inkscape 尽可能使平移自动化。例如,当你使用选择工具拖动选中的对象并将其推到屏幕边缘时,画布会自动滚动以腾出空间。此外,当你使用 Tab 键选择新的对象或路径节点时,Inkscape 会滚动画布以使该对象或节点可见。

3.13 画布方向

如果你曾经看过专业艺术家(画家、漫画家、插画家)工作时,你可能注意到他们如何自由地操作他们的媒体。他们不断倾斜、旋转,甚至翻转他们的作品,以便更好地查看作品以及进行更自然的笔触。你也可以在 Inkscape 中轻松做到这一点。

只需按住 Ctrl-Shift 并使用鼠标滚轮,就可以围绕光标点旋转画布,每次旋转 15 度(要更改此值,请前往首选项中的行为 ▶ 步长)。为了更精确的控制,可以使用状态栏右端的R: 数值控件,如图 3-15 所示。

图 3-15:状态栏中的旋转指示器

在视图 ▶ 画布方向中,你还可以水平或垂直翻转(镜像)画布;要去除任何旋转(但不包括翻转)并返回默认视图,请使用同一子菜单中的重置旋转。旋转不会影响文档的 SVG 代码,也不会被保存;它仅仅是为了工作空间的方便。

3.14 渲染模式

默认情况下,Inkscape 力求将每个文档渲染得尽可能符合 SVG 标准。然而,有时候你需要编辑文档,而不仅仅是查看它,这时完全渲染可能会成为一种障碍。这时,你可以切换到 轮廓 视图模式(通过菜单选择视图 ▶ 显示模式 ▶ 轮廓)。在轮廓模式下,没有填充、透明、颜色、渐变、模糊或任何其他滤镜。所有对象都以细线轮廓显示,宽度(1 屏幕像素)不受缩放影响,如图 3-16 所示。

图 3-16:正常视图模式(左)和大纲视图模式(右)中的一些对象

切换到大纲模式的明显原因是为了加速复杂渲染文档的工作。并且在大纲模式下,更容易找到并访问不可见的对象(那些完全透明或隐藏在其他对象下的对象)。在这种模式下,一切都可以看见,你可以通过点击其大纲来选择任何对象。

大纲模式中不同颜色的大纲用于区分对象类型。常规路径和形状使用黑色大纲,位图对象(第十八章)显示为红色大纲矩形,带有两条对角线,裁剪路径(18.3 节)是绿色的,遮罩(18.3 节)是蓝色的。文本对象是唯一没有大纲的对象,它们显示为黑色填充。你也可以强制位图图像即使在大纲模式下也能渲染;相应的选项在首选项对话框的导入图像页面中。

大纲模式非常有用,以至于 Inkscape 提供了两种额外的使用方式。你可以通过选择菜单中的查看 ▶ 拆分模式 ▶ X 射线模式或按 Alt-6 来启用X 射线模式,而无需将整个文档切换为大纲模式。在此模式下,只有鼠标光标周围的圆形区域会以大纲方式呈现,其余部分则按常规显示(图 3-17)。这样,你可以逐步检查复杂图形的结构,而不会失去完成作品的上下文。或者,你可以启用拆分视图模式(查看 ▶ 拆分模式 ▶ 拆分或 Ctrl-6),在这种模式下,绘图被分为左右两部分,带有可拖动的垂直分隔符,左侧显示正常渲染,右侧显示大纲。

图 3-17:X 射线模式:查看复杂插图内部

大纲覆盖显示模式(查看 ▶ 显示模式 ▶ 大纲覆盖)与大纲模式相同,但它在背景中增加了一个淡化的不可点击渲染文档。你仍然可以使用大纲来选择对象,但此模式可以更好地展示这些大纲在正常视图中的对应关系。

另一种加速渲染的方法是通过查看 ▶ 显示模式 ▶ 无滤镜模式访问的无滤镜模式。大多数绘图中渲染最慢的元素是滤镜,例如模糊效果(第十七章)。禁用它们后,这种模式可能会显著加速渲染,而不会使绘图变得不可辨认。另一种渲染模式是可见线条模式(查看 ▶ 显示模式 ▶ 可见线条),它与正常渲染的唯一区别是,它永远不会让描边(2.8 节)变得不可见,即使你缩放得再远,这在技术图纸中可能会很有用。

使用 Ctrl-5 在所有渲染模式(正常模式、无滤镜、大纲、可见线条、大纲覆盖)之间循环切换。

3.14.1 颜色渲染

万一你需要,Inkscape 提供了一种将文档渲染为灰度的方式;你可以从菜单中选择视图 ▶ 色彩显示模式,或者按 Alt-5 来切换。

此外,Inkscape 可以在屏幕上模拟某些输出设备的颜色,通常是打印机。这被称为颜色管理视图(来自视图菜单)。此模式的详细设置可以在“首选项”对话框的输入/输出 ▶ 色彩管理页面(校对部分)中进行配置。基本上,你需要的是你想要模拟的设备的ICC 配置文件,然后你可以指示 Inkscape 使用该配置文件;详情请参见 18.8。

第四章:对象

对象是 Inkscape 图形的核心内容。本书的大部分内容都将专门讲解各种类型的对象、它们的属性,以及操作它们的技巧。然而,不论类型如何,所有 Inkscape 对象有很多共同点。

本章和接下来的两章将详细讲解对象的基本概念和通用的对象操作。

4.1 对象属性

对象只是画布上的某个东西——你绘图的一部分。当然,它并不总是那么简单;看似一个独立的对象可能是其他对象的一部分,或者是多个对象的组合。识别单独的对象需要经验和努力。

Inkscape 有多个对话框用于操作对象的属性,但只有一个足够通用,可以称之为“对象属性”(可以通过按 Shift-Ctrl-O、右键点击对象菜单,或通过对象菜单访问)。选择单个对象(见第五章)来查看其属性,如图 4-1 所示。

图 4-1:对象属性对话框

对象的标识符(ID 字段)是文档 SVG 源文件中对应元素的 id 属性(见附录 A)。它的值在文档中始终是唯一的;Inkscape 会自动为所有对象提供唯一的 ID,但你可以在确保唯一性的前提下更改该值。

为对象分配有意义的名称是组织复杂图形的一个有效方法。然而,ID 并不是最好的方式;根据 XML 规则,元素 ID 中只能使用非常有限的字符集——不能包含空格,只能使用拉丁字母、数字、连字符、下划线和点。对于更适合人类使用的替代方法,可以使用对象的标签(它对应于 SVG 中的 inkscape:label 扩展属性)。标签的长度可以任意,字符可以随意使用,并且不需要唯一。

隐藏和锁定复选框控制选定对象的锁定和隐藏状态。一个锁定的对象是可见的,但大多数选择方法无法选中它,因此无法更改它。一个隐藏的对象既不可见无法选择。

我不推荐隐藏或锁定单个对象。你可能会陷入一种困境,需要选择一个对象来解锁或取消隐藏它——但你无法选择,因为它已被隐藏或锁定。针对这种情况,对象菜单中包含两个命令“全部显示”和“解锁全部”,可以将当前图层中的所有对象显示出来并使其可选择。

操作包含你想隐藏或锁定的对象的图层要方便得多。通过图层隐藏和锁定不仅更快捷(一次影响多个对象),而且更容易——即使图层被锁定或隐藏,你依然可以随时访问任何图层(通过图层对话框,见 4.9.4)来更改其状态。

4.2 坐标和单位

每当一个对象出现在画布上时,你可以在熟悉的矩形坐标系中测量其位置和大小,横轴为 X 轴,纵轴为 Y 轴。

在 Inkscape 中,坐标原点始终位于页面框架的一个角落(2.3)。早期版本的 Inkscape 将坐标原点放置在页面的左下角,Y 值向上增加。然而,SVG 标准将原点放置在左上角,Y 值向下增加(X 值始终向右增加),最近 Inkscape 也将这一设置作为默认选项放在了其 UI 中。你仍然可以在偏好设置的界面页面中切换回旧的(实际上更自然的)左下角原点(3.1);只需记住,这只会影响 UI——当你编辑文档的 SVG 代码时(例如,在 Inkscape 的 XML 编辑器中,4.10),所有坐标都假定原点在左上角。

画布区域边缘的标尺是测量坐标的一种方式(如果它们被隐藏,按 Ctrl-R 显示它们)。当你将鼠标移动到画布上时,标尺上的小三角形标记会显示当前位置。此外,鼠标指针的 X 和 Y 坐标始终显示在状态栏的右端,紧接着放大区域标记 Z(图 4-2)。

图 4-2:Inkscape 的坐标系统

标尺使用的测量单位与在文档属性对话框中设置的文档单位相同(3.5)。要检查,悬停鼠标光标在标尺上,直到浮动工具提示出现。

4.3 边界框

让我们创建一个对象——例如,使用椭圆工具绘制一个椭圆。你会看到,初始选中的对象被一个虚线矩形框住(图 4-3)。这个矩形是对象的边界框的可视化表示——它是完全包围该对象的最小矩形。边界框始终是直立的——也就是说,它的边与坐标轴平行;如果你旋转对象,它的边界框可能会或不会改变大小,但它不会与对象一起旋转。(切换到选择工具,通过按方括号键 [ 和 ] 来旋转椭圆。)

图 4-3:对象的边界框始终是直立的。

选中对象的边界框的坐标和尺寸(宽度、高度)会通过选择工具控制条中的四个可编辑字段显示。X 和 Y 显示框的左上角坐标(或者根据坐标原点偏好,可能是左下角,4.2);W 和 H 显示边界框的宽度和高度。如果选择了多个对象,这些值反映的是整个选择的边界框。你可以通过右侧的下拉菜单更改这些字段的度量单位;默认情况下,它设置为文档单位(3.5.1)。

当然,你可以点击这些字段中的任意一个并输入一个新值,这会让选中的对象(X 和 Y)移动,或(对于 W 和 H)缩放。如果你希望宽度的变化导致高度按比例变化,或者反之(保持纵横比),请点击 W 和 H 之间的锁定按钮,将它们锁定在一起。

在 Inkscape 中,对象的边界框可以是可视(这是默认设置)或 几何。要在这两者之间切换,请前往 偏好设置 对话框中的 工具 页面。可视边界框包括对象的所有可见部分——最显著的是其整个描边(9.1),但也包括标记(9.5)和滤镜边距(17.5.4)。几何边界框仅框住对象路径的几何轮廓

几何边界框与对象在大纲模式下的外观紧密对应(3.14);例如,一个带描边的对象的外缘会超出几何边界框。通常,进行技术绘图的用户更倾向使用几何边界框,而其他用户则更喜欢使用可视选项。图 4-3 显示了可视边界框:注意它如何完全包围椭圆的黑色描边。

4.4 Z 顺序

Z 顺序指的是对象在彼此之上绘制的顺序。Z 顺序顶部的对象如果不透明,可能会遮挡下面的对象。术语 z-order 暗示了一个第三坐标轴 Z,想象它是垂直于绘图的 X/Y 平面朝向观众延伸的。Z 顺序中更高的对象因此“更靠近”观众。

你创建的新对象总是被放置在当前图层的 Z 顺序的最顶部(如果你没有创建其他图层,这将是整个文档的 Z 顺序的顶部)。例如,如果你绘制多个椭圆,每个新的椭圆都会画在前一个椭圆的上面,如图 4-4 所示。

图 4-4:Z 顺序

选择、变换或样式更改操作永远不会改变对象的 z 顺序。这意味着你可以移动、缩放或绘制对象,而它仍然保持在自己的“层次”上——前提是你已经选中了该对象。(在 5.9 中,你将学习如何选择那些位于 z 顺序底部且无法直接点击选择的对象。)

然而,通常你需要重新排列图形中的对象堆栈。Inkscape 有四个基本命令用于在 z 顺序中上下移动对象:两个绝对命令和两个相对命令。它们经常使用,因此你可以通过选择器控制条上的按钮、对象菜单,或简单的键盘快捷键来访问它们。

绝对命令如下:

提升到顶部(Home)

将选定的对象提升到对象图层的最顶部。

降到最底部(结束)

将选定的对象降到对象图层的最底部。

相对命令如下:

提升(Page Up)

将选定对象上移一步(经过另一个对象)。

降低(Page Down)

将选定的对象下移一步(经过另一个对象)。

图 4-5 展示了这些命令如何作用于选中的椭圆,该椭圆位于矩形堆栈的中间。

图 4-5:改变 z 顺序

请注意,相对 z 顺序命令仅考虑那些重叠选定区域的对象(更准确地说,是那些其边界框与选定区域的边界框重叠的对象)。如果你的选定对象与其他任何对象没有重叠,"提升"和"降低"命令将会将选定区域直接移至图层的顶部或底部,依情况而定。

另一点需要记住的是,所有 z 顺序命令仅在图层内起作用。如果文档中有多个图层,这些图层形成各自的 z 顺序,且较低图层中的对象永远不可能位于较高图层中的对象上方。若要重新排列图层的 z 顺序,请使用 4.9.2 中描述的图层命令。

可能会同时选中不同图层或组中的对象。在这种情况下,z 顺序命令仅作用于每个选定对象所在的其所在的图层或组。例如,"提升到顶部"命令可能会改变一个选定对象的 z 顺序,但如果该对象本身已经是该图层中的最上层对象,其他对象将不会受到影响。

如果你需要更改大量对象的 z 顺序,可以尝试扩展菜单中的扩展 ▶ 排列 ▶ 重堆叠扩展。它可以根据选定对象的位置或当前 z 顺序,重新排列任何数量的选定对象,如图 4-6 所示。

图 4-6:使用重堆叠扩展管理 z 顺序

例如,你可以将对象排序成一个 z 顺序阶梯,从左到右排列——这样,任何两个选定对象中,位于右侧的那个对象会在 z 顺序中排得更高(见图 4-7)。

图 4-7:堆叠操作;原始的磁盘散布(左)是使用喷洒工具(4.7)制作的。

扩展命令的对话框让你选择阶梯的方向(四个主要方向,从选区中心的放射状内外,甚至是自定义角度),还可以指定参考点——每个选中对象的哪个点将用于比较位置(可以是任何角落、边中点或中心)。最后,你还可以反转选中对象的当前 z 顺序或随机化它。

4.5 复制、剪切、粘贴

Inkscape 支持传统的 剪贴板操作:复制、剪切和粘贴。

复制(Ctrl-C)将所选对象或对象的副本保存在程序的剪贴板中;剪切(Ctrl-X)与复制相同,但对象会被删除。最后,粘贴(Ctrl-V)将剪贴板的内容放回文档中(但仍保留在剪贴板中,因此可以多次粘贴相同的对象)。

粘贴命令有两种变体。常规的粘贴(Ctrl-V)将对象放置在当前鼠标光标所在的画布位置。这对于将对象移动到文档的完全不同位置非常方便;只需从原位置剪切,滚动和/或缩放到目标位置,将鼠标悬停在所需位置,然后按 Ctrl-V。你甚至可以通过移动鼠标并反复按 Ctrl-V 来“涂抹”对象的副本。

然而,有时你想将对象粘贴到与复制位置完全相同的地方。这就是粘贴到当前位置(Ctrl-Alt-V)命令的作用。例如,你可以用它将一个对象从一个图层移动到另一个图层,而不改变其在画布上的位置:复制它,切换到目标图层,然后粘贴到当前位置。

当没有任何选中对象时,粘贴的对象始终会放置在当前图层的 z 顺序顶部。然而,如果在粘贴时有任何选中的对象,新粘贴的对象将放置在选中对象中的最上方。你可以在首选项 ▶ 行为 ▶ 选择中禁用此行为:粘贴到选中对象上方,而不是图层顶部。

4.6 复制和印章

有时,人们使用复制和粘贴作为获取一个或多个对象副本的方法。在 Inkscape 中,你不需要这种变通方法;有一个方便的复制命令(Ctrl-D),它会创建所选对象的副本,并将其放置在画布的相同位置。这相当于先复制然后粘贴到当前位置,唯一不同的是复制不会改变剪贴板的内容。

所有粘贴和复制命令,和任何其他创建新对象的方法一样,都将新对象放置在当前图层的 z 顺序顶部。

创建对象副本的另一种方法是戳印。每当你在选择工具中通过拖动鼠标来变换选择(移动、缩放、旋转或倾斜)(见 2.7),你可以按空格键在不打断交互式变换的情况下留下选择的副本。例如,如果你抓住并拖动一个椭圆,接着按住空格键并继续拖动,正在移动的对象会在画布上留下副本的轨迹。戳印在节点工具中也有效,当你拖动一个节点选择时(12.5.7)。

目前为止讨论的所有对象复制方法都会创建与原始对象没有任何联系的新独立对象。如果你想要一个链接副本,它继承原始对象的一些属性,并自动更新,请阅读第十六章中的克隆内容。

4.7 喷涂工具 [1.1]

如果说复制/粘贴、重复、戳印还不够,Inkscape 还有一个专门的工具用于向画布中填充对象:喷涂工具(图 4-8)。

图 4-8:喷涂工具会用对象为空你的绘图喷涂。

它的基本操作很简单:选择一个或多个现有对象,然后在画布上拖动来喷涂它们的副本。这颠覆了传统的矢量编辑范式,后者通常让你处理单个对象;喷涂工具,以及通常与之搭配使用的调整工具(6.10),使你可以以大规模对象的方式进行思考——比如粒子云、树林、星系、鱼群。

喷涂工具的一些控制与书法笔(14.2)类似。首先,设置你将要绘制的圆形区域的宽度,使用相对的与缩放无关的单位;最大宽度为 100,表示大约是屏幕高度的一半的区域。然后,你可以调整拖动时喷出的副本数量(把它当作绘画的速度)。

接下来,你可以改变应用于副本的随机旋转和缩放的程度——从零(相同大小的副本,方向相同)到 100(自由旋转和缩放,大小可达原始对象的两倍)。在绘画区域内,你可以调整散布和聚焦的程度,从零(集中在区域中心)到 100(均匀分布在整个区域)。Inkscape 支持压力感应输入设备,例如 Wacom 平板电脑(3.3),这个工具允许你通过施加压力来调整绘画区域的大小、绘画速度或副本的缩放——或者这些因素的任意组合。

在控制栏的左端,模式切换按钮控制喷涂工具创建的内容:普通副本(默认)、克隆(第十六章)或单一路径的子路径(12.1.1)。在这里,副本是可以独立于原始对象进行更改的对象,而克隆会自动更新以反映原始对象的样式和形状,并且不能单独编辑(除非通过变换)。子路径模式创建一个单一路径对象(12.1),其中重叠的对象会像路径联合操作(12.2)一样合并在一起。第四个模式按钮启用一个喷涂特定的橡皮擦:在此模式下,该工具会选择性地删除其涂画区域内之前喷涂的对象副本或克隆,但不影响其他对象。

4.7.1 通过喷涂进行追踪

在喷涂工具控制栏的右端,有一些小部件用于设置另一种喷涂方式:追踪背景。在追踪时,Inkscape 不再盲目地喷出对象副本,而是查看鼠标指针下的内容。它会采样喷涂区域中现有图形的颜色和透明度,并利用这些值修改喷涂方式。(此功能仅在喷涂副本或克隆时可用,而不适用于子路径。)

通常,虽然并非总是如此,你喷涂的已有对象将是位图——例如,一张照片。通过追踪,你可以以一种引人注目的艺术方式,使用任何类型的对象作为“画笔”重新绘制,或者至少覆盖原图。这类似于我稍后将讨论的其他几个 Inkscape 功能,如书法笔追踪(16.6.6)和“创建平铺克隆”对话框中的“追踪”标签(16.6)。

该区域中的前两个切换按钮,分别是眼睛开启和眼睛关闭按钮,让你控制喷涂位置。按下眼睛开启按钮时,喷涂的对象可以出现在不透明的对象上;按下眼睛关闭按钮时,喷涂的对象可以出现在透明对象、位图的透明区域或空白画布上。默认情况下,这两个按钮都被按下——也就是说,你可以在任何地方进行喷涂。

接下来是两个无重叠按钮。普通的无重叠选项(类似于 7.5.2 中的去群聚功能)确保喷涂的对象之间不接触,从而使结果看起来更加整洁。按下此按钮后,你还可以指定对象之间的距离;也允许使用负值,这意味着你可以控制部分重叠。

另一个不重叠的按钮会关注鼠标指针下的颜色:它只允许在相同背景色的区域内重叠。通过这种方式,你可以将对象堆叠在单色的单元格内,但避免越过单元格边界,如图 4-9 所示。

图 4-9:使用带有颜色追踪和不重叠选项的喷洒工具

最后,如果你按下带有吸管图标的按钮,你将启用拾色器模式,在该模式下,Inkscape 会从鼠标指针的位置获取颜色和透明度。工具栏上的其他按钮会影响拾取的方式以及如何处理拾取到的值。具体来说,你可以将颜色分配给对象的填充色(这就是图 4-9 所示的效果)和/或描边色;你可以反转拾取到的颜色;还可以从鼠标指针的精确位置拾取颜色(而不是从工具的绘画区域中取平均色)。

请记住,你始终可以使用工具的橡皮擦模式修剪或缩小喷洒物,而不需要完全撤销它们。此外,功能强大的 Tweak 工具是喷洒艺术家工具箱中不可或缺的一部分。通过它,你可以轻松地推动、摇摆、抖动、放大或缩小、旋转或复制喷洒对象(6.10),以及通过改变它们的颜色、透明度或模糊度来修饰它们(8.9)。

4.8 组

分组是一种将多个独立对象组合成单个对象的方法。这是一个容易逆转的操作:被组合成组的对象可以取消分组并重新独立出来。此外,Inkscape 的许多工具会忽略分组,直接操作单独的对象,无论它们是否已经分组。选择工具默认会将整个组选中——但即使是在选择工具中,也有方法可以选择组内的单个对象而无需取消分组(5.10)。

要将一些对象分组,只需选择它们并选择对象 ▶ 分组(Ctrl-G)。组本身也可以像任何其他对象一样被分组。你甚至可以将单个对象进行分组——例如,选择一个矩形并按 Ctrl-G。现在你有了一个包含单个矩形的组。这样的组在某些情况下可能非常有用,比如对一个裁剪的对象进行模糊处理(见 18.3)。

当选中单个组时,状态栏会显示该组内包含的成员对象数目——例如,背景层中的 3 个对象的组。

4.8.1 取消分组

要取消分组,选择该组并选择对象 ▶ 取消分组(Ctrl-U 或 Ctrl-Shift-G)。该组将不再存在,但其所有原成员会被释放,并且保持在画布上的位置——对象的坐标和层次顺序都会得到保留。

你可以选择任意数量的组,并一次性取消分组。此外,你还可以选择任意数量的不同对象,其中一些是组,并按 Ctrl-U:组将被取消分组,所有非组对象将保持不变。

Ungroup(取消分组)命令仅移除最顶层的分组。例如,如果你有一个包含两个其他组的组,按下 Ctrl-U 将释放这两个组——它们仍然被选中,但没有被取消分组。你需要再次按 Ctrl-U 才能取消分组。要取消复杂绘图中所有组的分组,只需选择所有对象并不断按 Ctrl-U,直到状态栏显示“选择中没有可以取消分组的组”。

最后,如果你有很多层次的分组,手动取消分组听起来不太有趣,可以尝试扩展 ▶ 排列 ▶ 深度取消分组扩展。它会将你的文档取消分组,直到原子粒子级别——或者,如果你愿意,也可以精确控制取消分组的层数,以及要保留多少层(从底部开始计数)。

4.8.2 分组的用途

有几个好的理由来对对象进行分组:

  • 首先,分组提供了一种简单的选择对象集合的方式。使用选择工具,点击组中的任何对象,整个组都会被选中。从这个角度看,组就像是一个“保存的选择”。选择之后,你可以像对待多个独立选择的对象一样,轻松地移动、缩放或涂色该组。

  • 其次,分组是组织复杂艺术作品的一种自然方式。当你的绘图中有成千上万个对象时,整理哪些属于一起是非常困难的。组织这种复杂文档的一种方式是通过图层,本章稍后会讨论。但通常,图层过于麻烦——例如,如果你只想确保肖像中的鼻子和眼睛不会彼此相对地意外移动,最简单的方法就是将它们分组在一起。

  • 最后,有时分组可以实现一些单独操作无法达到的效果。其中一个效果是组透明度(更多关于透明度的内容,请参见 8.3)。

当你对一个组应用透明度时,它会作为一个整体变得透明,整体效果可能与对单个对象应用相同透明度有所不同,如图 4-10 所示。

图 4-10:组透明度

在左侧,两个独立的对象完全不透明(零透明度)。中间部分,它们作为独立对象变得 50%透明;注意,矩形的角落透过椭圆可见。右侧,原本不透明的对象被分组,然后该组被设置为 50%透明;此时,棋盘背景透过了对象,但矩形的重叠区域仍被椭圆遮挡,看不见。

4.8.3 组与 Z 轴顺序

一个重要的记住的是,作为对象的组在文档的 z 轴顺序中有自己独立的位置,组内所有成员共享该 z 轴位置。

这意味着如果对象 A 在 B 之上,B 在 C 之上,你无法将 A 和 C 分组而不改变 z 轴顺序。如果你试图这么做,C 将跳到 B 之上,A 和 C 的组合将位于 B 对象的顶部。

在这种情况下,取消分组不会恢复原始的 z 轴顺序。如果你取消分组“A 和 C”组,你将得到三个独立的对象,但它们现在的顺序是 A、C、B(从上到下)。 (当然,如果你在分组后立即按 Ctrl-Z 撤销,分组和 z 轴顺序的变化都会被恢复。)

出于同样的原因,你不能将不同图层的对象分组。图层和组都是文档 XML 树的分支,你不能让一个分支(组)从多个父分支(图层)生长。如果你尝试将不同图层或不同组中的对象分组,Inkscape 会发出警告(在状态栏中显示信息),并且不会执行任何操作。

4.9 图层

Inkscape 中的图层正如名称所示:“文档中的层级”或“楼层”,这些层级堆叠在一起,并包含其他对象。每个图层都有一个名称。图层很容易隐藏(使其不可见)、锁定(防止修改)或重新排列。

每个对象属于一个且仅属于一个图层。要找出该对象属于哪个图层,只需选择该对象并查看状态栏。它会显示类似“矩形在图层 Layer 1 中”的信息;这里,Layer 1 是图层的名称。当然,你可以选择来自不同图层的对象,在这种情况下,状态栏会显示,例如,2 个对象在 2 个图层中。

文档中的一个图层始终是当前图层。你创建、粘贴或导入的所有新对象都将添加到当前图层。为了使复杂图形中的图层更易于操作,Inkscape 的当前图层会跟随选择。也就是说,如果你在图层 A 中并选择了图层 B 中的一些对象(例如,点击它),图层 B 就会成为新的当前图层。相反,如果你更改了当前图层,选择的对象会被取消选择。

Inkscape 会在保存文档时记住当前图层,并在以后加载文档时恢复它。一个新的文档模板(见 3.2)通常包含一个名为 Layer 1 的初始图层;当你加载模板时,它是当前图层——因此,如果你没有创建任何新图层,所有的对象都会被放入 Layer 1。

和单个对象一样,图层也可以被锁定或隐藏。在一个锁定的图层中,对象是可见的,但无法选择。在一个隐藏的图层中,对象既不可见也无法选择。你不能将新对象添加到一个已隐藏或已锁定的图层中。

通常,当你想简化复杂的艺术作品以专注于其中某些部分时,可以隐藏图层。隐藏复杂图层可以显著加快屏幕重绘速度,从而使工作更加舒适。锁定图层在你希望某些背景对象可见但不可选择时非常有用——通常是为了便于通过点击或拖动周围的对象来选择前景对象。

4.9.1 图层层级

在更高级的层面上,Inkscape 中的图层与组密切相关。事实上,图层只是 Inkscape 以特殊方式处理的一种组。

就像组可以包含其他组作为成员一样,图层也可以包含进一步的sublayers。这对于组织复杂的艺术作品非常有用。你可能会有一个层次结构的树,而不是一个平面的图层列表,其中相关的图层按共同的父节点进行分组。你可以通过提升/降低或隐藏/锁定整个树的分支来管理文档,而不是逐个管理单独的图层。

更好的是,你可以进入一个组。这意味着告诉 Inkscape 临时将一个组视为子图层,并使该子图层成为当前图层。要做到这一点,只需选择该组并双击它,或按 Ctrl-Enter,或右键点击它并从弹出菜单中选择进入组

这个技巧结合了组的优点(组容易选择、移动、变换、样式化、查看边界框等)与图层的优点(图层定义了一个你可以舒适工作的上下文——例如,通过向其中添加新对象)。特别是,移动某个对象现有组中的最简单方法是剪切该对象(Ctrl-X),进入该组,并将对象粘贴到那里(Ctrl-V,或如果你想保持位置,则按 Ctrl-Alt-V)。

要离开一个子图层——无论它是真正的子图层还是你进入的一个组——按 Ctrl-Backspace,或双击一个空白画布区域,或右键点击任何位置并从弹出菜单中选择返回父级

4.9.2 图层菜单

最重要的图层命令都集中在“图层”菜单中:

  • 添加图层命令会创建一个新图层并要求你为其命名(图 4-11)。你还可以选择将其放置在当前图层的上方(默认)、下方或作为子图层放置在当前图层内部。图层名称不必唯一,可以使用任意字符。在 SVG 源代码中,图层的名称存储在inkscape:label属性中。

    图 4-11:创建新图层

  • “重命名图层”、“复制当前图层”和“删除当前图层”命令会按照它们的功能执行。复制一个图层会复制其中的所有对象。同样地(小心!),删除图层会删除其中所有的对象。

  • 这两个 Switch 命令只是将当前图层切换到其上方或下方的图层。这些命令仅定义了其他操作的上下文;它们不会更改文档中的任何内容,因此不能撤销(只有实际更改文档的命令才能撤销)。

  • 接下来的两个命令,将选择移动到上层(Shift-Page Up)和将选择移动到下层(Shift-Page Down),将当前选择移动到当前图层的上层或下层。(如果当前图层上方或下方没有图层,这些命令不会执行,并会在状态栏中提示。)通过跨越图层边界,这些命令与常规的 z-order 变更命令(如提升或降低,4.4)互为补充,这些命令仅在同一图层内工作。

    要将一个对象从一个图层移动到任何其他图层,不一定是相邻的,剪切该对象(Ctrl-X),切换到目标图层,然后粘贴到该位置(Ctrl-Alt-V)。如果需要从一个组中提取对象,请在组内选择它(5.10),然后使用对象 ▶ 从组中弹出所选对象

  • 四个 z-order 命令——提升图层(Shift-Ctrl-Page Up)、降低图层(Shift-Ctrl-Page Down)、图层置顶(Shift-Ctrl-Home)和图层置底(Shift-Ctrl-End)——等同于对象的 z-order 命令(4.4),只是它们作用于当前图层,通过将其(及其所有对象和子图层)在同级图层中上下移动。如你所见,这些命令的键盘快捷键与对象 z-order 命令相同,只是加了 Shift-Ctrl。

  • 最后,Layers... 命令(Shift-Ctrl-L)打开图层对话框(4.9.4)。

4.9.3 当前图层指示器

Inkscape 有两个主要的 UI 控件用于处理图层:状态栏中的基本当前图层指示器和功能更强大的图层对话框。

当前图层指示器显示当前图层的名称,并通过左侧的两个切换按钮指示该图层是否被隐藏(眼睛按钮)和/或锁定(锁定按钮),如图 4-12 所示。

图 4-12:状态栏中的当前图层指示器

它是一个交互式控件,不仅仅是一个显示器;你可以切换按钮并使用所有图层的弹出菜单来更改当前图层(图 4-13)。

图 4-13:文档中所有图层的弹出菜单

在图层列表中,当前图层用粗体和项目符号标记。锁定的图层名称周围有方括号(例如,[background])。隐藏图层的名称为灰色。临时图层(例如,您进入的组,5.10)使用斜体显示其名称。

4.9.4 图层对话框

当前图层指示器非常实用,因为它始终处于活动状态且占用的屏幕空间很小。不过,这仅适用于图层结构小而简单的情况。在更复杂的文档中,它会迅速变得笨重。这时,你需要使用图层对话框(Shift-Ctrl-L),如图 4-14 所示。

图 4-14:图层对话框

在图层列表中,你可以通过点击三角形标记来展开或折叠图层内子图层的分支。此外,你还可以通过点击图层名称左侧的相应图标来锁定或解锁、隐藏或显示任何图层,而不必使其成为当前图层。

在图层列表下方,六个按钮依次对应以下命令:创建新图层(你需要提供一个名称)、删除当前图层、将当前图层移至顶部、上移当前图层、下移当前图层、将当前图层移至底部。要重命名图层,只需点击图层列表中的名称并输入新名称,然后按 Enter 键。

右键点击图层名称以打开弹出菜单。除了添加、重命名、升降、复制图层等常见命令外,它还包含一些命令,允许你隐藏/显示以及锁定/解锁所有图层或所有图层(除了你点击的图层)。

在对话框的底部,有一个可以应用于当前整个图层的混合模式列表(17.2)。再往下,有两个滑块控制器,可以设置当前整个图层的不透明度或模糊级别。这些控制会影响该图层中的所有对象(关于组的不透明度,请参见 4.8.2)。

4.9.5 对象对话框

与 Adobe Illustrator 不同,Inkscape 的图层对话框不显示图层内的单个对象。还有另一个对话框,名为“对象”(Object ▶ Objects),它列出了图层层次结构中的所有单个对象(图 4-15)。

图 4-15:对象对话框

在许多方面,这个对话框与图层对话框相似。你可以添加或删除图层,重新排列它们,或为任何图层或单个对象设置混合模式(17.2)、模糊和不透明度级别。你可以切换任何对象的可见(V 列)和锁定(L)状态,还可以将组转换为图层,或将图层转换为组(点击 T 列中的图标)。该对话框还标记了被剪切或蒙版的对象(CM),并让你选择该对象(如果是路径的话)在节点工具中的路径高亮颜色(HL)(12.5.1)。

4.10 XML 编辑器

XML 编辑器是 Inkscape 与其他矢量编辑器的一个重要区别。这里可以看到文档的完整原始源代码,所有内容都清晰可见且未经过任何隐藏或(误)解读。简而言之,如果某些内容没有显示在 XML 编辑器中,那它就不在你的文档里。

如果你正在学习 SVG 或者仅仅对文档中某些对象或属性背后的内容感兴趣,那么 XML 编辑器是你最合适的工具。在这里,你可以对文档做任何操作。甚至可以说,XML 编辑器是程序中唯一必要的部分,其他部分都只是可选的便捷功能!

XML 编辑器与 Inkscape 其他部分完全同步。你在 XML 树中做的任何更改会立即反映在画布上,而你使用其他工具做的任何更改也会立即显示为 XML 编辑器中的元素或属性变化。

XML 编辑器有两个主要面板,分别是文档树和所选节点的属性面板(图 4-16)。你可以通过右下角的切换按钮水平或垂直排列这些面板。你还可以通过左下角的显示属性开关来隐藏属性面板。

图 4-16:XML 编辑器

4.10.1 树面板

这个面板展示了你正在编辑的文档的整个树结构。树中的每个节点(列表中的每一行)要么是 XML 元素,要么是文本节点。在 SVG 中,文本节点仅用于存储文本对象的文本内容;所有其他对象都是元素节点。例如,svg:rect 是矩形,svg:g 是一个组或图层(这里,svg 是命名空间前缀;见 A.2)。一个节点可能具有的所有属性,这个面板只显示 id 属性(它是唯一的,因此是区分相同类型节点的自然方式)。

列表中的并非每个元素都是可见的 Inkscape 对象。有些元素代表的是你在画布上看不到的东西(例如元数据)。有关各种 SVG 和 Inkscape 元素的更多信息,请参见 附录 A。

在文档树中,你可以通过点击任意元素来选择它。这个列表选择与 Inkscape 中的常规对象选择是同步的。如果选中的节点对应于一个可见对象,则该对象会在画布上被选中;反之,当你在画布上选择一个对象时,XML 树面板会滚动到相应的节点并高亮显示。这是访问一些通常无法访问的元素的一种方式,例如被锁定或隐藏的元素(4.1)。

在树面板上方,有一个小工具栏,包含用于通用 XML 操作的按钮:创建新元素或文本节点、复制或删除所选节点。最后四个按钮用于在树中移动所选节点(及其子节点)。你可以通过左右箭头按钮将节点水平移动,改变其嵌套级别(左箭头按钮将节点从父节点的子节点变为其兄弟节点;右箭头按钮将节点转换为其前一个兄弟节点的子节点),或者使用上下箭头将节点在其兄弟节点之间移动。你还可以通过拖动节点在树内重新排列它们。

4.10.2 属性面板

此窗格列出了所选元素节点的属性。(如果你选择了一个文本节点,该窗格允许你像编辑名为“content”的属性一样编辑节点的文本。)每个属性都有一个名称和一个值,列在表格的两列中。在 XML 中,属性的顺序不重要。

要编辑属性的值,只需点击它并直接编辑(图 4-17)。如果现有的值太长,无法显示在一行内,会弹出一个便捷的小窗口,您可以在其中编辑自动换行的值。(这通常适用于style属性;不过,更多方便的编辑对象样式属性的方法,请参见 8.1)。按下 Enter 键接受更改。

图 4-17:在 XML 编辑器中编辑style属性

要删除一个属性,请点击左列中的红色“x”按钮。要添加一个新属性,请使用该列顶部的蓝色加号按钮。

第五章:选择

在 Inkscape 中,你几乎无法在不先选择某个对象或对象的情况下进行任何有用的操作。在所有 Inkscape 操作中,选择操作拥有最多的方式、工具、对话框和快捷键。你需要了解其中的大部分,以便高效工作——至少了解其中的一些,以便能够在 Inkscape 中进行任何操作。

单独地,选择或取消选择对象不会以任何方式改变文档。因此,本章中描述的所有技术都不是可以撤销的操作,也不要求保存文档。

5.1 选择提示

如你所知,Inkscape 的选择实际上是一个对象列表,其中可以包含任何内容——从没有对象(空选择,未选择任何东西)到文档中的所有对象。选择是局部的,适用于编辑窗口;如果你打开第二个窗口并显示同一文档(3.6),该窗口将拥有自己的独立选择对象列表。被选择的对象可以位于画布的任何位置,任何图层或组中;多个被选择的对象不必是同一父对象的子对象。你不能做的唯一事情是同时选择一个对象及其祖先(5.10)。

在画布上,每个被选择的对象都会通过选择提示进行标记。默认情况下,这个提示是围绕对象的虚线框,显示该对象的边界框(4.3)。这个框使用对比色绘制在所有对象之上,因此在任何背景上都能看到。

你可以切换到不同的选择提示:在每个对象的边界框的左下角有一个小的菱形标记,如图 5-1 所示。要更改选择提示的类型或完全关闭它,转到工具 ▶ 选择器子页面,在首选项对话框中进行设置。

图 5-1:两种可能的选择提示类型

此外,你还可以控制哪些工具显示选择提示,哪些不显示。为此,查找“显示选择提示”复选框,该复选框位于每个工具页面的首选项对话框中。默认情况下,每个工具都会显示选择提示,除了测量工具、橡皮擦工具、调整工具、书法工具和油漆桶工具——即那些选择提示不太有用或可能造成干扰的工具。(当然,无论选择提示是否显示,选择本身依然存在——无论如何切换工具,选择都保持不变。)

5.2 选择与状态栏

在你选择或取消选择对象时,程序会发生很多事情。Inkscape 会立即将所有注意力集中到新的选择上。它重新绘制选择提示,必要时滚动画布以显示所选对象(3.12),并更新界面上的各种显示和指示器。

Inkscape 状态栏是获取提示信息的最重要来源之一,它会显示尽可能多的关于选择的相关信息。对于一个单一的选择对象,它会告诉你对象的类型,列出某些类型的附加属性(例如路径的节点数量、文本对象的字体家族和大小),显示该对象所在的图层名称,并提供一些有用的建议,如图 5-2 所示。

图 5-2:状态栏:选择的单个对象

对于多个选择的对象,Inkscape 会告诉你选择了多少个对象,并列出它们的类型(见图 5-3)。

图 5-3:状态栏:选择的多个对象

如果选择了多个图层中的对象,Inkscape 会显示对象的数量、所在的图层以及对象的类型(见图 5-4)。

图 5-4:状态栏:在多个图层中选择的多种类型的多个对象

状态栏消息区域左侧是当前图层指示器(见 4.9.3)。由于所选对象可能位于不同的图层,此控件与选择内容并不直接关联。然而,当你单击选择一个对象时,Inkscape 假定你现在想在该对象所在的图层中工作——因此,它会将该图层设为当前图层,指示器也会反映这一点。

状态栏更左侧是选中样式指示器,它始终反映当前选择的样式(如果选中了多种样式的对象,它会显示这些样式的平均值,或者如果样式无法平均,它会显示“不同”)。我在 8.2 中详细讨论了这个重要控件。

5.3 子选择

一些工具允许更精细的选择方式,从而对选定对象的某一部分进行操作,而不是整个对象。这个选定对象的部分有时被称为子选择

一个例子是文本工具。你可以选择整个文本对象,但也可以通过按住 Shift 和使用箭头键,或通过鼠标拖动,在该对象内部选择文本片段,就像在文本编辑器中一样(见 15.1.1)。这个选中的文本部分就是文本子选择。

另一个例子是渐变工具。一个渐变可以包含多个停止点(见 10.5),而该工具可以一次选择一个或多个停止点。渐变停止点自然只对所选对象可见——因此,如果你选择了一个停止点,你就在常规对象选择中创建了一个子选择。

当你更改子选择时,Inkscape 中有些行为与更改选择时相同。特别地,状态栏中的选定样式指示器(图 8-2)显示子选择的样式——也就是说,显示的是选定文本片段的样式,而不是整个文本,或者是选定渐变停止的样式,而不是整个对象。此外,任何样式设置命令(如点击调色板上的颜色,或通过按 Shift-Ctrl-V 粘贴样式)都会应用到子选择上(如果存在的话)。换句话说,子选择允许你处理对象的部分内容,几乎就像它们是独立的对象一样。

5.4 通过点击选择:选择器

你可能已经知道,工具栏中最上面的工具是选择器,使用该工具点击一个对象将选择该对象。当然,选择器工具不仅仅如此,让我们更详细地看一下这个简单的操作。

首先,请注意,点击一个对象会取消选择任何先前的选择。此外,使用选择器工具,你不仅可以选择对象,还可以拖动选定的对象到任何方向。结合这两个功能,可以轻松自如地移动对象——几乎无需考虑“选择”这个过程。你看到一个对象,点击并将它拖到你想要的位置。点击选择它,取消选择其他任何对象,然后拖动它。

有时候,这种行为可能会令人烦恼。特别是如果你使用的是带笔的平板电脑而不是鼠标,你可能会发现,当你只是想通过点击选择一个对象时,容易不小心将其推移。为了减少这个问题,进入首选项对话框的输入/输出 ▶ 输入设备页面,调整点击/拖动阈值值。这是允许鼠标“滑动”的范围,默认值为 4 像素;如果你点击并拖动一个对象的距离少于这个像素值,那么你的操作仍然被视为点击,且对象不会移动。如果你经常在点击时不小心移动了对象而不是选择它,增加这个值;相反,如果你发现当你想真正移动对象时,对象总是恼人的“卡住”,可以减少这个值。

然而,在你点击任何东西之前,你需要确保自己点击的是正确的位置,并且你的点击不会浪费。Inkscape 试图提供帮助:当你鼠标指针悬停在一个可点击区域上时,它会通过在鼠标指针上附加一个带箭头的十字图标来提示你,而不是在空白画布上显示一个普通的箭头。

玩一玩这个改变鼠标指针的功能。你会发现,没有填充的对象无法通过点击其中选择,完全透明的对象根本无法通过点击选择(尽管你可以使用橡皮带选择它们,正如你将在下一节中看到的那样)。在轮廓模式(3.14)下,你只能通过点击对象的轮廓来选择它。

如你所想,这种改变光标的方式在复杂图形中并不太有用,因为整个画布通常都被对象覆盖。然而,如果你将背景对象分离到一个图层并锁定该图层(4.9),这些对象现在变得不可选择,将不再改变光标——所以你可以通过将鼠标移到前景对象上来重新感知它们。

此外,你会注意到每个可点击的对象周围都有一个不可见的区域,宽度为几个像素。点击这个区域仍然会选择对象。这对于选择小对象非常方便,否则这些小对象几乎不可能准确点击。缺点是,这也解释了为什么有时候即使底部的对象稍微突出于顶部对象,也很难选择堆叠中的底部对象。

如果你不喜欢这个可点击区域的大小,你可以在首选项对话框的输入/输出 ▶ 输入设备页面中进行更改。这是抓取灵敏度值,默认值为 8 个屏幕像素。请注意,这个值和点击/拖动阈值都以屏幕像素为单位,这意味着它们不依赖于缩放;当然,当你放大时,进行小范围移动和选择小对象会更加容易。

5.5 通过点击选择:其他工具

Inkscape 用户界面的一项原则是一致性。除非有特别的原因,否则所有工具和模式都力求表现一致。这意味着许多工具,像选择器一样,都可以通过点击来选择对象。

通过点击选择适用于以下工具:节点工具(12.5)、所有形状工具(第十一章)、文本工具(第十五章)、连接器工具(1.2)、渐变工具(10.1)和网格工具(10.7)。不能通过点击选择的工具之所以不同,是因为这些工具的单击保留用于该工具的其他功能。

与选择器不同,这些工具即使在对象被分组的情况下,也会直接选择单独的对象(换句话说,在这些工具中,简单的点击相当于在选择器中按 Ctrl+点击,5.10)。这是有道理的;所有这些工具都是针对不同类型的单独对象工作的,所以在大多数情况下,选择一个组并不是你真正想做的事情。例如,如果你用节点工具选择一个组,你将无法对其进行任何有用的操作——一个组没有路径节点可以编辑。这就是为什么该工具始终直接选择你点击的路径,无论它是否被分组。

此外,不像选择器,其他工具在可选择的对象上不会改变光标。唯一的例外是文本工具,当它悬停在可编辑文本对象上时,会切换为文本插入光标(15.1)。

5.6 添加到选择中

一个选择可以包含多个对象。如果你已经选择了一些对象,然后想选择其他对象,你能在不重新开始选择的情况下做到吗?

添加另一个对象到当前选择中,按 Shift 键并点击它。相反,如果你按住 Shift 键点击一个已选择的对象,它将从选择中移除。这个快捷键作为切换工作,反转你按 Shift 键点击的对象的选择状态。

5.7 使用橡皮筋选择

在选择器中,选择多个对象的另一种方式是通过拖动它们。想象一个矩形框住了你想选择的所有对象,然后从矩形的一个角拖动到对角线的另一个角。(拖动的具体方向——例如从左上角到右下角或从右上角到左下角——并不重要。)这个矩形框(如图 5-5 所示),在你拖动时可见,称为橡皮筋选框

图 5-5:使用橡皮筋(鼠标拖动)选择多个对象

使用橡皮筋选择并不是切换;一旦你开始一个新的橡皮筋选择,任何先前的选择都会被取消。这就是为什么逻辑上,单击空白区域(而不是对象)会取消任何选择——它实际上是一个零大小的橡皮筋,取消了旧选择而没有创建新的选择。

橡皮筋会选择所有可见且未锁定图层中完全被包含的对象——换句话说,跨越整个文档的 z 层次堆栈,而不仅仅是当前图层。(因此,使用橡皮筋选择不会改变当前图层,即使它导致选择了一个不同图层中的单个对象。)此外,橡皮筋会选择那些你无法通过点击选择的对象——比如那些被其他对象覆盖的、没有填充和描边的对象,以及完全透明的对象(透明度为零)。然而,隐藏或锁定的对象(4.1)仍然不能被选择。

简而言之,如果一个对象的边界框完全在橡皮筋矩形框内,并且该对象是可以选择的,它被选中。

很容易假设,就像点击一样,按住 Shift 键拖动橡皮筋会给你一种切换的行为。然而,情况并非完全如此。使用选择工具按住 Shift 键拖动与普通拖动相似,只是它总是会创建一个橡皮筋,即使你从一个对象开始,而不是从空白画布开始,然后将(而不是切换)包含的对象添加到选择中。如果不按 Shift 键,从一个(可选择的)对象拖动将选择并移动该对象,但按住 Shift 键并拖动强制创建橡皮筋——这使得它在复杂的图形中更加有用,因为在这些图形中空白画布可能很难找到。

5.8 触摸选择

触摸选择是橡皮筋选择的亲戚。在选择工具中,如果没有先前的选择,按住 Alt 从空白画布拖动。你会看到鼠标光标留下的红色轨迹——触摸路径。松开鼠标按钮后,所有被(而非包含在)该轨迹“触摸到”的对象将被选中(图 5-6)。

图 5-6:使用触摸选择(Alt-拖动)。松开鼠标后将被选中的对象用深灰色标记。

这意味着你可以字面上“涂抹”你想选择的对象,这在你需要选择的对象靠得很近但它们的边界框太大(或与其他对象交织在一起)无法使用橡皮筋时非常方便。

与橡皮筋选择不同,触摸选择不会选择完全透明的对象或被其他对象遮挡的对象——也就是说,你无法真正“触摸到”的对象。事实上,触摸选择的行为完全像沿着触摸路径进行的一系列 Shift-点击,每个被触摸的对象都会收到一次这样的点击。

如果已有选择,按住 Alt 拖动具有不同的功能:它会移动选择,不论你将其拖动到哪里(6.1)。如果你已经选择了某些对象并希望用触摸选择来添加它们呢?使用 Shift-Alt 拖动:就像 Shift 强制使用橡皮筋一样,即使你从一个对象开始,触摸选择也会强制使用触摸路径,即使你有先前的选择。然后被触摸到的对象将被添加到选择中。

如果你进行触摸选择以便随后删除它们,橡皮擦工具的删除模式(14.4)会同时执行两项功能:拖动覆盖对象,松开鼠标后它们将被删除。在橡皮擦工具中,你不需要按住 Alt。

5.9 从下方选择对象

在复杂图形中选择对象时,一个常见问题是某些对象会遮挡其他对象。即使顶部对象部分透明且你能看到下面的另一个对象,单纯点击它仍然会选择顶部对象。

如果底部对象的边界框小于顶部对象的边界框,你可以按住 Shift 拖动一个橡皮筋围绕较小的底部对象,这样它将被选中而不会选中顶部对象。然而,这并非总是可行的。

5.9.1 Alt-点击

要选择那些不在 z 轴顺序顶部的对象,使用 Alt-点击,它会选择当前选中对象下方的对象。这意味着 Alt-点击的结果取决于当前的选择;如果没有任何选择,或者你在当前选择外部 Alt-点击,结果就和你普通点击一样。

然而,如果您点击一个已选中的对象,并且它下方还有其他对象,Alt+点击将取消选中已选中的对象,并选择紧接在其下方的对象。下一个 Alt+点击将选择更深层次的对象,依此类推。当您到达点击点处的最底层对象时,下一个 Alt+点击将重新选择最顶部的对象。

假设您有三个堆叠的对象,从底部到顶部分别编号为 1、2、3。未选中任何对象时,Alt+点击会选择最顶部的对象,即 3。下一个 Alt+点击选择 2,再然后是 1,再然后是 3,依此类推。

Shift+Alt+点击与 Alt+点击的区别,就像 Shift+点击与普通点击的区别一样:它会添加或移除选择,而不会完全取消选择。因此,在我们的 1、2、3 对象堆叠中,第一次 Shift+Alt+点击选择 3;再一次 Shift+Alt+点击后,您将选择 2 和 3;再点击一次,最底部的对象也会被添加到选择中。因此,经过三次 Shift+Alt+点击后,您将选中 1、2 和 3。之后的 Shift+Alt+点击将切换 3 的选中状态,同时保持 1 和 2 被选中。

5.9.2 Alt+滚动 [1.1]

如果您的鼠标有滚轮,还有一种选择对象的方式,即在对象下方进行选择。按住 Alt 键的同时旋转滚轮,可以逐一选择鼠标光标下堆叠中的对象,每次一个对象。向前旋转时从堆叠的顶部到底部;向后旋转时则从底部到顶部。因此,在前一节中的 1-2-3 堆叠示例中,向前滚动 Alt+滚轮会按顺序选择对象 3、2、1、3、2,依此类推;向后滚动则会选择 1、2、3、1、2,依此类推。

为了使操作更加直观,Inkscape 在您进行 Alt+滚动时,会暂时调整堆叠中所有对象的不透明度,覆盖它们可能具有的任何自然不透明度(图 5-7)。一旦开始旋转,堆叠中的所有对象都会变得半透明,唯一不变的是新选中的对象,它会变为完全不透明。这样,您可以一眼看到自己在堆叠中的位置,以及需要滚动多少才能找到所需的对象。

图 5-7:使用 Alt+滚轮(向前旋转)从对象堆叠中选择一个

如果在 Alt+滚动时按住 Shift,Inkscape 将不会取消选中上次滚动时所选的对象。这样,您可以通过按住 Shift+Alt 并将滚轮滚动到底部或顶部,轻松选择光标下方整个堆叠的对象。与 Shift+Alt+点击相比,这种方式更加方便,因为到达底部后,不需要反复切换顶部对象。

Alt+点击和 Alt+滚动之间的另一个区别是,后者忽略分组,始终选择单个对象,无论它们是否已分组。要通过点击实现相同的效果,您需要同时按下 Ctrl 键,正如下一节所示。

5.10 分组选择

分组在你希望将一组对象作为一个整体处理时非常有用:只需点击组中的任何一个对象(使用选择工具),整个组就会被选中。然而,很多时候你想选择并编辑组内的一个对象,而不需要取消分组。为此,只需 Ctrl 点击组内的一个对象。

Ctrl 点击会忽略任何分组,无论分组嵌套了多少层。例如,如果对象 A 是组 B 的成员,而组 B 又是顶级组 C 的成员,那么 Ctrl 点击 A 将选择 A,穿透这两层分组。无法通过 Ctrl 点击来选择组 B——它总是会选择最低层的非分组对象。

选择位于组 C 内的组 B 的唯一方法是通过进入组 C(参见 4.9.1)。进入 C 后,它将变成一个临时层。在该层内,你可以通过简单点击来选择 B。

你可以将 Ctrl 点击与 Alt 组合使用(选择下方)。从逻辑上讲,Ctrl-Alt 点击的效果与 Alt 点击相同,只是它忽略了任何分组,并像浏览 z 轴顺序堆栈中的对象一样进行选择,就好像它们都是未分组的。(至于 Alt 滚动,它已经忽略了分组,所以加上 Ctrl 没有任何效果。)

类似地,你可以将 Ctrl 点击与 Shift 组合,来添加一个对象到选择中,或从选择中移除它。最后,你可以 Shift-Ctrl-Alt 点击,这意味着“将 z 轴顺序堆栈中此点的最上方未选中对象添加到选择中,忽略分组;如果此点的所有对象都已被选中,则取消选择最上方的一个。”

使用各种修饰键点击进行选择的唯一限制是,你不能同时选择一个对象和包含该对象的组。因此,举例来说,如果你 Ctrl 点击一个组中的对象,然后 Shift 点击(没有 Ctrl!)同一组的另一个对象,尝试将该组添加到选择中,组会被选中,但第一个已选对象会被取消选择。不能同时选择一个组和组内的对象,这样会导致各种悖论,因此 Inkscape 尽力防止这种情况发生。

5.11 使用键盘快捷键进行选择

通常,选择是鼠标或笔的任务——因为在大多数情况下,选择是通过指示屏幕上的一些点或区域来完成的。然而,你也可以使用键盘快捷键进行两种非常常见的选择操作:选择下一个上一个对象(Tab 或 Shift-Tab)以及选择所有对象(Ctrl-A)。

在这里,下一个上一个实际上指的是文档中对象的 z 轴顺序(参见 4.4)。当你按下 Tab 键时,你会选择当前所选对象在 z 轴顺序中上方的对象(如果选择了多个对象,则选择最上方的那个对象)。相应地,Shift-Tab 会选择当前(最底部)所选对象下方的对象。

如果没有选择任何内容,Tab 键会选择当前层中的最底部对象,而 Shift-Tab 会选择最顶部的对象。由于对象通常会被添加到当前层的 z-order 顶部,因此在没有先前选择的情况下按 Shift-Tab 是一个方便的快捷方式,用于选择最近添加的(绘制、粘贴、导入的)对象。

您可以在首选项对话框的行为 ▶ 选择页面上更改此行为的某些方面(图 5-8)。

图 5-8:首选项对话框中的选择页面

  • 默认情况下,这些键仅限于当前层(可能是您进入的某个组,4.9.1)。也就是说,当您通过按 Tab 键到达层的最顶端对象时,再按 Tab 键会将您带回同一层的最底部对象;按 Ctrl-A 只会选择当前层中的所有对象。首选项对话框描述这种行为为仅在当前层内选择。在当前层及子层内选择选项与此相同,不同之处在于它会进入当前层的子层(4.9.1),而在所有层内选择则允许 Tab 或 Shift-Tab 跨越层的边界,Ctrl-A 会选择整个文档中的所有对象。无论首选项如何,按 Ctrl-Alt-A 也是选择所有层中所有对象的另一种方法。

  • 您可以取消选中“忽略隐藏对象和层”和“忽略锁定对象和层”两个复选框,以允许快捷键选择那些被隐藏或锁定的对象。如果您还选择了在所有层内选择,则可以进入隐藏或锁定的层内(4.9)。

5.12 通过属性选择 [1.1]

编辑 ▶ 选择相同菜单中的多个命令让您可以选择文档中与当前选中对象相同的所有对象——根据某些参数进行匹配。选择标准包括相同的填充颜色、相同的描边颜色、填充和描边颜色、描边样式(包括颜色、宽度、虚线模式,第九章)或对象类型(矩形、文本、组等)。

5.13 通过搜索选择

在复杂文档中通常才需要搜索对象——但当您确实需要时,您会很高兴 Inkscape 能做到这一点。本章关于选择的内容是讨论搜索的最佳场所,因为本质上它是选择对象的另一种方式。尽管 Inkscape 的查找/替换对话框不仅可以进行替换(即修改),还可以进行查找,但您仍然需要先进行查找(即选择),然后才能进行替换。

要打开查找/替换对话框(图 5-9),请按 Ctrl-F 或在菜单中选择编辑 ▶ 查找/替换

图 5-9:查找/替换对话框

要进行搜索,请在查找字段中输入查询内容,勾选选项,然后点击查找

选择文本选项仅适用于文本对象(第十五章),通过搜索它们的文本内容。否则,你可以在所有种类的对象的属性(详见下文)中进行搜索。

默认搜索包括整个文档;你可以将其限制为当前图层或选择范围。后者选项对于多阶段搜索非常有用——例如,如果你想查找同时包含“day”和“night”的文本对象,首先搜索“day”,然后在选择范围内搜索“night”。

搜索可以是区分大小写的(默认关闭),或者要求完全匹配(默认情况下,部分匹配也会被选中,比如当你搜索“select”时,包含“selected”的文本对象也会被选中)。

你可以选择将搜索应用于隐藏和/或锁定的对象(单独选择或通过位于隐藏/锁定图层中的对象)。

你可以搜索所有对象的 ID 属性(4.1),每个 SVG 元素的 ID 都是唯一的(尽管它们通常没有很大的意义,除非你自己编辑它们)。

你还可以在对象的样式中进行搜索。由于这是一个简单的文本字段,要使用此功能,你需要至少对样式在 SVG 中的编码有一定了解(参见 A.8)。如果不确定,你可以随时检查对象在 XML 编辑器中的style属性(4.10)。以下是一些示例:

查找所有填充为红色的对象

这是可能的,但仅限于一种特定的红色。你需要知道如何将该颜色转换为 RRGGBB 形式。将鼠标悬停在所选样式指示器中的调色板颜色上(8.5),会在工具提示中显示该颜色的 RRGGBB。例如,如果你要搜索亮红色填充(#ff0000),在对象的样式字符串中,该颜色前面会有属性名称fill,两者通过冒号分隔。所以你的搜索字符串将是fill:#ff0000

查找所有没有描边或填充的对象

搜索stroke:nonefill:none

查找所有完全透明的对象

搜索opacity:0;(注意末尾的分号分隔符;没有它的话,也会找到所有部分透明的对象——例如那些在样式中有opacity:0.5;的对象)。

另外,你可以通过文本对象所使用的字体名称进行搜索(即使它通常也在style属性中)。

更一般地说,你可以在任何属性的值或名称中搜索字符串。例如,所有通过选择导出为位图的对象都具有属性inkscape:export-filename,它存储位图导出文件的文件名。因此,搜索该属性将选中所有曾经导出的对象(之后你可以例如再次导出它们,参见 18.6)。

最后,你可以将搜索限制为特定的对象类型:取消选择默认的所有类型,然后选择你感兴趣的类型。

5.14 跟随链接

如你在接下来的章节中将看到的,Inkscape 中的对象可以通过多种方式相互链接。你通常需要跟随这些链接,找到与你当前选择的对象相连的对象。Inkscape 提供了一个通用的键盘快捷键 Shift-D。根据所选对象的类型,按 Shift-D 会选择:

  • 克隆的原始对象(16.4),如果克隆被选中。

  • 选定的文本路径对象所附加的路径(15.2.4)。

  • 选定的链接偏移对象所附加的路径(12.4)。

某些文档对象可能存储在 defs 中(参见 A.4),在这种情况下,你可以从文档中引用它们,但它们在画布上不可见。如果你的屏幕上显示的克隆、文本路径或链接偏移引用了 defs 中的对象,按 Shift-D 将会失败,并在状态栏显示错误信息。

5.15 取消选择与反向选择

在几乎任何工具、上下文或模式下,按下 Escape 键将取消当前的选择。如果你有子选择,通常按一次 Escape 会取消子选择,再按一次 Escape 会取消常规选择。

另一种取消选择的方法是点击空白画布(或下方没有任何内容的锁定对象)。然而,这只在选择器工具和那些单击即可选择对象的工具中有效(5.5)。在复杂的图形中,访问空白画布可能比较困难,此时 Escape 键无疑是最方便的取消选择方法。

此外,默认情况下,当你切换当前图层时,Inkscape 会取消选择(参见 4.9)。你可以在首选项对话框的行为 ▶ 选择页面中禁用此功能。

有时,识别出你想选择的对象会更容易。Inkscape 使得这变得简单——只需选择你不需要的对象,然后点击 编辑 ▶ 反向选择。已选择的对象将取消选择,未选择的对象(在当前图层内)将被选中。

5.16 选择杂项

当你撤销一个操作时,通常(但不总是)会取消当前选择;是否取消选择取决于你正在撤销的操作类型。类似的问题是,扩展操作后(参见 第十九章)选择经常丢失。此外,如果扩展打开了配置对话框,并且你勾选了实时预览框,在该对话框打开时,你无法更改选择(或在画布上执行任何其他操作)。

Inkscape 强大的命令行界面有一个用于选择对象的特殊参数 --select(C.6)。要使用它,你需要知道要选择的对象的 ID。这使得完全自动化的 Inkscape 编辑会话成为可能,单个命令可以加载文档,选择一些对象,对其执行一些操作,保存文档并退出——整个过程无需任何用户交互。

第六章:变换

在 Inkscape(以及 SVG)中,变换有一个非常狭窄的含义。它并不指任何物体的变化,而仅指四种对整个对象产生相同作用的简单操作:移动缩放旋转倾斜。其他的任何操作都不被视为变换。

从隐喻的角度看,变换对象就像在不重新粉刷墙壁或打开橱柜的情况下,移动你家中的家具。

对于数学爱好者来说,这个术语实际上是“仿射变换”的缩写,其中仿射意味着这样的变换保持直线、平行线和线段的长度比,但可能不会保持大小或角度。

6.1 选择工具:移动

在选择对象之后,变换它们是选择工具的第二个最重要的功能。在所有变换方式中,移动是最简单的:只需抓住一个对象(如果它还没有被选中,点击它就能选中;只要在对象的可点击区域内就能起作用)然后拖动。

这种自由拖动既简单又富有创意。你很可能会在工作初期进行大量的这种操作,当时你可能正在移动物体来建立整体的构图。

然而,在后期阶段,你更可能使用约束拖动。最常见的约束模式是按住 Ctrl 键进行水平或垂直拖动(见图 6-1)。如果在拖动时按住 Ctrl,Inkscape 会创建两条看不见的“轨道”,一条水平轨道和一条垂直轨道,它们在拖动开始的点相交。选中的对象只能沿着这些轨道移动,根据哪条轨道更近,物体会在两条轨道间跳跃。

图 6-1:使用 Ctrl 进行约束拖动

使用 Ctrl 在许多其他情况下也具有相同的约束作用。(在这一点上,Inkscape 与 Adobe 应用程序不同,后者通常使用 Shift 来实现类似的功能。)通过吸附功能,可以使用更多的约束方式,吸附功能将在下一章讨论。

如你在上一章看到的,选择你需要的对象可能很困难;你可能需要使用 Alt 点击(选择下方)和 Ctrl 点击(选择组内的对象)来选择所需对象。现在,如果你想拖动这些选中的对象,可能会遇到另一个问题:任何拖动都以点击开始,而这个点击可能会轻易破坏你精心构建的选择,选择到其他东西,比如恰好位于你对象上方的物体或包含组。

通常,解决此问题最简单的方法是使用箭头键移动选择,而不是通过拖动鼠标(见 6.5)。如果你绝对需要使用鼠标拖动,可以在按住 Alt 键时开始拖动。这将强制当前选择在不无意选择其他对象的情况下被拖动。你甚至可以从任何位置开始 Alt 拖动移动选择——而不是从选择本身,而是从空白画布或任何其他对象开始。

你可能会想知道,Alt 拖动与 Alt 点击如何兼容——Alt 点击确实通过“选择下方”改变选择。然而,与常规的点击选择不同,“选择下方”发生的时机是在你点击鼠标按钮后释放它时。如果在点击和释放之间,你没有将鼠标移动超过点击/拖动阈值(5.4,默认是 4 个屏幕像素),这被视为一次点击,并且执行“选择下方”。否则,当前选择会被移动。

最后,按住 Shift 键移动时可以暂时抑制吸附功能(见 7.3)。当你通常使用吸附功能但不想禁用它,只需要精确放置某个物体时,这个功能非常方便。

6.2 选择器:缩放

我们接下来的主题是缩放选择——使其变大或变小。缩放不同于缩放视图;当你缩放视图时,你只是在更近或更远的地方查看你的绘图,而不会改变它。缩放意味着实际上改变对象的大小;这是一个可以撤销的操作。

要缩放你的选择,选择器工具会显示八个控制柄,四个在角落,四个在选择框的边缘,如图 6-2 所示。拖动侧边控制柄会在一个方向上缩放选择(水平或垂直);拖动角部控制柄会在两个方向上缩放。

图 6-2:使用选择器工具进行缩放

默认情况下,角部控制柄可以在任何方向自由移动。这意味着所选对象的宽度和高度之间的比例(也叫做纵横比)可能不会被保持。你可以拉伸或压缩选择,或者可以使它变得更高更窄,或更低更宽,只需一次拖动。侧边控制柄也不会保持纵横比,因为它们只在一个维度上缩放。

锁定纵横比的最简单方法是按住 Ctrl 键进行缩放。这样,无论是角部控制柄还是侧边控制柄,缩放都会保持比例。另一种方法是通过画布上方选择器控制栏中的锁定切换按钮来实现,如图 6-3 所示,它位于 W 和 H 可编辑字段之间。

图 6-3:选择器控制栏中的纵横比锁定

当这个锁定被启用(按下时),角部控制柄总是按比例缩放。然而,侧边控制柄不受锁定影响,仍然只在一个维度上缩放。

通常,缩放是以这样的方式工作的:选区的对侧(侧边手柄)或对角(角部手柄)的边界框保持固定。然而,有时你希望选区的中心保持固定,从而使其从中心对称缩放。这正是 Shift 键的作用。为了让这一点更为明显,转换的固定点总是由一个十字标记表示,如图 6-4 所示。

图 6-4:使用 Shift 围绕选区中心进行缩放

你可以将 Shift 缩放与 Ctrl 结合使用,进行比率约束的中心对称缩放。不限于中心或角落,你可以将缩放的固定点放置在任何位置,正如你在 6.4 中将看到的那样。

剩下的修饰键 Alt,在缩放时也有作用。它让你可以按整数倍数缩放选区:放大到原始大小的 2、3、4 倍,或缩小到原始大小的 ½、⅓、¾ 倍(可以是一个或两个维度)。你可以将 Alt 与 Ctrl 结合使用,以锁定纵横比,和/或与 Shift 结合使用,使其围绕选区中心缩放。

6.3 选择工具:旋转与扭曲

如何旋转对象? 这个问题在 Inkscape 用户的论坛和邮件列表中是一个出奇常见的问题。诀窍是将选择工具切换到旋转模式,方法是对选区进行第二次点击。(这必须是一个明确的第二次点击,而不是双击。)第三次点击将选择工具切换回缩放模式,第四次则返回旋转模式,如图 6-5 所示。

图 6-5:选择工具的缩放与旋转模式

第二次点击有一个问题。就像移动一样,有时可能无法在不选择其他对象的情况下点击选区(例如,如果选中的对象处于组内或其他对象下方)。此时,你可以直接按 Shift-S 切换到旋转模式或返回。

一旦进入旋转模式,旋转选区就像拖动角部手柄一样简单。拖动侧边手柄会扭曲选区。

旋转时,按住 Ctrl 键会将旋转角度限制为固定的角度步长,默认情况下为每 15 度(图 6-6)。

图 6-6:按住 Ctrl 键时的旋转操作

你可以在首选项对话框中的行为 ▶ 步骤页面更改这个角度步长。在“旋转对齐每个”下拉菜单中,你可以选择从 0.5 度到 90 度的值(所有这些值都是 360 的约数),或者选择 None 来取消约束。

按住 Ctrl 键进行扭曲时会保持相同的角度步长,如图 6-7 所示。

图 6-7:按住 Ctrl 键时的扭曲操作

Shift-旋转会临时将旋转的固定点移至对角线上的另一个角落。例如,Shift-旋转右上角手柄会使左下角成为固定点。

6.4 固定点

一旦你将选择工具切换到旋转模式,你会看到选定对象的中心位置出现一个十字标记。这是旋转的固定点。这个点作为每个对象的永久属性之一被记住——移动它是一个不可撤销的操作,所有对象的固定点会与文档一起保存。缩放、旋转和倾斜都是围绕这个点进行的,不仅是使用选择工具,其他大多数方法(如在“转换”对话框中或使用键盘快捷键进行转换)也适用。

默认情况下,固定点位于对象边界框的几何中心。使用选择工具,你可以将其自由拖动到任何位置(无论是对象内部还是外部)。拖动时,固定点会自动吸附到对象边界框的边缘、几何中心(即原始位置)以及通过几何中心的水平和垂直轴上。这使得将固定点重新吸附回原位置或边界框的角落变得容易。按住 Shift 键拖动以抑制吸附;按住 Ctrl 键拖动以限制其在水平/垂直轴上的移动。

如果你移动对象(通过任何方式,不仅仅是通过选择工具拖动),其固定点会随之移动,因此它始终保持与对象的相对位置一致。无法使用键盘移动对象的固定点——你只能用鼠标拖动它。

当选择多个对象时,整个选择区域也有一个固定点。当然,默认情况下,它位于边界框的几何中心。但是,如果你最后选中的对象(如果是通过 Shift+点击逐个添加的)或在 z 轴顺序中位于最上层的对象(如果是通过框选或 Ctrl+A 选择的)曾经将固定点从默认位置移动过,那么整个选择区域的固定点就会与该对象相同。

如果选中了多个对象,拖动选择的固定点,这个操作会应用到所有选定对象——每个对象都会拥有这个新的固定点位置。例如,如果你画了一个有多个辐条的轮子,你可以选择所有辐条,只需一次性将固定点移动到轮子的中心。之后,即使你只选择一个辐条,它也会方便地围绕轮子的中心进行旋转。

此外,当你复制或克隆(16.1)对象时,固定点会被继承。例如,你可以画一根辐条,将其固定点移动到轮子的中心,然后继续复制(或克隆)该辐条,并使用任何方法(拖动选择工具的角点、键盘快捷键或“转换”对话框)旋转每一个副本。新的辐条会牢牢地保持在轮子内部,如图 6-8 所示。

图 6-8:使用固定点确保辐条属于轮子

6.5 使用键盘快捷键进行变换

通过拖动物体或其控制点在画布上变换物体既简单又直观,但并不非常精确(即使使用各种受限模式时也是如此),有时甚至会显得有些笨拙。许多长期使用 Inkscape 的用户更喜欢通过键盘快捷键来进行大多数变换操作。

用于变换物体的键盘快捷键很容易记住,并且通常能让你的工作变得更加轻松。学习这些快捷键的另一个原因是,正如你在本书的后续章节中所看到的,它们在许多其他工具和场景中也被一致地使用,以执行类似的功能——例如,在节点工具中变换节点,在文本工具中变换字符,或在渐变工具中变换渐变手柄。

6.5.1 移动

←、→、↑ 和 ↓ 箭头键用于移动选择区域。移动的距离取决于修饰键。

  • 没有修饰键时,箭头键将选择区域移动 2 像素(2 SVG 像素单位,而不是屏幕像素,A.6)。你可以在“首选项”对话框的“行为 ▶ 步骤”页面中更改此默认值。

  • 按住 Alt 键时,箭头键移动选择区域 1 屏幕像素(不是 SVG 像素)。这意味着实际的距离将取决于缩放级别——你可以在放大时进行更细微的移动,或者在缩小时进行更粗的移动。这是最有用的快捷键之一,因为它的精准性和适应性:通过按住 Alt 键,你可以将选择区域移动到当前缩放下仍然可以察觉的最小距离。

  • 按住 Shift 键时,箭头键移动选择区域的距离是没有 Shift 时的 10 倍。所以简单的 Shift + 箭头键移动 20 像素(默认情况下),Shift + Alt + 箭头键则移动当前缩放下的 10 屏幕像素。

键盘移动命令的简便性和可预测性使它们在许多不同的场景中都非常有用。例如,有时我需要对被大型前景物体遮挡的物体进行操作。按住 Alt 键点击“选择下方”是可行的,但不太方便;将前景物体移动到新图层并隐藏该图层也是一个不错的选择,但相当繁琐。在这种情况下,我通常选择前景物体并通过几个→或 Shift-→的按键将其移开(向右)。完成后,我会再次选择它并通过相同数量的反方向按键将其移回原位。(在这种情况下不要使用 Alt 箭头,因为你在将物体移回时可能处于不同的缩放级别,这会影响距离。)这种“先移开再移回”的技巧在分析复杂构图时也很有用,特别是当我试图弄清楚图形的哪些部分对应哪些物体时。

6.5.2 缩放

< 和 > 键(尖括号)分别用于缩小和放大选择区域。键盘缩放始终保持宽高比,并且围绕物体的边界框的几何中心进行(而不是围绕其可移动的固定点)。再次提醒,缩放的量取决于修饰键。

  • 没有修饰符时,< 和 > 键会按比例缩放,使得边界框的较大维度增加 2 px(2 个 SVG 像素单位,而不是屏幕像素)。例如,如果对象的宽度大于高度,则其宽度会增加 2 px(边界框的左右边缘分别向相反方向移动 1 px),而高度则按比例较小地增加。你可以在首选项对话框的“行为 ▶ 步骤”页面中更改默认的 2 px 值。

  • 按住 Alt 键时,< 和 > 键会按比例缩放,使得边界框的较大维度增加 2 个屏幕像素(不是 SVG 像素)。边界框的边缘会沿相反方向各移动 1 个屏幕像素。和 Alt-箭头一样,这意味着实际的缩放程度取决于缩放级别;你在放大时可以进行更精细的缩放,放大时则更粗略。

  • Shift 对 < 和 > 键没有影响。这是因为在某些键盘上,你需要按 Shift 键才能输入这些字符。顺便说一下,,(逗号)和.(句点)分别作为 < 和 > 键使用,因为在许多键盘上它们物理上是相同的键。

  • 按住 Ctrl 键时,< 和 > 键会按两倍的比例缩放——也就是说,它们会让选择变小或变大各一倍。当你需要大比例缩放某物时,这非常方便;例如,先按几次 Ctrl-> 将尺寸调到接近所需的范围,然后再通过按住 Alt 或不使用修饰符的 Ctrl 键精确调整。

6.5.3 旋转与翻转

[ 和 ] 键(方括号)分别会让选择逆时针和顺时针旋转。旋转是围绕选择器的旋转模式中可见的固定点进行的;除非你已移动它,否则它是对象边界框的几何中心。同样,旋转的角度取决于修饰符。

  • 没有修饰符时,[ 和 ] 键旋转 15 度。这与使用 Ctrl 键进行的鼠标旋转角度步长相同。你可以在首选项对话框的“旋转快照”下拉菜单中更改它。

  • 按住 Alt 键时,[ 和 ] 键会旋转一个角度,使得选择的边界框角点移动 1 个屏幕像素。这意味着实际的旋转角度取决于缩放级别,你在放大时可以进行更精细的旋转,放大时则更粗略。

  • Shift 对 [ 和 ] 键没有影响,原因与其对 < 和 > 键没有影响相同。

  • 按住 Ctrl 键时,[ 和 ] 键会旋转 90 度(即一个完整圆周的四分之一)。

此外,一些常见的变换操作可以通过键盘快捷键和选择器工具控制栏上的按钮同时访问(图 6-9):

  • 将选择旋转 90 度,分别是逆时针和顺时针(也可以通过 Ctrl-[ 和 Ctrl-] 快捷键访问)。

  • 水平和垂直翻转(镜像)选择(也可以通过 H 和 V 快捷键访问)。

图 6-9:选择器工具的控制栏:变换按钮

要使两个对象交换位置,可以使用 双重翻转 技巧。首先,选择两个对象并将其整体翻转。然后,依次选择每个对象并单独翻转它们来恢复位置。为了使交换是二维的,只需执行两次此操作,一次进行水平翻转(H),然后进行垂直翻转(V)。

艺术家有时使用翻转来检查作品。长时间查看自己的作品很容易变得对错误视而不见——只是因为你看得太久了。这个时候,水平或垂直翻转整个绘图会给你带来新的视角,使许多形状、平衡或构图上的问题变得非常明显。你也可以使用画布旋转(3.13)来达到同样的效果。

6.6 使用数字进行变换:X、Y、W 和 H

有时,鼠标或键盘的变换方法可能无法满足需求,因为你可能希望将对象移动特定的距离或到达特定的位置,或旋转一个特定的角度。Inkscape 允许你指定精确的数值来进行变换。

一种方法是通过选择工具的控制栏,如 图 6-10 所示。

图 6-10: 选择工具的控制栏:X、Y、W 和 H 字段

这里,X 和 Y 值表示选择框的位置,W 和 H 值表示其宽度和高度。当你选择或取消选择对象,或移动或缩放选择框时,这些值会自动更新;你也可以直接输入任何值来相应地移动或缩放选择框。

输入数值后,按 Enter 键激活,或者按 Tab 键激活并跳转到下一个字段。要从键盘跳转到第一个字段,按 Alt-X;如果不进行编辑并退出该字段,按 Escape。

在可编辑字段的右侧,有一个下拉菜单用于选择数值所表示的单位。支持的单位包括 in(英寸)、pt(点,1 个点等于 1/72 英寸)、mm(毫米)和 cm(厘米)。默认单位是 px(SVG 像素,A.6,现在是 1/96 英寸,但在 Inkscape 0.92 版本之前为 1/90 英寸)。

最有用的单位之一是 %(百分比)。它让你可以按对象当前大小的百分比来缩放对象,而不是按绝对大小。例如,要将选择框放大 1.5 倍,将单位切换为 %,然后在 WH 字段中输入**150**(或者,如果你点击它们之间的锁定按钮,则只输入其中一个字段)。

6.7 变换对话框

数值变换对象的最强大工具是变换对话框(Shift-Ctrl-M)。它为我们讨论过的四种变换类型(移动、缩放、旋转和倾斜)提供了单独的标签,并且还有一个用于完整变换矩阵的标签。通常,你选择其中一个标签,输入所需的值,然后点击 应用

让我们依次查看这些标签。

6.7.1 移动标签

我们将从“移动”选项卡开始,如图 6-11 所示。

图 6-11:变换对话框中的移动选项卡

与选择器控制栏中的 X 和 Y 值不同,选择器控制栏始终显示选择区域的绝对坐标,在“移动”选项卡中,您可以查看并指定绝对坐标或相对位移。默认情况下,相对移动复选框是选中的,因此水平和垂直字段显示为零,您在其中输入的任何数字都会将选择区域该数值移动(例如,**3****0** 的值会将选择区域水平移动 3 个单位)。

现在,取消选中相对移动复选框。您将看到字段现在显示选择区域的当前坐标——与选择器控制栏中的 X 和 Y 字段相同。单位下拉菜单也类似。

6.7.1.1 调整间距的移动

如果选择了多个物体,并且启用了“对每个物体分别应用”和“相对移动”复选框,则每个物体将相对于其相邻物体(对于 X 是左边最近的物体,对于 Y 是下方最近的物体)进行移动,而不是相对于它自身的前一个位置。这使得“拉开”或“压紧”物体集合成为可能。

例如,如果您需要水平排列一排物体,选中它们并在选中两个复选框的情况下,将它们水平移动 5 px。最左边的物体会向右移动 5 px,下一个物体会向右移动 10 px,以此类推,直到最右边的物体被移动 5n px,其中n是所选物体的数量。因此,相邻物体之间的间隔将增加 5 px,整排物体会像调整字间距那样被拉开(15.4.5)。将这些物体向–5 px 移动,则相反,它们会紧凑地挤在一起,最左边的物体向左移动 5 px,下一个物体向左移动 10 px,以此类推。对于垂直移动,效果相同,只是从最靠近顶部的物体开始(即 Y 坐标最小的物体)。

6.7.2 缩放选项卡

接下来,我们将查看“缩放”选项卡,如图 6-12 所示。

图 6-12:变换对话框中的缩放选项卡

在这里,默认单位是百分比(%),这允许您按给定的比例缩放选择区域(例如,200%表示将其放大两倍,50%表示将其缩小一半)。单位下拉菜单还包含您可能需要的所有绝对单位(切换到它们会将显示的值从 100%变为所选单位下的选择区域的宽度和高度)。缩放比例复选框类似于选择器控制栏上的锁定按钮。

到目前为止,本选项卡所能做的事情通过选择器工具的 W 和 H 控件也可以实现。然而,"单独应用于每个对象"复选框是该对话框独有的功能。它会对每个选定的对象应用相同的缩放,围绕其自身的固定点进行缩放(参见 6.4),而不是围绕选择区域的中心进行整体缩放。对于百分比单位,这意味着按相同的比例缩放每个选中的对象;对于其他所有单位,则会使所有选中的对象获得相同的指定宽度和高度。

与移动选项卡(和选择器控制)不同,当你通过其他方式(例如拖动控制柄)变换选择内容,或者仅选择不同的对象时,缩放选项卡上的值不会自动更新:你输入的数值保持不变。如果你希望将相同的尺寸应用于多个不同的对象,这非常方便,但有时也可能会成为问题——你可能会误以为显示的绝对单位值是当前选择对象的值,实际上并非如此。要将值重置为当前选择的 100%,请点击清除按钮。

6.7.3 旋转选项卡

接下来我们将介绍旋转选项卡,如图 6-13 所示。

图 6-13:变换对话框的旋转选项卡

旋转选项卡包含一个可编辑字段,用于设置旋转角度。正值表示逆时针旋转;负值表示顺时针旋转。默认单位是度(360 度为一整圈),但你可以将其切换为弧度(2 × π = 6.283 弧度为一整圈)。"单独应用于每个对象"复选框按预期工作:它不是围绕选择的固定点旋转整个选择区域(参见 6.4),而是围绕每个对象的固定点单独旋转每个对象。

6.7.4 扭曲选项卡

接下来是扭曲选项卡,如图 6-14 所示。

图 6-14:变换对话框的扭曲选项卡

扭曲选项卡包含两个可编辑字段,用于水平和垂直扭曲,基本上是沿着自身偏移边框四条边中的一条,使相邻的垂直边或水平边倾斜。"单独应用于每个对象"复选框的工作原理与缩放和旋转相同,围绕每个对象的固定点进行扭曲。

单位下拉菜单包含绝对长度单位、百分比和角度单位(度和弧度)。它们的工作方式如下:

绝对单位

使用绝对单位时,水平值指定选择区域顶部边缘的绝对位移,向左(正值)或向右(负值);垂直值指定左边缘的位移,向上(正值)或向下(负值)。

百分比

使用%单位时,位移量按边界框的相邻垂直边的给定百分比计算。换句话说,这个百分比等于倾斜角度的正切。例如,将一个直立矩形垂直倾斜 100%会导致其原本水平的边变成 45 度倾斜。

角度单位

这允许你直接设置倾斜角度——即与正在移动的边相邻的边的角度。例如,将一个对象垂直倾斜 45 度,与将其倾斜 100%或对象宽度的绝对值是一样的。倾斜 90 度不起作用,因为那会导致一个无限大小的对象。

6.7.5 矩阵标签

最后,我们将看看矩阵标签,如图 6-15 所示。

图 6-15:转换对话框的矩阵标签

该标签允许你编辑对象的变换矩阵,该矩阵存储在其transform属性中(A.7)。变换矩阵的代数详细解释超出了本书的范围;对于实际目的,了解两个最右边的值(标记为 E 和 F)代表对象的位移(即它从原点移动的距离),而另外四个值则共同编码了它的缩放、旋转和倾斜即可。

默认情况下,编辑当前矩阵的复选框未勾选,标签显示一个单位矩阵,其中 A 和 D 为 1,所有其他值为 0。如果你更改任何值并点击应用,这个矩阵将与对象当前的矩阵后乘——即,在其当前变换的基础上应用于选中的对象。如果你勾选编辑当前矩阵复选框,标签将显示并让你直接编辑所选对象的当前矩阵。(如果选中了多个对象,则显示的是第一个或最底部选中的对象的矩阵。)

你可以通过以下方法重置对象的transform属性,而无需进入 XML 编辑器。勾选编辑当前矩阵,点击清除(这将值重置为单位矩阵),然后点击应用

6.8 粘贴大小

为对象分配特定大小的快速方法是不使用任何对话框,而是通过粘贴该大小。首先,复制(Ctrl-C)一个你想要分配给其他对象的对象的大小。然后,使用编辑菜单中的粘贴大小子菜单命令。

此子菜单的命令执行各种组合的粘贴:

  • 只粘贴宽度(高度不变)、只粘贴高度(宽度不变)或大小(宽度和高度都粘贴)。

  • 将大小粘贴到整个选择中或每个选定的对象单独粘贴(类似于转换对话框中的“分别应用到每个对象”复选框)。

例如,如果你导入了多个位图图像,并想从中创建一个缩略图画廊,你可以通过绘制一个所需的缩略图大小的矩形,将其复制到剪贴板,选择所有图像,然后选择 编辑 ▶ 粘贴大小 ▶ 分别粘贴大小 来统一它们的尺寸。

6.9 测量工具 [1.1]

要通过数字进行转换,首先你需要知道这些数字是什么——你需要测量。如你所见,所选对象会不断自我测量,报告它们的坐标和尺寸。但 Inkscape 也有一个多功能的测量工具(M,左侧工具栏上的标尺图标),它可以满足你更多的测量需求,超乎你的想象。

6.9.1 悬停

你首先会注意到的一点是,即使在点击任何东西之前,工具就会显示你悬停在其上的任何对象的基本信息。这意味着你无需选择对象就可以查看它的大小或 X/Y 坐标——只需切换到测量工具,移动鼠标并从屏幕上读取。

就像在选择器中一样,工具默认将组视为对象,报告有关组的信息。如果你需要查找组内的对象,只需按住 Ctrl 键(同样无需点击,只需 Ctrl 悬停)。对于路径(第十二章)和形状(第十一章),该工具还会报告路径的长度,如图 6-16 所示。

图 6-16:使用测量工具:直径为 1 的圆的长度等于π。

工具控制栏上的前几个控件让你调整叠加显示的各个方面:字体大小(不依赖于缩放)、数字的精度(小数位数)、测量单位和比例(默认 100%),允许你查看所有值按某个系数缩放后的数值。在图 6-16 中,我将精度提高到 6,以获取更多位数的π。

6.9.2 拖动

想象一下一个弹簧测量带:你将它钩住某个点,然后拉伸到另一个点,再读取它们之间的距离。这正是你在测量工具中点击并拖动时所做的。除了长度,它还显示了测量带(蓝线)与水平线(红线)之间的角度(红色弧线),如图 6-17 所示。

图 6-17:测量两点之间的距离和角度

当你松开鼠标时,刚刚拉出的测量带会固定在画布上;它的两端变成了两个圆形标记,你可以自由地(或者在按住 Ctrl 键的情况下受限地)拖动它们,并看到数字不断更新。如果你想为其中一个控制点设置精确的坐标,可以按住 Shift 键点击它,并在弹出的定位对话框中输入坐标。你还可以通过控制栏上的“反向测量”按钮交换测量线的起点和终点。

当你切换到其他工具时,整个测量覆盖层会消失——但当你重新切换回测量工具时,它会重新弹出。点击并拖动到其他地方,用新的测量替换旧的测量;我发现没有办法“收回卷尺”——也就是仅仅移除已有的测量。

6.9.3 测量和约束角度

测量线与水平线之间的角度很容易获得;测量两条线之间的任意角度(如果两条线都不是水平的)也是可能的,但稍微有点复杂。如果你有两条线,想测量它们之间的角度,可以从它们的交点开始,沿着其中一条线拖动。然后,按下并释放 Ctrl(不松开鼠标);这会将角度测量的基准重置为当前方向。接着,拖动到第二条线并读取角度。

按住 Ctrl 拖动,如预期的那样,会将测量线的角度限制为角度步长(可以在行为 ▶ 步长中更改设置)。然而,由于按住 Ctrl拖动时会重置角度测量的基准,你需要在开始拖动之前按住 Ctrl,如果你想进行角度限制(例如,严格水平或垂直测量)。

6.9.4 测量线段

测量工具可以做一些你用卷尺很难做到的事:在同一条线上的多个距离进行测量。如果你让测量线穿过任何物体,你会发现每个交点将线段分开,工具会报告每个线段的长度。

例如,如果你用垂直测量线穿过大写字母B,你将得到多达六个独立的读数:三个水平笔画的宽度,它们之间的间隙,以及字母的整体高度,如图 6-18 所示。(底部还报告了测量线的总长度,但你不需要关注这个,因为只要它穿过你想要测量的部分,起始和结束点可以任意选择。)

图 6-18:测量字形的笔画和间隙:红色 X 标记为交点;每个线段显示其长度。

这对于你的测量线穿过的任何不同物体也有效:工具会报告它遇到的每个物体的线段长度,包括它们的宽度以及物体内部和物体之间的间隙。当测量穿过描边的路径或形状时,工具只报告与路径中心线的交点,而不是描边的可见边缘。

你可以在绘图的某个战略轴线上创建一个测量线,并在继续工作时将其保留在那里(它不会在其他工具中显示,因此不会妨碍操作)。随时切换到测量工具,读取穿过该轴线的已移动或新创建物体的最新数值。

在其控制条上,工具有多个选项来设置交点的处理方式,如图 6-19 所示。

图 6-19:测量工具:交点选项

  • 你可能希望通过仅报告选定对象的交点和长度来减少杂乱,而不是报告所有对象(默认设置)。

  • 默认情况下,工具不会显示第一段和最后一段的长度,因为它们依赖于测量线端点的位置,这些位置可能有些随意;你可以更改这一点。

  • 第三个按钮控制是否报告对象之间和对象内部的长度;默认情况下,它是开启的,但如果你关闭它,你将只看到测量线上的第一个和最后一个交点,以及它们之间的长度。

  • 第四个按钮控制工具是否标记隐藏的交点。这里的“隐藏”并不是指隐藏的对象(4.1),而是指那些被其他对象遮挡(它们交叉测量线的位置)的交点。默认情况下,隐藏的交点是显示的,但你可以将其隐藏以减少杂乱。

  • 最后,第五个选项允许你将交点和测量限制在当前图层;默认情况下,工具会查看所有可见图层中的对象。

6.9.5 幻影测量

每当你拖动开始新的测量时,旧的测量会消失。如果你希望同时显示两个或更多的测量值怎么办?只需通过点击控制栏上的相机按钮(即“拍摄快照”)将当前测量转换为幻影,这样就可以了。

幻影测量几乎像正常的测量一样工作,唯一的区别是你无法拖动其端点,并且它以统一的灰色显示,而不是红色/蓝色。不幸的是,与当前“实时”测量不同,幻影测量在切换到另一个工具再返回时不会保留,这使得它们在实际工作中不太有用。

6.9.6 创建测量对象

测量工具创建的构造——包括当前的测量值和任何幻影——都不是文档的一部分。它仅仅是一个信息叠加层。但是,如果你想要一个真正的、有形的对象来显示测量值,测量工具也能做到这一点。

然而,在深入了解对象之前,先让我们看看测量工具还可以为你创建的参考线。参考线(7.1)也不完全是实物,因为它们不会被打印,也不会在 Inkscape 之外的 SVG 查看器中显示;然而,它们比测量工具的构造物更“真实”,因为它们在任何工具中都可见(尽管你可以隐藏它们),并且随着文档的保存/恢复而保存。当你在控制栏上按下“转为参考线”按钮时,当前的测量会生成一系列参考线——一条是测量线本身,两个水平/垂直的交叉线表示起点/终点,以及每个交点的斜线,正如图 6-20 所示。

图 6-20:测量工具可以生成参考线。

测量工具的引导线是紫色的(与默认的蓝色常规引导线不同),并且有清晰的标签。尽管如此,如果你将多个测量值转换为引导线,你的画布可能会显得相当混乱,成堆的引导线会无限延伸到各个方向。许多情况下,如果你想将测量结果保留为永久记录,最好将所有内容转换为对象。这就是控制栏上的下一个按钮“转换为对象”所做的工作(图 6-21)。

图 6-21:测量工具也可以生成对象!

起初,这个新创建的对象和测量叠加效果几乎无法区分:它忠实地复制了所有的线条、交叉标记和半透明标签。然而,它确实是一个对象——你可以将其拖动、放大、取消分组、删除其组内的对象等等。

下一个按钮,标记尺寸,提供了另一种创建对象的方法。它并不试图模仿测量工具的叠加效果,而是创建一个简单的、纯黑色的尺寸标记,带有箭头以及给出长度的文本对象(图 6-22)。这只适用于测量的整体长度,忽略任何交点或角度。你唯一可以调整的参数是此对象将放置的测量线与该对象之间的距离(控制栏上的偏移量,始终以 px 为单位)。

图 6-22:测量工具可以生成尺寸标记。

6.10 使用调整工具进行变换

调整工具(W 或 Shift-F2)是一种多功能的工具,它不仅将同样的“软刷”比喻应用于变换对象,还适用于样式编辑(8.9)和路径编辑(12.6)。该工具有多种模式;在本章中,我描述了那些涉及变换、复制和删除对象的模式。使用这些模式,你可以通过散布绘制——扫动、摇摆或雕刻对象场域,如喷雾工具喷射物(4.7)或克隆拼接(16.6),以创作复杂和自然主义的图像。

调整工具的所有模式都具有一些共同特征。在所有模式中,你都使用一个圆形的软边刷子(在光标下方看到的橙色圆圈),由控制栏上的宽度和力度参数控制,并且可以选择性地受笔压影响(如果你使用压力敏感的绘图板)。你通过这个刷子在选定的对象上“涂抹”,对其进行操作。

画笔的宽度从 1 到 100 不等,但这些并不是绝对单位;在任何缩放级别下,1 表示非常小的画笔,而 100 则表示一个大约等于屏幕大小的画笔。工具会以一个围绕鼠标光标的圆形画笔轮廓显示当前画笔宽度。要更改宽度,可以使用工具栏上的宽度控制,或使用←(变窄)和→(变宽)键。画笔是柔和的;其作用在中心达到峰值,并且沿边缘平滑递减,呈现钟形轮廓。

类似地,力度的范围从 1(非常弱——你需要多次刷动物体才能看到明显效果)到 100(非常强——画笔的第一次刷动就能施加最大效果)。要改变力度,可以使用工具栏控制或按↓(减弱)和↑(增强)键。

为了了解 Tweak 工具的工作原理,在测试绘图中创建一些小物体——例如,使用喷涂工具(4.7)或通过手动复制(Ctrl-D)或克隆(Alt-D)物体并拖动副本。现在,选择所有你创建的物体,切换到 Tweak 工具,调整宽度,使圆形覆盖多个物体,设置力度为适中的 20,启用其中一种模式(如下面所述),然后开始在物体上拖动。图 6-23 显示了将会发生的情况。

图 6-23:使用 Tweak 工具的模式变换半透明物体网格

移动模式

将选中的物体在你拖动画笔的方向上移动。这与简单地拖动这些物体不同——除非你在拖动它们:你的画笔会轻柔地“扫过”它所经过的物体。请注意,Tweak 工具仅影响选中的物体(尽管它没有显示选择提示);通常最好将你常常调整的物体放在一个单独的图层上,这样你可以将该图层设为当前图层,并通过 Ctrl-A 选择它们。

吸引/排斥物体模式

将选中的物体在画笔下吸引向光标(默认),或按住 Shift 键将其排斥远离光标。通过这种方式,你可以“拉近”(使密集)或“推远”(使稀疏)散布中物体的不同区域。

移动抖动模式

将选中的物体在画笔下按随机方向和随机距离移动。按压得越用力(使用压力敏感笔)且力度越大,抖动越强烈。这是一个“打乱”你的构图的方式,适用于那些变得过于均匀的地方。

缩放模式

将选中的物体在画笔下缩小(默认)或放大(按住 Shift 键)。通过这种方式,你可以在散布中引入平滑的尺度不均匀性——使图像中的某些部分物体变大,其他部分物体变小。

旋转模式

将选中的对象在画笔下顺时针旋转(默认)或逆时针旋转(按住 Shift 键)。这样可以给你的散射效果引入旋转的不均匀性——例如,将你的散射纹理“弯曲”以匹配图像不同部分的主导方向。

复制/删除模式

随机地在画笔下复制一些选中的对象(默认)或删除其中的一些(按住 Shift 键)。一个对象被复制或删除的概率总是取决于力度和笔压。这完成了“散射绘图”工具集,提供了在必要时加厚或减少散射的方式。

与常规的复制命令(4.5)一样,使用 Tweak 工具复制时,复制品会直接放置在原始对象上,因此在复制后使用抖动模式将它们分散开来是个好主意。由工具创建的复制品会自动加入到选择中,如果原始对象已经被选中。

6.11 变换影响的内容

现在你可以使用各种方法来变换对象,让我们来看看具体变换了哪些内容。实际上,Inkscape 可以选择性地变换或不变换对象的某些特定部分或特征。这是通过选择器控制栏右端的四个切换按钮来控制的,如图 6-24 所示。

图 6-24:选择器工具的控制栏:变换选项的切换按钮

笔画宽度

这个选项仅适用于缩放,对移动、旋转或倾斜没有影响。当启用时,任何带有笔画的缩放对象(8.2)会按照相同比例缩放笔画宽度。例如,如果你将一个 2 像素宽的笔画对象缩放为当前大小的两倍,且该按钮已启用,那么缩放后的对象将有 4 像素宽的笔画。如果按钮关闭,则笔画宽度将保持为 2 像素不变。

当你在不保持纵横比的情况下缩放对象时,如果此按钮开启,笔画将按照垂直和水平方向缩放比例的乘积的平方根进行缩放。(我知道!)换句话说,笔画的缩放比例将是水平和垂直缩放比例的几何平均数。例如,如果你将一个对象的宽度水平缩放为原来的两倍,但高度不变,那么笔画的宽度将增加 1.415 倍(即 2 的平方根)。

保持笔画宽度不变缩放更常用。举例来说,在计划或草图中,通常希望所有对象的笔画宽度保持固定,不受缩放影响,因此你会关闭这个按钮。只有在你将笔画作为纯粹的视觉元素使用时(例如在手绘图中使用类似画笔的笔画),开启此选项才有意义。

圆角矩形边角

此选项仅适用于缩放操作,对移动、旋转或倾斜没有影响。它控制是否在缩放矩形时缩放其圆角(11.2.2)。当启用时,矩形会整体缩放,就像将其转换为路径一样;这可能导致圆角变大、变小或变得不圆。当禁用时,Inkscape 会准确保留原始的圆角形状。禁用此选项在某些情况下很有用,例如在流程图中,你希望所有的框都具有相同的圆角,不管它们的大小如何。

渐变

该按钮控制是否将变换应用于对象填充或笔画中的渐变(10.1)。由于渐变(更准确地说,渐变停止点的位置)可以被移动、旋转、倾斜以及缩放,因此该按钮适用于所有类型的变换。当启用时,渐变停止点与带有渐变的对象一起整体变换。当禁用时,渐变会固定在画布上(位置、方向或缩放不变),而对象则会被变换。

例如,在此按钮关闭时,可以将对象移出其自身的渐变,或将其放大,以便更多的渐变区域变得可见。这在渐变的位置与绘图中的其他对象协调时非常有用,而对象本身只是渐变的一个“窗口”,并且你想在不接触渐变本身的情况下移动或调整该窗口的边缘。

图案

该按钮与“影响渐变”按钮类似,只不过它作用于图案(10.8),而不是渐变。

对于路径,另一种“不影响”笔画宽度、渐变或图案(无论这些选择器选项如何)的方法是通过在节点工具中选择所有节点并转换节点选择来实现(12.5.7.3)。

第七章:吸附与排列

作为前一章节关于变换的续集,让我们来看一下 Inkscape 如何不仅允许你自由变换对象,还能快速、精确地完成这一操作,并且在某种程度上,做到自动化。两种主要方法是吸附和排列。

吸附是指使某些点、线或路径像磁铁一样工作,这样当你将某个对象移动到这些磁性吸引点附近时,移动的对象会“吸附”到精确的目标位置。排列则是以规律的方式移动大量对象,使它们对齐、分布、散开,或按你想要的方式排列成网格。

7.1 参考线

对齐对象的最简单方法是创建一个参考线(指导线)。参考线是在画布上可见的、无限长的直线,你可以用它们来对齐和吸附对象。参考线不是对象:它们不能被选中、不会打印,也不会出现在位图导出中。虽然它们会与文档一起保存,但它们不是 SVG 标准的一部分,并且在除了 Inkscape 之外的 SVG 查看器中不可见。它们只是 Inkscape 专用的帮助工具,用于组织你的艺术作品。

例如,参考线可以将你的布局部分分开,帮助你可视化不同区域或单元格的边界。参考线可以是中心线,帮助你围绕它对称地绘制。或者你可以用参考线来验证对象是否真正对齐,还是仅仅看起来对齐。

要手动创建一个参考线,必须使画布的标尺可见;如果标尺被隐藏,可以通过 Ctrl-R 显示它们。点击标尺上的任意位置,按住鼠标不放,将光标拖到画布上。一个新的参考线会出现,你可以在想要的位置松开鼠标来放置它。自然地,从水平标尺拖动会创建水平参考线,从垂直标尺拖动会创建垂直参考线;更有趣的是,从标尺的两端拖动会创建对角线参考线,默认倾斜 45 度,如图 7-1 所示。

图 7-1:通过拖动标尺来创建参考线

移动参考线非常简单。使用选择工具或节点工具,将光标悬停在参考线上;注意它会变成红色,这意味着它现在可以被抓取。点击并拖动参考线,将其移动到你想要的位置。要删除参考线,只需将其拖回标尺并放到标尺上,或者在参考线变红时悬停并按 Delete 键。

要切换文档中所有参考线的可见性,按下 | 键(这是垂直管道字符,通常与 \ 键在同一键上,但需要按 Shift)。此键会隐藏参考线,但不会删除任何东西;如果你再次按下 | 键(或尝试创建新的参考线),所有隐藏的参考线会重新显示。此键控制参考线的可见性以及吸附到参考线的功能(因此不会吸附到不可见的参考线);如果你希望禁用吸附功能而不隐藏参考线,可以使用 % 键(全局吸附切换,7.3)。

7.1.1 指南锚点

每个指南都有一个特殊的点,称为锚点,它看起来像一个小圆圈。指南的标签(如果有)会显示在其锚点旁边。这也是您可以通过 Shift+拖动手动旋转指南的轴心。

通常,锚点是您在创建或移动指南时最后释放鼠标的点。它也是您在指南对话框中查看和编辑的 X/Y 坐标(见下一节)。要沿着指南滑动锚点而不移动指南,请按住 Ctrl 键拖动它。

当您对齐到指南时,指南的锚点会产生磁性作用。也就是说,当您靠近锚点时,您不仅会对齐到指南,还会精确地对齐到其锚点。

7.1.2 指南对话框

如同在 Inkscape 中常见的那样,除了手动拖动指南,您还可以使用数字精确指定指南的位置和角度。这可以通过指南对话框完成(见图 7-2),通过双击任何指南进入该对话框。

图 7-2:指南对话框

  • Label 是任何标识此指南的文本字符串。它将显示在指南旁边,靠近锚点。

  • 在 Label 下方,一个颜色样本显示并允许您更改(点击它会弹出颜色选择器)指南的颜色(但出于某种原因,不能更改透明度)。

  • 对于水平指南,Angle 为 0,Y 决定指南的高度。

  • 对于垂直指南,Angle 为 90 度,而 X 决定指南的水平位置。

  • 对于斜向指南,Angle 设置倾斜角度(默认是 45 度),而 X 和 Y 值共同决定穿过该指南的锚点位置。

  • "Relative change"复选框将对话框中的所有可编辑字段归零;现在,您输入的任何值将到当前值上,而不是替换它们。

  • 如果您锁定了该指南,它将不会响应鼠标悬停,您也不会不小心将其拖动(并且不会阻止您选择其附近的对象)。您仍然可以双击该指南通过此对话框解锁,尽管您可能需要在空白画布上操作,以避免不小心双击某个对象。

  • OK 接受您的更改;Duplicate 和 Delete 按钮的功能如其名称所示(复制的指南最初会放置在原始指南的顶部);Cancel 关闭对话框而不做更改。

请注意,指南对话框是模态的,这意味着它在显示时会锁定 Inkscape 的其他部分。

7.1.3 指南的文档属性

文档属性对话框的 Guides 标签(Shift-Ctrl-D)包含一些影响所有指南的通用选项,如图 7-3 所示。这些选项出现在这里,而不是在全局首选项对话框中,因为它们被认为是文档本地设置并与文档一起保存,因此不同的文档可以有不同的指南设置。

图 7-3:文档属性对话框中的指南设置

  • 显示辅助线复选框与|键的功能相同:它切换文档中所有辅助线的可见性(和吸附性),而不删除它们。

  • 锁定所有辅助线会使所有辅助线不再响应鼠标悬停或拖动,这样你在设置好所有需要的辅助线后,工作会变得更加轻松。注意:新创建的辅助线仍然不会被锁定(虽然你可以通过返回此对话框并关闭再打开锁定所有辅助线来重新锁定它们);你单独锁定的辅助线(7.1.2)也会在你取消选中此复选框时被解锁。

  • 创建页面周围的辅助线按钮将在画布的四个边生成四条辅助线,方便你对齐或吸附到页面框架。

  • 删除所有辅助线按钮将在你的文档中有过多辅助线时派上用场,帮助你重新开始(但又不想丢失内容)。

  • 你可以改变辅助线在常规状态下的颜色和透明度(默认是半透明的蓝色)以及鼠标悬停时的颜色(默认是半透明的红色)。点击颜色样本将打开一个小的颜色选择对话框(图 7-4)。A 滑块设置透明度(alpha)。你在这里设置的颜色只会影响那些没有设置自己颜色的辅助线(7.1.2),以及在更改颜色后你创建的新辅助线。

    图 7-4:颜色选择对话框

7.1.4 从对象创建辅助线

你已经看到过度量标尺(6.9.6)和页面框架被转换为辅助线,但你也可以将任何对象转换为辅助线。只需选择一个或多个对象,然后从菜单中选择对象 ▶ 对象转为辅助线,或按 Shift-G。

图 7-5 展示了该命令如何作用于不同类型的对象:

图 7-5:将各种对象转换为辅助线

  • 对于路径或矩形,它会用一个重合的辅助线替换每一段直线路径或矩形边。这样,将矩形转换为辅助线会创建一个由两对平行辅助线勾勒出的矩形区域。若要快速创建通过两个指定点的倾斜辅助线,请切换到钢笔工具(14.1.1),点击一个点,双击另一个(以确定直线路径),然后将此路径转换为辅助线。

  • 对于 3D 框(11.3),框的所有 12 条边都会转换为辅助线。

  • 对于其他情况,对象边界框的四条边将转换为两条垂直辅助线和两条水平辅助线。

7.2 网格

可以将网格视为辅助线概念的进一步发展:它是覆盖整个画布的规则辅助线图案。网格通常用于吸附、对齐、均匀分布物体、绘制像素网格或轴测绘图(第二十四章)。

Inkscape 支持两种类型的网格:矩形网格和轴测网格(图 7-6)。一个文档可以显示多个网格,它们可以在类型和/或间距上有所不同。要在文档中创建新网格,请转到 文档属性 对话框中的 网格 选项卡,选择所需的网格类型,然后点击 新建。新网格将在文档中高亮显示。

图 7-6:矩形网格和轴测网格

如您所见,矩形网格由两组垂直的引导线组成,而轴测网格则有三组,一组垂直,另外两组呈角度(默认角度为 30 度和 -30 度)。矩形网格是最常见的类型;轴测网格通常用于绘制没有消失点的伪 3D 场景。

您会注意到,Inkscape 在缩放时会保持网格线的视觉密度在一定范围内。当您缩小时,网格线会变得更密集——但随后,Inkscape 会通过只显示每第十条网格线来简化网格。随着缩放级别的进一步增大,网格线的简化会一遍遍发生,从而保持合理的网格显示。反过来,当您放大时,Inkscape 会逐步显示更多网格线,以便均匀填充您的屏幕。

新的网格线仅会在所有网格线都可见的缩放级别停止显示;默认的矩形网格间距为 1 像素。就像尺子上厘米标记比毫米标记大一样,Inkscape 会让每第五条线(称为主线)比其他线稍微深一些(次线);在较高的缩放级别下,您可以看到这一点。

要隐藏文档中的所有网格,请按下 # 键;再次按下 # 键会显示所有隐藏的网格。此键控制网格的可见性和吸附到网格的功能,因此您永远不会吸附到一个不可见的网格;如果您只想禁用吸附而不隐藏网格,可以使用 % 键(全局吸附切换,7.3)。

7.2.1 网格选项

您可以在文档属性对话框中更改文档网格的某些设置。创建网格后,您将在对话框的底部看到新的网格属性面板,如图 7-7 所示。

图 7-7:矩形网格(左)和轴测网格(右)的网格属性

您可以在同一个文档中创建多个网格,默认情况下,所有网格会同时显示——但您可以单独启用或禁用它们。在对话框中,每个网格都会有一个独立的标签。

以下是您可以更改的网格设置:

  • 启用或禁用网格(基本上就是开启或关闭吸附到网格),并切换网格是否可见。禁用网格会隐藏它,但隐藏并不意味着禁用——因此,如果您愿意,可以设置吸附到不可见网格。另外,您可以仅允许吸附到可见网格线,忽略由于缩放级别而隐藏的网格线。仅对于矩形网格,您可以切换为将网格交点显示为点而不是线。

  • 网格原点设置允许你整体移动网格。你可以数值设置原点 X 和原点 Y,或者使用左侧的九个对齐到页面按钮之一,将原点移动到页面的某个角落、中边或中心。

  • 间距设置定义了线条的密度(记住,如果你将网格做得太密,Inkscape 在你没有足够放大时也不会显示所有线条)。对于矩形网格,有两个间距值,X(水平)和 Y(垂直)。对于轴测网格,只有一个间距值——沿 Y 轴交点之间的距离;垂直线之间的间隔完全由这个距离和轴测角度决定。所有这些值通常都与单位选择器(下拉列表)一起使用。

  • 角度仅适用于轴测网格。这些是两组对角线的角度。默认情况下,两者都是 30 度(X 角度是从水平线逆时针测量,Z 角度是顺时针测量),但它们的范围可以从 0 度(完全没有垂直引导线)到 90 度(小心,你的画布将完全被垂直引导线覆盖!),并且它们不必彼此相等。

    如果你已经在文档中添加了轴测网格,那么新的对角引导线(7.1)将会以与网格相同的角度创建。

  • 你可以为主网格线和次网格线分别设置颜色。默认情况下,它们都是蓝色的,但次网格线的透明度较低(因此不太明显)。

  • 你可以调整主网格线的频率;默认情况下,每第五条网格线是主网格线。

你不能“将网格转换为对象”,但是如果你需要真实对象的网格(与 Inkscape 的辅助网格不同,其他 SVG 软件也会显示这些),可以尝试克隆平铺工具(16.6)或扩展 ▶ 渲染 ▶ 网格(19.2)。

7.3 吸附

现在你已经了解了所有关于引导线和网格的内容,让我们来看看引导线和网格最常用于什么:吸附。

吸附的理念很简单:Inkscape 会尽力将物体放置在你希望它们出现的位置,而不是你用那不太稳定的鼠标或平板笔实际移动它们的位置。一旦你将一个可吸附对象(可以吸附的物体)移动到足够接近一个活动的吸附目标,它就会跳到正确的位置。吸附本质上是交互式的;它只有在你用鼠标拖动某个物体时才会发生(但例如,当你用键盘的箭头键移动物体或使用对齐和分布对话框时,吸附不会发生)。

可吸附对象可以是整个物体,也可以是物体内部的各种节点或点(路径节点、渐变控制点、固定点等等)。除了引导线和网格外,吸附目标可以是其他物体及其部件(也就是说,如果你允许的话,物体可以吸附到物体上)。吸附是一个大话题——但其实不复杂:一旦你掌握了基本概念,其他的只是记住众多模式和开关。

吸附在你需要的时候非常有用——但诚然,在不需要的时候非常令人讨厌。如果吸附干扰了你的工作,只需记住有一个主吸附切换按钮——%键——它可以启用或禁用整个程序中的所有吸附功能。(这里有个助记法:把%字符想象成两个节点,正准备吸附到一个倾斜的引导线。)与|(引导线切换)和#(网格切换)不同,这个键开启或关闭吸附行为,但并不隐藏或显示任何内容。而且,在选择工具和大多数其他工具中,按住 Shift 键拖动对象或节点时,会暂时禁用吸附。

7.3.1 吸附控制条

大部分吸附控制功能都集中在吸附控制条中,默认情况下垂直显示在 Inkscape 窗口的最右边(图 7-8)。使用视图 ▶ 显示/隐藏 ▶ 吸附控制条来开启或关闭它。

图 7-8:吸附控制条

吸附条最上方的按钮是主吸附切换按钮;当它关闭时,吸附条上的所有其他按钮都会被禁用。

吸附的对象和吸附目标被分为三类,分别对应吸附控制条的三个主要部分(底部的第四部分控制一般的吸附辅助功能,如网格和引导线)。每个部分的顶部都有一个主切换按钮;这些子切换按钮看起来与最上方的主吸附切换按钮完全一样,这一点可能会让人感到有些困惑(即使它在某种程度上是统一的)。(Inkscape 真的能从才华横溢的图标设计师那里获益!) 这三类是:

  • 选择工具中的边界框及其元素(4.3)。

  • 路径、路径节点和路径节点句柄(12.5.1)。

  • 其他所有内容:渐变句柄(10.1),引导锚点(7.1.1),变换固定点(6.4),文本锚点和基线(第十五章)。

有时,一个组的成员可以吸附到另一个组的成员,但一般来说,它们倾向于在自己的组内吸附。特别地,节点和句柄从不吸附到边界框(尽管它们可以吸附到路径上)。

吸附条底部的最后一部分控制所有三个组的主要吸附目标:页面边缘(2.3),网格(7.2)和引导线(7.1)。这些按钮仅影响吸附;与|和#键不同,它们不会隐藏网格或引导线。

在吸附条按钮的图标中,蓝色用于表示可吸附对象(即能够吸附的对象,通常是点),而绿色则表示吸附目标(即吸附的目标,通常是线条或点)。如果同一种实体既是吸附目标又是可吸附对象,它的按钮图标会使用绿色。(唯一例外的是网格和引导线图标,它们是吸附目标,但通常使用蓝色。)

让我们来看一下三种类型的可吸附对象和吸附目标。

7.3.1.1 边界框吸附

如果您只需要对齐整个对象,而不关心节点或其他特殊点,请使用边界框吸附,如图 7-9 所示。

图 7-9:边界框吸附选项

本组中的第一个按钮(图 7-8)是本地主开关。禁用它会禁用整个组,这样您就不再需要担心吸附到边界框或从边界框吸附。

接下来,按钮按顺序控制:

  • 吸附目标:边界框的边。启用后,所有对象(无论是否选中)的边界框边缘将作为吸附指南。

  • 吸附目标和可吸附对象:边界框的角。启用后,拖动选择工具中的任何对象时,选择框的角将吸附。图 7-10 显示了启用这两个按钮并将一个椭圆拖近另一个椭圆时发生的情况。

    图 7-10:将边界框角吸附到边界框边

    当吸附发生时,Inkscape 会在吸附点闪烁一个十字标记,并提供一个有用的提示。如果您吸附到的边界框是未选中对象的边界框,它还会暂时显示为一个红色虚线框。

  • 吸附目标和可吸附对象:边界框边缘的中点(每个框四个)。可以将其视为吸附对象的中心轴线;对于围绕该轴对称的对象来说,这最为合理。

  • 吸附目标和可吸附对象:边界框的中心。启用此选项后,您可以轻松将中心对称的对象吸附到对称的布局中。

当您同时有一条线和该线上的一个点作为吸附目标(例如边界框的边和其中点)时,当您接近该点时,点目标会覆盖。否则,您将吸附到该线的最近点(并轻松沿其滑动)。

7.3.1.2 路径和节点吸附

第二组按钮(图 7-8)控制路径节点的吸附(12.1),如您在节点工具中编辑时所示,和梯度/图案句柄的吸附(10.1,10.8),这些句柄可以在梯度工具和其他工具中进行编辑。

图 7-11:路径和节点吸附选项

再次说明,本组中的第一个按钮作为整个组的本地主开关;当它关闭时,本组中的所有其他按钮将变为灰色。

接下来,按钮按顺序控制:

  • 吸附目标:路径。您可以在绘图中的任何路径上吸附和滑动一个节点(路径不需要被选中),但除非激活以下按钮之一,否则您不会吸附到路径上的点。

  • 吸附目标:路径交点。两个路径交叉的点,或单一路径与自身交叉的点。

  • 吸附目标和可吸附对象:尖角节点(12.5.5),如路径上的角。

  • 吸附目标和可吸附对象:平滑节点(12.5.5),如椭圆上的象限点。

  • 吸附目标:直线段的中点

7.3.1.3 “其他所有”吸附

吸附控制栏的第三部分(图 7-8)包括所有其他未被其他类别覆盖的内容。请注意,尽管工具提示中说如此,渐变节点的吸附实际上是在前面的节点吸附部分(7.3.1.2)中控制的;您不能吸附渐变节点,如图 7-12 所示。

图 7-12: “其他所有”吸附选项

在这一节中,第一个按钮是本地主开关。接下来,按钮按顺序控制:

  • 可吸附对象:对象的中心。只有对称形状,如星形/多边形(11.5)和椭圆(11.4),才有定义的中心;在一般情况下,这个中心与边界框的中心不同。

  • 可吸附对象:变换的固定点(6.4)。

  • 可吸附对象:文本对象的锚点(15.4.4)。

7.3.2 吸附偏好设置

在文档属性对话框的吸附选项卡(图 7-13)中,您可以调整吸附距离——即必须接近吸附目标的距离,才能触发吸附。您可以为吸附到对象(包括边界框、路径和节点)、网格和参考线分别设置这些距离(按文档存储)。

对于网格,默认设置是始终吸附——也就是说,任何距离下都会发生吸附(对于网格来说,吸附距离不可能超过网格间距)。如果您缩小了视图且一些网格线被隐藏(7.2),吸附只会发生在可见的网格线上。

对于对象和参考线,吸附默认在距离为 20 屏幕像素或更近时触发。使用屏幕像素单位可以确保吸附效果独立于缩放;如果您希望将可吸附对象移动到接近吸附目标的位置,但避免吸附,可以在更高的缩放级别下进行操作。

您还可以控制是否将路径吸附包括裁剪路径和遮罩(18.3),如图 7-13 所示。

图 7-13:文档属性中的吸附选项

全局偏好设置对话框(3.1.1)也有一个行为▶吸附页面,如图 7-14 所示。

图 7-14:偏好设置中的吸附选项

  • 吸附指示器(默认开启)是一个十字标记和文本标签,会在画布上闪烁,告诉您刚才吸附到了什么(图 7-10)。它们会在每次吸附发生时弹出,并在吸附指示器持续时间延迟后消失,您可以调整此延迟(默认情况下为 2 秒)。

  • “仅吸附最接近指针的节点”告诉 Inkscape 忽略你可能正在拖动的所有其他节点,除了与鼠标指针最接近的那个。例如,如果你打算吸附矩形的一个角,只需抓住矩形的那个角进行拖动——此时,其他三个角不会妨碍你。这减少了在复杂文档中可能非常分散注意力的“吸附噪音”。如果启用此选项(默认情况下是关闭的),Inkscape 会在你拖动时,在最接近可吸附节点的位置显示一个圆形标记。

  • 权重因子是另一个参数,用来控制当多个拖动点距离目标足够近时,Inkscape 会选择哪个点进行吸附。如果设置为 0,Inkscape 会吸附距离目标最近的点,而忽略鼠标指针的位置。设置为 1 时,与上面描述的“仅吸附最接近指针的节点”选项相同:现在,在所有“想”要吸附的节点中,吸附会发生在距离指针最近的节点上(这可能与距离目标最近的节点不同)。0 和 1 之间的值可以让你平衡这两种吸附策略。

  • 延迟是指在你的鼠标指针停止后,Inkscape 等待的时间(秒数),然后进行吸附。增加此值会使吸附更“迟疑”——如果你的文档很复杂并且启用了多个吸附模式,使得所有对象都想吸附到其他对象,这可能会是一个好方法。在这种情况下,增加延迟并减少吸附距离可以使你的工作更轻松。

7.4 对齐

对齐与吸附一样,是将对象放置到精确位置的方式。与吸附不同的是,它不是交互式的:你只需选择对象,选择一个命令,所有对象会一次性移到目标位置。对齐命令被收集在强大的“对齐和分布”对话框中(Shift-Ctrl-A 或从菜单选择“对象 ▶ 对齐和分布”)。

现在我们先来看看对话框中的对齐部分(图 7-15)。

图 7-15:对齐对象

要理解对齐对话框中的多个按钮,请观察以下内容:

  • 顶排按钮通过水平移动对齐对象;底排按钮则通过垂直移动对齐对象。

  • 所有对齐按钮都是相对于锚定框来移动对象的;使用“相对”列表来确定这个锚定框是什么。默认情况下,适用于大多数情况的是“选择区域”——即所有选定对象的组合边界框。你也可以选择其中一个被选中对象的边界框(第一个或最后一个被选中的,或者最大或最小的那个),以及整个页面或整个绘图的边界框。

    例如,如果你有一组小对象并且想将它们对齐到一个大背景对象的顶部,选择所有对象并在“相对”列表中选择最大对象

  • 在这组按钮的中间,两排中的两个按钮将所选对象的中心对齐到锚框的水平中心(顶部行)和垂直中心(底部行)。围绕这两个按钮的是四个按钮,它们将对象压到锚框内部的边缘。这六个按钮可能是整个对话框中最常用的。剩下的四个按钮,分别位于左侧和右侧,对齐对象到锚框的边缘,但在外部

  • 右端的两个按钮——带有字母的按钮——仅适用于文本对象。每个文本对象都有一个基线原点(见 15.4.4),这些按钮通过这些点对所选文本对象进行对齐。如果你将文本对象作为普通对象通过其边界框进行对齐,那么带有和不带有下行部分(例如字母 y 的底部笔画)以及上行部分(例如字母 d 的竖直部分)的字符将无法保持在同一行,如图 7-16 所示。

    图 7-16:对齐文本对象

7.4.1 通过手柄对齐

默认情况下,在选择工具中对选择项进行第二次点击(或者,按下 Shift-S)会将屏幕上的手柄从缩放模式切换到旋转模式,再切换回来(见 6.3)。如果对齐是你经常使用的功能,你会喜欢可以启用一个第三模式——对齐模式,该模式包含在点击或 Shift-S 循环中,如果你在对齐和分布对话框中切换启用画布内对齐手柄按钮(位于“相对”下拉菜单的左侧)。

确保启用画布内对齐手柄按钮已开启,选择一些对象,然后点击选择项两次(不要双击)或按两次 Shift-S。第一次点击/按键切换到旋转模式,第二次切换到具有独特手柄的对齐模式。现在,要将所有选中的对象相对于选区的边界框对齐,只需点击或 Shift+点击九个手柄中的一个。图 7-17 展示了这一操作的效果。

图 7-17:通过画布上的手柄对齐对象(双击选择项以获取对齐手柄)

7.5 分布

分布所选对象时,会将它们移动,使得如果按照某种方式测量它们之间的间隔,则这些间隔变得相等。相同的对齐和分布对话框中有八个对象分布按钮和两个文本分布按钮,它们在测量这些间隔的方式上有所不同。与对齐按钮一样,这些按钮的一半(顶部行)用于水平移动,另一半(底部行)用于垂直移动(见图 7-18)。

图 7-18:分布对象

在对齐部分的居中按钮下方,分布部分有两个按钮用于分布中心。这些按钮通过使所选对象的中心(更精确地说,是它们的边界框中心)在水平方向或垂直方向上保持相等的距离,从而移动对象。

这两个按钮的右侧和左侧,另外四个按钮执行相同的等间距分布,但作用于边界框的左右、上下两侧。

右侧再有两个按钮,它们不均衡距离相同名称的边界框边缘,而是使它们之间的间隙相等。例如,在水平间隙均衡化中,从一个对象的右边缘到下一个对象的左边缘的距离将变得相同。当对象宽度不同的时候,这可能比均匀分布它们的中心更加符合视觉效果。图 7-19 展示了分布对象中心和均衡间隙之间的区别。

图 7-19:分布对象中心与均衡它们之间的间隙

最后,最右侧的两个按钮分布所选文本对象的基线原点。

与对齐按钮不同,分布按钮始终使用所选对象的边界框作为锚框(也就是说,相对选择不会影响对话框中的分布部分)。换句话说,分布始终保持选择的边界框不变,因为它从不移动最左边和最右边(水平)或最上边和最下边(垂直)的对象,只移动它们之间的对象。(这一点的后果是,分布仅适用于选择三个或更多对象。)

所以,如果在分布后发现对象过于密集或稀疏,只需选择分布边缘的一个对象并将其向内移动(使其更密集)或向外移动(使其更稀疏)。然后,重新选择所有对象,再次进行分布。

请注意,选择的对象可能会重叠,无论是在分布之前还是之后。即使在均匀间隔时,对象的边缘也可能会重叠;这种重叠被视为负间隙,当点击按钮时,它们仍然会相互均等。换句话说,当空间不足时,相邻的对象会按相同的量重叠。

当你使用节点工具时(12.5),对齐和分布对话框显示四个按钮,允许你在水平方向或垂直方向对所选路径节点进行对齐或分布(图 7-20)。

图 7-20:对齐和分布路径节点(在节点工具中)

7.5.1 交换位置 [1.1]

到目前为止描述的所有基本对齐和分布命令有一个共同点:它们只在一个维度上工作——要么是水平方向,要么是垂直方向。然而,相同的对齐和分布对话框中还有一些更有趣的命令,可以在两个维度上同时移动对象。

一个常见的操作是交换位置。对于两个对象,这将把对象 A 的中心移到 B 的中心所在的位置,反之亦然;对于多个对象,这将把 A 移到 B 的位置,B 移到 C 的位置,以此类推,直到 Z 跳到 A 原本的位置。

该对话框有三个按钮来实现这一简单概念的变体(图 7-21)。它们在两个选中对象时的功能完全相同,但在选中两个以上对象时,它们决定 A、B、...、Z 顺序的方式不同。

图 7-21: 交换多个选中对象的位置

选择顺序

A 是最后选中的对象;Z 是第一个选中的对象。

Z-order(4.4)

A 是最上面的对象;Z 是最下面的对象。请注意,这个命令交换位置时不会影响 z-order;如果你想在不改变位置的情况下反转对象的 z-order,请使用 Restack 扩展(见图 4-6)。

顺时针顺序

Inkscape 按照从选择中心看过去并顺时针排列的顺序对选中的对象进行编号。可以把你的对象想象成时钟上的数字。点击这个按钮将使 12 移动到 1 的位置,1 移动到 2 的位置,依此类推,直到 11 移动到 12 的位置。

7.5.2 随机化与去聚集

随机化仅仅是将每个选中的对象移动到选择框内的一个随机位置。每次点击按钮都会产生一个新的随机位置——你可以重复这个操作,直到找到你喜欢的随机化效果,如图 7-22 所示。

图 7-22: 随机化对象位置

去聚集类似于均匀化间距,但它同时在两个维度上工作,试图使所有相邻对象对之间的最近距离均衡化。对于大量对象,这个操作效果最好,如图 7-23 所示。

图 7-23: 去聚集对象

去聚集是一个迭代操作,因此你可能需要重复使用它,直到对结果满意。它不会完全替代当前的排列,而是通过小步改善它,使每个对象朝着一个与其相邻对象等距的位置移动(这些相邻对象也会移动)。这一过程最明显的结果是减少了聚集——即对象过于密集的地方。

在大多数情况下,迭代去聚集会收敛——也就是说,它减少了对象分布的视觉不均匀性,使得每一次去聚集的效果逐渐减小。某一时刻,再次尝试去聚集已经去聚集的对象群时,反而会让它们缓慢地以随机方向分散和迁移,而不会改善均匀性。

去除聚集的对象会产生一种同时看起来既随机又人工的纹理。这类似于一个人在被要求用随机点填充空间时的效果。这种纹理的例子包括圆点图案(10.8.4)和点刻印,其中阴影是通过平滑地(没有聚集)变化散布点的密度来创建的。

7.5.3 移除重叠

与去聚集不同,移除重叠是一种确定性操作。它会以每个选定对象所需的最小距离移动对象,以确保所有对象不再重叠——通常第一次尝试就会成功(我说“通常”是因为一般来说,这不是一个简单的操作,有时可能会失败)。当然,移动的量取决于初始排列,但在大多数情况下,即使它可能进行了大幅度的重新排列以释放对象,操作后的对象布局仍会与原始布局相似。

对于此命令,你还可以设置添加到对象边界框的水平和垂直间距(单位为px),如图 7-24 所示。

图 7-24:移除对象间的重叠

注意,未与任何其他选定对象重叠的对象没有移动。

另一个对话框中的按钮,连接器网络布局,应该能够将用连接器工具(14.5)制作的图表重新排列得更加整齐。理论上,这应该会移动连接的对象,从而最小化连接线的长度和/或交点;但实际上,这个命令的效果看起来与普通的移除重叠一样。

7.5.4 排列对象

即使在对齐和分布对话框中有这么多选项,你可能仍然会有一些未填充的对象排列需求。排列对话框(可以从“对象”菜单中访问)可以满足其中两个需求:它将把你的对象排列成二维表格或圆形,提供丰富的间距和对齐选项(正如你从 Inkscape 中预期的那样)。

这个对话框对于你已经拥有的不同对象最为有用,比如你想要排列成画廊的导入位图。如果你只需要排列一个相同对象的模式、表格或网格(或者仅在大小或样式上有所不同的对象),请查看克隆瓷砖工具(16.6)。

7.5.4.1 网格排列

对话框的矩形网格标签页(图 7-25)会根据选定对象的数量计算出最紧凑的表格行数和列数(使行数尽可能接近列数)。如果你更改其中的任何一个数字,另一个数字会重新计算。例如,如果选中了 29 个对象,系统会建议 5 行 6 列;如果你增加行数,行数和列数会减少——你将得到 6 行 5 列、8 行 4 列、10 行 3 列,等等。

图 7-25:使用“排列”对话框创建对象网格

接下来,两个复选框控制是否所有行和所有列将具有相等的高度和宽度。启用“等高”时,整个网格中的所有行将与所有对象中最高的对象一样高(加上间距,见下文)。如果禁用,则每一行的高度仅与该行中最高的对象一样高(加上间距)。请注意,即使禁用“等宽”和间距为零,如果列中最宽的对象恰好不在相邻的单元格中,你的对象在网格中也不一定会相触。

在下方,一组按钮选择每个对象的哪个点对齐到网格中。这是你控制对象在行列中的对齐方式;默认情况下,它们在两个维度上都居中。

剩下的控件定义了网格的大小。启用“适配选择框”选项可以确保排列后的宽度和高度与点击“排列”之前的选择区域完全一致。换句话说,创建网格后,Inkscape 会设置行列之间的间距,以确保选择区域的总体尺寸不发生变化(即使这会导致重叠)。例如,如果你想让网格更稀疏,撤销排列,拖动其中一个对象远离其他对象,重新选择所有对象,启用适配选择框,然后再点击排列。或者,你可以通过输入所需的值并选择单位来显式设置行列的间距。

网格排列的最大问题是每个对象的行/列位置有些不可预测。即使你的对象已经大致排列成一个表格,你只是想将它们对齐,使用这个对话框可能会让一些对象重新排布到明显错误的位置。如果你试图通过交换几个对象的位置来修正这个问题,可以尝试在“对齐与分布”对话框中使用对象交换命令。

7.5.4.2 在圆形中排列

“排列”对话框的另一个标签“极坐标”让你将多个对象排列到一个圆形或椭圆形的环上,彼此之间的角度距离相等。例如,选择六个对象时,你将得到一个六边形,如图 7-26 所示。

图 7-26:使用“排列”对话框创建对象网格

你可以选择每个对象的哪个点与圆形对齐;默认情况下,它是中心,但你可以切换到边界框的任意一个角或中点,也可以使用每个对象的旋转中心(即固定点,6.4)。至于你要排列的圆形,它可以是选择中的实际圆形、椭圆或弧形(11.4),或者你可以切换到“参数化”并通过坐标指定排列指南。最后的选项选择对象在放置到其位置时是否旋转(默认情况下),或者不旋转地移动。

第八章:样式:颜色和不透明度

现在你已经了解了如何选择和变换对象,接下来我们将开始一个新话题,这将贯穿接下来的几个章节:样式。一个 Inkscape 文档中对象的外观是由该对象的样式决定的,样式由多个属性组成。要使用 Inkscape,你需要熟悉至少一些样式属性以及用于编辑它们的工具。

在本章中,我将介绍最基本的样式属性,包括常见的填充类型(用于填充和描边)和不透明度。之后,第九章将介绍描边样式,第十章讨论渐变、网格和模式,第十五章将描述文本样式属性。滤镜效果,如模糊,也属于对象的样式;我将在第十七章中讨论这些内容。

在所有其他命令之前,值得了解一个与样式相关的命令,即编辑▶粘贴样式(Shift-Ctrl-V)。它会将你最后复制到剪贴板上的对象的完整样式应用于所有选中的对象。你常常希望某些对象在样式上大体相同,但又不完全一样。将相同的样式粘贴到所有对象上,然后再更改需要不同的属性,这要比逐个对象调整要简单得多。另外,你已经学会了如何通过样式属性来搜索对象(5.13),以及如何选择与选定对象样式相同的对象(5.12)。

8.1 样式属性和选择器 [1.1]

Inkscape 有许多对话框、命令和工具,处理对象的样式;你可能已经在使用其中的一些。但是,在查看任何特定样式属性或工具之前,我们先谈谈样式是如何在 SVG 中编码的。如果你对技术细节不感兴趣,可以跳过这一节。

对象样式在文档的 SVG 代码中是如何记录的,并没有被 SVG 标准定义;为此,SVG 重用了另一个标准,称为Cascading Style Sheets (CSS)。如果你曾做过任何 HTML 编码,那么你可能已经熟悉 CSS,因为 HTML 也使用 CSS。(SVG 只使用 CSS 的一个子集;有关详情,请参考w3.org/TR/SVG以及附录 A。)

在 CSS 中,样式是一个由命名的属性组成的集合。每个属性都有自己可以接受的值的规则。如果你曾浏览过 Inkscape 的 XML 编辑器中的对象(4.10),你可能会注意到大多数对象上都有style属性,它看起来像是由分号分隔的name:value对的列表。每一对这样的键值对定义了一个属性。例如,fill指定填充颜色(8.2),stroke-width用于描边路径,或者font-family用于文本对象。

如果你想在 CSS 属性层面编辑样式,XML 编辑器并不太方便。用于编辑样式的专用工具是选择器和 CSS 对话框(Ctrl-Shift-Q),如图 8-1 所示。在这里,你不仅可以编辑对象的属性,还可以创建选择器——适用于多个对象的样式,使你能够一次性更新所有对象。

图 8-1:选择器和 CSS 对话框,显示选中对象的样式以及文档中定义的选择器

对话框的前半部分(你可以将对话框的两个区域垂直或并排排列)处理选中对象的样式。即使你不使用任何高级功能,你也可以方便地编辑选中对象样式的所有属性。Inkscape 会提示你可用的属性名称,并验证你输入的值。列表顶部的 + 按钮添加新属性;属性旁边红色圆圈中的 x 删除该属性。

魔法开始于你点击对话框左下角的 + 按钮。这将创建一个新的选择器,并提示你为其命名。你可以将选择器视为类似于 CSS 类:它是一个元素集合和应用于这些元素的样式。最初,只有选中的对象在选择器中,且该选择器没有自己的样式属性。要将更多对象添加到选择器中,选择它们并点击你想应用的选择器旁边的 + 按钮。

一个对象可以属于多个选择器;例如,在图 8-1 中,text759(每个对象通过其id属性进行标识,4.1)包含在textsgrays选择器中。顺便说一下,当你点击对话框中的选择器名称时,其对应的对象会在画布上被选中——即使你不使用选择器样式,这个对话框也能帮助你“存储”复杂的选择。

要向选择器添加样式属性,选择其中的任何对象,并点击对话框顶部(或左侧)与对象样式相关的选择器名称旁边的另一个 + 按钮。你在此处提供的任何值将应用于该选择器中的所有对象,覆盖它们在各自样式中可能具有的相同属性值。在图 8-1 中,texts选择器具有属性font-family: 'times new roman',而grays选择器包含fill: #a9a9a9(灰色)。被选中的对象text759同时包含在这两个选择器中,因而它既有灰色填充,又使用了 Times New Roman 字体。

8.2 涂料

如你所知,对象可以有填充描边,它们分别应用某种类型的涂料。可以说,一个对象被一种涂料填充,另一种涂料描边。涂料可以有几种不同的类型。

无(无涂料)

填充设置为none的对象只有描边,而描边设置为none的对象只有填充。如果填充和描边都设置为none,该对象完全不可见(并且无法通过点击选择,5.4),就像其透明度为零一样。

纯色

这是最常见的绘制类型:纯色。稍后在本章中,你将看到多种查看和更改填充和描边颜色的方法。

渐变、渐变网格或图案

填充和描边都可以具有各种类型的平滑颜色渐变、渐变网格或重复模式。这些复杂的绘制类型是另一个章节的内容(第十章)。

颜色样本

颜色样本是你可以分配给多个对象的平面颜色(作为填充或描边),这样当你编辑它时,所有使用该颜色样本的对象都会更新。颜色样本属于其创建的文档,并与文档一起保存。颜色样本是在填充和描边对话框中创建和编辑的,但它们也会列出并可以从自动调色板中应用(8.5.1)。这个功能使用起来仍然有些笨拙;另外,在 SVG 中,颜色样本被编码为一个假渐变,这不太自然。如果你需要可重复使用的样式,建议使用 CSS 选择器(8.1)。

未设置

这意味着填充或描边未指定,因此可能会继承自对象的祖先(在文档的 XML 树中位于其上方的对象);这与none(仅强制不可见)不同。如果一个对象的祖先没有自己的描边或填充(通常对于组或图层来说是这样),则未设置填充或描边的对象将采用 SVG 默认值:不可见的描边和实心黑色填充。未设置在克隆(第十六章)中很有用,因为它允许你创建与原始对象不同的克隆。

用于编辑对象样式的主要工具是填充和描边对话框(Shift-Ctrl-F),它的填充和描边面板上有许多按钮,分别对应不同的绘制类型。按下的按钮表示当前选中对象的绘制类型;如果选中了多个具有不同绘制类型的对象,则没有按钮被按下,且对话框会显示“多个样式”。

另一个重要的控制是状态栏中的选中样式指示器(2.8)。它始终显示在屏幕上,允许你快速查看选定对象的绘制类型,并通过右键菜单更改:右键点击顶部的填充样本以更改填充颜色,右键点击底部的描边样本以更改描边颜色(图 8-2)。

图 8-2:选定描边指示器(左)和填充与描边对话框(右)中的绘制类型

一个仅适用于填充而不适用于描边的重要属性是填充规则。它可以取两个值。evenodd表示任何自交或内部子路径(12.1.1)会在路径的填充中创建孔洞。nonzero表示大多数孔洞会被填充;更精确地说,如果内层子路径与外层子路径方向相同,孔洞将被填充,否则它将是一个未填充的孔洞。

要更改填充规则属性,可以使用填充和描边对话框中的两个切换按钮,如图 8-3 所示。

图 8-3:在填充和描边对话框中更改填充规则

并非所有对象类型都能或应该具有填充和描边:

位图

位图对象(第十八章)不能具有填充或描边。然而,你可以将位图转换为一个由该位图填充的矩形路径作为图案(只需按下 Alt-I),然后可以为其应用描边。

你通常不需要单独为一个组设置填充或描边,因为组内的对象通常会有自己的绘制方式,并会忽略其父组上设置的内容。事实上,如果你尝试在 Inkscape 中为一个组设置填充或描边,它会在组上设置这些属性,但同时也会递归地将它们赋给该组的所有成员。只有显式取消设置了组成员的填充或描边,它们才会被忽略;然而,它们仍然会从祖先继承新的填充或描边。

克隆

如果你尝试为克隆对象(第十六章)设置填充或描边,除非该克隆的原始对象的填充或描边被取消设置,否则不会产生可见效果。

8.3 不透明度

在填充或描边绘制的基础上,一个对象还可以有不透明度,你可以在状态栏的 O: 字段中或通过填充和描边对话框中的不透明度滑块进行编辑。与滤镜(第十七章)类似,不透明度适用于整个对象,填充和描边没有区别。

事实上,在 SVG 中,一个对象可以有三种不透明度:主不透明度(在大多数 UI 界面以及本书中通常称为不透明度),填充不透明度,和描边不透明度(图 8-4)。后两种不透明度仅适用于填充或描边,而 Inkscape 允许你查看并修改它们,但一般不鼓励使用它们,而是倾向于使用主不透明度。实际中,需要填充透明而描边不透明,或反之的情况并不常见;在大多数情况下,使用主不透明度更加自然且易于操作。

图 8-4:填充不透明度、描边不透明度和主不透明度

降低描边不透明度的一个后果是,你可以看到对象填充的边缘,通常被其自身的描边所遮挡。根据 SVG 规则,描边通常绘制在填充上方(在对象自己的内部 z 顺序中;但请参阅 9.6),填充被描边的中线所限制,因此,在半透明描边的情况下,你将看到三个不同的边界:描边的外边界、描边的中线(填充从此开始)以及描边与填充重叠的内边界。

主不透明度与描边不透明度不同,它没有这种问题——它适用于整个对象,而不会暴露任何杂乱的边缘。同样,当应用于一个组时,它使整个组变得透明,这可能与为组内每个单独对象分配相同不透明度的效果不同(图 4-10)。

此外,与填充或描边不透明度不同,主不透明度适用于没有自己填充或描边的对象,例如位图和大多数克隆。

8.4 颜色模型

样式的最重要构建块是颜色。讨论颜色如何在计算机上表示可以轻松填满一本书;Inkscape 可能不是最强大的颜色程序,但在这个领域,它仍然相当丰富和复杂。

在处理颜色时,第一步是选择颜色模型。Inkscape 支持几种流行的颜色模型,它们以不同方式表示相同的颜色。

8.4.1 RGB

在最常见的颜色模型RGB中,每种颜色都被表示为红色、绿色和蓝色成分或通道的混合。这种模型几乎被所有计算机显示器实现(显示器通常由这三种颜色的小型光源组成),也是 SVG 以及大多数其他计算机图形格式中使用的主要颜色模型。

根据你使用的软件,RGB 颜色中每个通道的值可以是 0 到 1 之间的分数值(例如 0.5),也可以是 0 到 255 之间的整数(例如 127)。这两种系统是等价的;例如,R = 0,G = 0.5,B = 1.0 的颜色与 R = 0,G = 127,B = 255 的颜色是相同的。Inkscape 通常使用 0-255 的整数格式,我在本书中也倾向于使用这种格式;然而,在 Inkscape 的某些界面部分,你会看到整数格式和分数格式之间的选择。

在 RGB 模型中,通道的值越高,颜色就越亮;值越低,颜色越暗。因此,RGB 0/0/0 是纯黑色,RGB 255/255/255 是纯白色。任何 RGB 颜色,其中所有通道的值相等,都是一种灰色;使通道值不等会增加颜色的饱和度,通道值不等的差距越大,饱和度越高。因此,像纯红色(RGB 255/0/0)或纯黄色(RGB 255/255/0)这样的颜色具有最大的饱和度。

填充和描边对话框允许您使用数字输入字段或在带有渐变颜色槽的滑块中移动来编辑 RGB 颜色(请参见颜色插图中的图 2)。请注意,随着您移动滑块,槽的颜色会发生变化;每个槽显示当其他滑块保持不动时,您通过在该槽内移动滑块可以获得的颜色。底部的第四个滑块标记为 A(alpha),表示填充或描边的不透明度(因此严格来说,它不属于颜色的一部分)。

RGB 颜色通常以RRGGBB格式表示,其中每个分量由两位十六进制数字(基数为 16,而不是常规的基数 10)表示。十六进制数字可以使用数字09以及字母AF。每个通道的最大整数值——十进制的255——在十六进制中为FF。例如,000000是黑色,FFFFFF是白色,660000是深红色。这种表示颜色的形式在 Inkscape 文档的 SVG 源代码中使用,也在许多其他软件和语言中使用(如 HTML)。例如,当您从选定样式指示器的填充或描边样本的右键菜单中选择复制颜色时(见图 8-2),颜色的RRGGBB表示将被复制到剪贴板。您还可以在填充和描边对话框的 RGBA 字段中查看和编辑RRGGBBAA表示(在原有的基础上增加了两个数字,表示填充/描边的不透明度)。

如果选择了多个具有不同填充或描边颜色的对象,填充和描边对话框以及选定样式指示器将显示平均颜色。如果更改该平均颜色,它将被重新分配给所有选定的对象,从而有效地将这些对象可能具有的任何颜色差异“压平”,如图 8-5 所示。

图 8-5:选定样式指示器中的平均颜色

8.4.2 CMYK 与 CMS

与 RGB 类似,在CMYK模型中,颜色是通过混合颜色通道获得的。然而,CMYK 并不只有三个,而是有四个通道:青色品红黄色黑色(参见颜色插图中的图 3)。这种颜色模型最适用于印刷输出,因为许多专业打印机和印刷机使用 CMYK。然而,即使在指定 CMYK 颜色时,写入 SVG 的仍然是其 RGB 近似值,从 CMYK 转换为 RGB 并反向转换通常会引入失真,因为并非所有 CMYK 颜色都能精确地在 RGB 中表示,反之亦然。

填充和描边对话框的 CMS(颜色管理系统)选项卡允许您在校准空间中编辑颜色,该空间可能包括真正的校准 CMYK(而不是 CMYK 选项卡的近似值)或 Adobe RGB。此操作需要您在输入/输出▶颜色管理的首选项中设置颜色管理(18.8)。

8.4.3 HSL 与 HSV

RGB 和 CMYK 都不是非常直观的,它们代表的是计算机和打印机处理颜色的方式,而不是艺术家使用颜色的方式。Inkscape 提供了一种更自然的颜色模型:HSL(色相、饱和度、亮度)。与 RGB 和 CMYK 不同,HSL 的各个通道并不是混合在一起的单独颜色;相反,它们是定义颜色的属性,这些属性共同定义了颜色,毫不含糊。

色相通道是最大饱和度的彩虹色,从红色开始,经过黄色、绿色、蓝色、紫色,再回到红色。饱和度通道将颜色从最大色彩度、经过灰暗和单调,到纯灰色——在相同亮度级别下进行定位。最后,亮度通道从黑色到给定颜色,再到白色;这意味着任何最大亮度的颜色都是白色,任何零亮度的颜色都是黑色,无论色相和饱和度如何。

一旦你习惯了 HSL 颜色模型,它会变得非常直观。当你觉得某个颜色不太对时,你可能会认为它需要变得更亮或更少饱和——而不是认为它需要更多的红色或绿色。在 Inkscape 中,许多与颜色相关的工具更倾向于使用 HSL 来选择和改变颜色。

在填充和描边对话框中,有两个选项卡允许您在 HSL 模型中编辑颜色(见色彩插图中的图 4)。第一个选项卡(HSL)使用传统的线性滑块。另一个选项卡(Wheel)为 H 通道提供了一个圆形环(因此它有更好的分辨率:如果展开,它会比适合窗口的线性滑块更长),并且有一个三角形来表示饱和度和亮度通道。旋转色相环上的标记也会旋转三角形,使得它的最大饱和度尖端始终指向环上的当前色相。

Inkscape 还支持一种类似的颜色模型,叫做HSV(色相、饱和度、明度)。其他程序可能称之为 HSB(色相、饱和度、亮度)。它与 HSL 的唯一区别在于,HSV 中的明度组件仅在黑色和给定颜色(例如红色)之间变化。要在 HSV 中获得纯白色,您需要将明度设置为最大值并且饱和度设置为零。而在 HSL 中,亮度组件从黑色一直变化到给定颜色,再到白色,因此它在亮度和暗度方面是对称的。

8.5 调色板

给选定对象的填充或描边赋色的最简单方法是点击调色板中的一个色板,通常位于编辑窗口底部,状态栏上方(见色彩插图中的图 5)。单击可为选定对象分配填充颜色;Shift+单击则分配描边颜色。调色板最左侧的按钮移除填充或(按 Shift 键时)描边。

除了点击之外,你还可以将颜色从调色板拖放到对象上。这是更改对象的少数几种方式之一:当你将颜色拖放到对象上时,只有该对象会改变,即使它没有被选中,甚至如果其他对象被选中。拖放也适用于更改描边颜色:只需将颜色色板精确地拖到路径或形状的轮廓上。

Inkscape 自带许多默认调色板。在调色板的右端,有一个带三角标记的按钮;点击它可打开一个菜单,列出可用的调色板——例如网页安全调色板、Ubuntu 和 Windows 用于其 UI 的调色板,以及各种单色调色板(绿色、金色等)。

在同一菜单中,你可以选择色板的标准大小宽度(窄色板较难点击,但可以通过使整个调色板适应屏幕宽度,去掉调色板的滚动条),以及启用色板的环绕(这样可以让调色板变得更高,但也去除了滚动条)。此外,如果你喜欢,你可以开启调色板色板周围的边框。

除了始终停靠的水平调色板,Inkscape 还具有色板对话框(Shift-Ctrl-W),如图 8-6 所示。

图 8-6:调色板菜单(左)和色板对话框(右),以列表格式显示颜色及其名称

它拥有所有相同的调色板和大小选项,唯一不同的是它增加了一个列表选项,在其中列出所有颜色及其名称。作为一个对话框,它可以浮动在你需要的位置,或者停靠在右侧并压缩成一个窄的垂直条。

8.5.1 编辑调色板

每个 Inkscape 调色板都是一个简单格式的文本文件,你可以进行编辑。如果你创建了一个新的调色板并希望 Inkscape 使用它,请进入首选项系统页面,点击用户调色板旁边的打开按钮。这将打开一个文件夹,你可以将调色板文件放入其中;下次启动时,Inkscape 会将其添加到调色板列表中。

Inkscape 的调色板格式与 GIMP 的位图编辑器格式相同,因此你可以将 GIMP 发行版中的任何调色板放入该文件夹中,以便在 Inkscape 中使用它们。以下是默认调色板文件 inkscape.gpl 的开头;颜色成分(R,G,B)采用 0–255 格式:

GIMP Palette
Name: Inkscape default
Columns: 3
# generated by PaletteGen.py 0   0   0  Black 26  26  26  90% Gray 51  51  51  80% Gray 77  77  77  70% Gray
...

预定义调色板列表中的“自动”选项允许你创建一个与当前文档一起保存的自定义调色板。要添加或编辑“自动”调色板中的颜色,你需要在填充和描边对话框(8.2)中创建一个色板。

8.6 选定样式指示器:绘制命令

除了各种绘制样式外,选定样式指示器的右键菜单(图 8-2)还有一些处理绘制的有用命令。请注意,填充色板(上方)和描边色板(下方)是不同的,尽管它们的上下文菜单类似;请确保右键点击你想要更改的部分。

编辑填充/描边...

选择此项,以及简单地点击填充或描边色板,会打开填充和描边对话框。

最后设置的颜色

这将最后设置的颜色分配给所选项的相应绘制颜色(即填充或描边)。例如,如果你刚刚为某个对象涂上了特定的蓝色,并且现在想要所有对象都有这个填充颜色,选择所有对象并通过填充色板的右键菜单调用此命令。

最后选择的颜色

这会将所选对象的相应颜色(即填充或描边)赋给在最近一次选择更改之前选定的对象。例如,选择一个你喜欢的填充颜色的对象,然后选择另一个对象,使用此命令在其填充色板上应用相同的颜色。

反转

这将通过颜色的(RGB)反转替换平面颜色的填充——例如,白色变为黑色,黄色变为蓝色。

白色和黑色

这些命令只是将那些颜色分配给绘制颜色。

复制颜色和粘贴颜色

这些命令允许你通过系统剪贴板交换对象的颜色。例如,你可以复制一个对象的描边颜色并将其分配给另一个对象的填充,或者将颜色(作为#RRGGBB字符串)粘贴到任何其他需要它的程序中。

交换填充和描边

此命令交换选定对象的填充和描边颜色。例如,如果选定的对象没有描边且填充为蓝色,应用此命令后,它将具有蓝色描边并且没有填充。当你使用铅笔工具(14.1.2)和书法笔工具(14.2)进行绘图时,并希望结果使用相同的颜色,尽管铅笔工具创建的是没有填充的描边路径,而书法笔创建的是没有描边的填充路径时,这个命令非常有用。

取消填充/描边

使填充或描边未设置(8.2)。这与删除它不同。

删除填充/描边

将填充或描边设置为(8.2)。此命令有一个快捷方式:中键点击填充或描边色板,将相应的颜色设置为;如果颜色已经被移除,中键点击会创建默认的填充或描边(通常为黑色)。因此,要删除选定对象上的描边,按住 Shift 键点击调色板上的“无填充”色板,或者中键点击选定样式指示器的底部。

使填充/描边不透明

从颜色中移除任何填充不透明度或描边不透明度(8.3)。主不透明度(由色板右侧的“O”控制显示)保持不变。

8.7 选定样式指示器:颜色手势

除了其他功能外,所选样式指示器具有一种方便且独特的方法来快速调整颜色:颜色手势。只需抓住填充或描边颜色色板,并将其拖到画布上,可以使用或不使用修饰键,如下所述。

色彩手势在 HSL 色彩空间中有效(8.4.3)。拖动时没有任何键盘修饰符会调整色调通道,按住 Shift 键拖动会调整饱和度,按住 Ctrl 键拖动会调整亮度。

可以将其想象为“旋转”色板:通过拖动它,你拉出一个不可见的把手,并用它将色板从原始方向旋转开来,假设原始方向为东北方向的 45 度。当你点击并拖动色板时,可以想象有一条线——一个不变轴线——从你点击的点斜向延伸到窗口的绘图区域。通过拖动低于右侧的区域,你会降低相应的色彩通道,直到窗口底部的最小值;而通过拖动高于左侧的区域,你会增加它,直到窗口左边缘的最大值。如果你将鼠标悬停在不变轴线上,色彩不会变化(请参见色彩插图中的图 6)。状态栏会报告你正在调整的通道、该通道的原始值、新值以及差异。

色彩手势的角度特性意味着调整精度非常容易。当你靠近色板拖动时,任何小的移动都会导致色彩发生较大变化。如果需要更精细的调整,只需将鼠标拖得更远,朝着 Inkscape 窗口的中心或右上角移动,这样相同的动作将导致颜色变化较小。

在拖动时,你可以切换通道——也就是说,如果你想调整所有三个通道,就不需要一遍又一遍地从色板开始拖动。你可以通过按住和松开 Ctrl 键和 Shift 键,在一次拖动中完成所有调整。当你在拖动过程中更改键盘修饰符时,新通道的零变化轴线会临时上移,通过当前鼠标位置;这样,如果你从原始的 45 度线切换修饰符时,就不会突然发生颜色变化。

Alt 键修饰符特别:按住 Alt 键拖动表示“什么都不做”。这允许你在不松开鼠标的情况下将鼠标移动到一个更方便的位置,以便在松开 Alt 后继续调整色彩。与其他修饰符一样,松开 Alt 会暂时重新定义不变轴线,使其通过松开 Alt 的位置。例如,假设你通过按住 Ctrl 键拖动色板朝窗口底部的方向来使颜色变暗。如果你接下来需要降低饱和度,但由于没有更多空间无法按住 Shift 键继续拖动,这时只需在不松开鼠标的情况下按住 Alt 键将其向上拖动到一个合适的位置,然后按住 Shift 键向下拖动进行调整。你还可以色板开始按住 Alt 键拖动,以避免色彩变化,直到达到一个更方便的调整位置。

例如,选择一个绿色矩形,首先将其通过拖动填充颜色板并略微偏离 45 度线来调整为绿色蓝色。然后,在按住鼠标不放的情况下,按住 Ctrl 键并稍微向右拖动,以使颜色变暗;接下来,按住 Shift 键,松开 Ctrl 键,并调整饱和度。在拖动过程中,你可以根据需要反复按住和释放 Ctrl 键和 Shift 键;当你对颜色调整满意时,松开鼠标以确认更改。

除了细微调整之外,以下是一些常见颜色更改的快捷手势:

  • 按住 Ctrl 键并拖动颜色板向右和向下,可以将所有选定对象涂成黑色。

  • 按住 Ctrl 键并拖动颜色板向上和向左,可以将所有选定对象涂成白色。

  • 按住 Shift 键并拖动颜色板向右和向下,可以使选定对象的颜色去饱和(将其变为灰色)。

  • 按住 Shift 键并拖动颜色板向上和向左,可以最大化选定对象颜色的饱和度。

当选择多个不同颜色的对象或渐变停止点时,选定样式指示器显示它们的平均颜色。如果你通过手势调整该颜色,所更改的颜色将被应用于所有选定的对象或停止点,从而消除了它们之间的任何颜色差异。这使得该功能的效果不如预期;如果你希望调整许多不同颜色的对象并保留它们之间的相对差异,建议使用调整工具的颜色模式(8.9)、颜色调整扩展(8.10.1)或颜色滤镜(8.10.2)。

8.8 吸管工具

吸管工具允许你直接从图形的任何位置或区域拾取颜色(并且可以选择性地调整不透明度),并将其应用于选定的对象(或者选定的渐变控制点,10.4.2)。使用此工具,你可以将自己的绘图用作调色板,轻松重复使用你已经为其他内容创建的颜色。当你需要将矢量对象与导入的位图进行合并和混合时,这个工具也是必不可少的。

这个工具的重要特性在于,当拾取颜色时,它不关心你点击的是哪个对象;它只是直接取所点击的像素的颜色(基于渲染后的屏幕图像)。这意味着你可以轻松地从位图、半透明对象堆叠、模糊边缘(17.1)或渐变中间选择颜色。该工具看到的正是你看到的内容;如果某个对象太小,当前缩放级别下无法渲染出来,那么你也无法通过吸管工具拾取到它的颜色。此外,如果你点击一个黑色对象在白色背景上的边缘,你可能会得到一个反锯齿像素的中灰色(见图 1-1)。

8.8.1 取样

当你切换到吸管工具(F7 或 D)时,状态栏开始报告光标下方的颜色。因此,如果你想知道某个区域的颜色,你甚至不需要点击——只需将鼠标悬停在该区域上并查看状态栏。同时,任何时候你都可以按 Ctrl-C 将光标下方的颜色复制到剪贴板(以RRGGBBAA的十六进制字符串形式);然后你可以将其粘贴到例如填充和描边对话框的 RGBA 字段中,或者粘贴到任何外部程序中。

8.8.2 分配

你可以通过点击或拖动将颜色分配给选中的对象(或渐变控制点)。点击时,你只是取下鼠标光标下方的屏幕像素颜色。拖动时,你会在开始拖动的地方创建一个圆形区域,当你释放鼠标时,工具会平均该圆圈内所有像素的颜色,如图 8-7 所示。

图 8-7:使用吸管工具

使用平均值采样尤其适用于从位图中采样颜色。例如,如果你需要创建一个与照片中面部颊部融合的矢量对象,单独选择颊部的像素可能不会有效:由于照片纹理的不均匀,选中的颜色可能太浅或太暗。然而,如果你对覆盖面部大部分的圆形区域进行颜色平均,结果将更为逼真。

默认情况下,吸管工具将颜色分配给选中对象的填充颜色。当你按住 Shift 键点击或 Shift 拖动时,它会改为更改对象的描边。

8.8.3 不透明度

通过使用吸管工具控制栏上的两个切换按钮,你可以改变它如何处理透明度(图 8-8)。不透明度:选择按钮控制是否选择光标下方的不透明度,而分配按钮控制是否将该选中的不透明度值分配给选中对象。(当选择按钮关闭时,分配按钮会被禁用。)

图 8-8:吸管工具的切换按钮

假设你有一个鲜红色(FF0000)的对象,其不透明度为 50%,这使得它看起来是浅红色。现在,假设你选择了另一个对象并尝试从红色对象中选取颜色。会发生什么呢?

不透明度:选择按钮关闭

该工具将选择浅红色(FF8080)并且没有不透明度。换句话说,不透明度已经“乘”进了颜色中。状态栏将在光标下报告 FF8080,这就是选中对象将获得的颜色——而选中对象的透明度(如果有的话)将不会改变。只有在这种情况下,页面背景的可见颜色将被混合进来。

不透明度:选择按钮开启

该工具将选择实际的鲜红色(FF0000)和 50%的不透明度分别处理。状态栏将在光标下显示 FF0000 alpha 0.5。现在,当你点击时,结果取决于另一个按钮,即 Assign。

如果“分配”开启,则颜色(FF0000)和不透明度(50%)将分配给选定对象的填充或(按住 Shift 时)描边。请注意,不透明度将成为选定对象的填充或描边的不透明度,而不是它们的主不透明度(8.3)。

如果“分配”关闭,则会将亮红色(FF0000)分配给选定对象的填充或描边,而所选的不透明度将被丢弃,并且分配 100%的不透明度。例如,如果你选择一个具有半透明填充的对象,并在启用选择且关闭“分配”时点击该对象本身,则对象的填充将失去其不透明度,但颜色保持不变。

8.9 颜色调整

你已经在变换章节中看到了一些 Tweak 工具的功能(6.10)。现在,让我们看看它的两种改变对象颜色的模式,颜色涂绘颜色抖动。这两种模式既可以用于平面颜色涂绘,也可以用于渐变(10.6)。参阅 6.10 回顾工具的宽度和力度参数的工作方式。

8.9.1 颜色涂绘

颜色涂绘模式用于在画笔下将颜色应用于选定的对象,如图 8-9 所示。所使用的颜色——更准确地说是样式,因为它包括填充和描边——可以在工具控制栏右侧的样式样本中看到(位于画布上方)。要更改已应用的样式,只需在此 Tweak 工具模式下,点击调色板(或使用任何其他样式编辑命令,例如填充和描边对话框)。

工具样式中的填充将应用于被涂绘对象的填充,而描边将应用于描边。如果工具的样式没有填充或描边,它不会相应地影响填充或描边。例如,如果你想给对象的填充上色为蓝色,但保持它们的描边不变,只需将工具的样式填充设置为蓝色(只需在调色板上点击蓝色),然后将描边设置为none(中键点击状态栏中的描边样本)。

图 8-9:使用 Tweak 工具的颜色涂绘模式

该模式实际上是在对象上进行涂绘,逐渐将其颜色转向目标颜色。例如,如果你不断使用黄色填充在蓝色填充的对象上涂绘,该对象首先会变成绿色蓝色,然后变为绿色,再变为黄绿色;最终,它将变成你正在涂绘的黄色。

按住 Shift 键涂绘会反转你正在应用的颜色(例如,当你用黄色涂绘时,Shift 会逐渐应用蓝色)。

此渐变过渡的速度取决于力值,以及如果你使用的是压力感应平板,则还取决于笔压力。另外,由于画笔是“软”的,画笔外围接触到的对象受影响较小,而画笔中心接触到的对象受影响较大。

8.9.2 颜色抖动

颜色抖动模式,不是应用特定的颜色,而是 抖动—随机化—它接触到的物体的颜色。操作的力度决定了随机化的程度—也就是颜色偏离其原始值的程度,如图 8-10 所示。

图 8-10:使用 Tweak 工具的颜色抖动模式

8.9.3 频道

在 Tweak 工具的控制栏中,模式按钮的右侧,有四个频道切换按钮:H、S、L 和 O。这是你用来打开或关闭工具对物体的色调、饱和度、明度和不透明度作用的地方。

例如,如果你想提高绘图某一部分的饱和度而不改变任何色调,可以选择一种最大饱和度的颜色(如纯红色),然后关闭除 S 之外的所有频道按钮。或者,你可以替换色调而不影响饱和度或明度(仅开启 H),或在不改变色调和饱和度的情况下使所有颜色变亮/变暗(仅开启 L)。启用 O 会将工具样式中的主不透明度应用到物体的不透明度(但不包括填充或描边不透明度)。

8.9.4 使用说明

颜色绘制类似于栅格编辑器(如 GIMP 或 Photoshop)中的软刷。即使该工具作为刷子工作,它仍然将颜色应用于矢量物体,而矢量物体通常会按其正常行为表现。例如,如果你想改变绘图中一个面部的色调,而如果绘图中的一只手与面部属于同一个路径物体,那么即使这只手离你正在绘制的点很远,它的色调也会发生变化。尽管存在这种限制,颜色绘制仍然允许你快速而直观地进行调整,这在传统矢量工具中可能会很麻烦。

含有散布的小独立物体的绘图尤其适合使用 Tweak 工具进行颜色绘制。示例包括:

  • 使用书法笔(见 14.2)进行的自由手绘图形,由许多独立的笔画组成。

  • 使用喷涂工具(见 4.7)制作的物体喷涂。

  • 使用克隆平铺工具(见 16.6)制作的图案。你需要取消原始物体的填充和/或描边,并使用“创建平铺克隆”对话框的颜色标签为克隆分配初始颜色—这将使它们可以通过 Tweak 工具进行绘制,而不需要取消链接。

  • 导入的矢量艺术图形包含许多小瓦片,例如 3D 转矢量转换,其中平滑形状通过多边形或从 Adobe Illustrator 的 AI 文件导入的渐变网格来近似(见 B.5),这些网格在 Inkscape 中呈现为小多边形的格子。尽管 Inkscape 现在有自己的网格工具(见 10.7),但它无法将 AI 网格导入为网格—不过,在导入的瓦片上进行颜色绘制,有时几乎可以和编辑网格一样好。

  • 转换为路径的文本,其中每个字母都是单独的路径(见 15.5)。

调整颜色也适用于仅有少量物体甚至单个物体的构图。与所有其他颜色选择方法不同,使用 Tweak 工具进行绘制实现了颜色混合的比喻,对于艺术家而言,这可能比 RGB 滑块甚至 HSL 色轮更自然。

例如,从一个纯蓝色的矩形开始。切换到颜色绘制模式,从调色板中选择几种不同的颜色,然后用最小的力和最小的笔压轻轻地涂抹。添加一点绿色、一点棕色、一点黄色,等等——直到你得到所需的准确混合色调。同样,你也可以通过添加白色或黑色来使任何物体变得更白或更黑。

你还可以使用颜色调整来加深、提亮、饱和、去饱和、添加色调或对整个绘图进行颜色抖动。只需选择所有图层(Ctrl-Alt-A),缩小视图,扩展画笔以覆盖整个绘图,并应用一些颜色调整(最小力度),这样就能影响所有可见物体。

8.10 颜色扩展和滤镜

你已经看过了多个 Inkscape 的样式设置命令和工具,每个都有自己的方法和功能。当然,每个命令也有其缺点。特别是,填充和描边对话框以及选定的样式指示器无法编辑多种不同的颜色,而不会将它们统一。另一方面,虽然 Tweak 工具可以独立调整多种颜色,但它实际上需要你在画布上绘画,因此可能会较慢且不够精确。

8.10.1 颜色扩展

扩展菜单中的颜色子菜单提供了一组扩展功能,允许你一次调整所有选择中的颜色。这些命令影响填充和描边颜色,包括渐变停靠点的颜色,但不包括位图或图案。它们包括:

  • 一整套HSL 调整(将色调、饱和度或亮度增加或减少 5%)。

  • 更亮或更暗(将亮度上下调整 10%)。

  • 降饱和度(将 HSL 饱和度设置为零)。

  • 灰度模式(均衡三个 RGB 通道;结果与去饱和度相似,但不同于去饱和)。

  • 黑白模式,带可调阈值;大于阈值的颜色变为白色,其他的变为黑色。

  • 负色(例如,将黑色转换为白色,将黄色转换为蓝色,依此类推)。

  • 用于移除或交换红色、绿色和蓝色通道的命令。

  • 替换颜色,用另一个指定的颜色替换任何颜色。

  • 自定义命令,允许你提供自己的公式来修改颜色通道,必要时使用其他通道的值。

8.10.2 颜色滤镜

操作对象颜色的更好方法是使用 SVG 滤镜效果(第十七章),特别是从“滤镜 ▶ 颜色”子菜单中选择的预设滤镜。与扩展相比,SVG 滤镜是非破坏性的(对象的原始颜色得以保留,且通过删除效果即可轻松恢复),并且适用于所有内容,包括位图和图案。Inkscape 中的滤镜也可以交互:许多滤镜有可调参数,如果你在滤镜对话框中启用“实时预览”复选框,你可以在应用之前实时查看画布上的结果,进行实验。

在 Inkscape 的早期版本中,滤镜的渲染速度较慢——但现在已经不再如此,尤其是对于相对简单的颜色滤镜。你可以创建自己的颜色滤镜(使用颜色矩阵原语,第十七章),但这样做并不适合胆小者;幸运的是,Inkscape 有许多现成的预设滤镜,可以满足大多数需求——也许本书无法涵盖每一个滤镜。尽管如此,这里列出了“滤镜 ▶ 颜色”中的一些最常用的滤镜:

  • 色彩偏移(Color Shift)将所有色调按给定量旋转;你还可以增加或减少饱和度。

  • 上色(Colorize)以透过彩色玻璃的方式显示你的绘图;你可以在对话框中使用颜色选择器选择颜色。

  • 双色调(Duochrome)将你的绘图重新绘制为两种色调——例如,用蓝色阴影和黄色光线;你可以选择这两种颜色。

  • 提取通道(Extract Channel)可以让你抑制除一个通道外的所有颜色通道(R、G、B 或 C、M、Y);提取的通道可以转换为 alpha 通道。

  • 淡化为黑或白(Fade to Black or White)允许你通过可调的方式将你的绘图与黑色或白色背景自然融合。

  • 灰度(Grayscale)转换为灰度;与扩展不同,你可以交互式地调整每个通道(R、G、B 和 L)在结果中参与的程度。

  • 亮度对比度(Lightness-Contrast)按照你预期的方式工作。

  • 反转(Invert)允许你有选择性地反转某些通道。

  • 柔和色彩(Soft Colors)在颜色边界周围创建柔和的光晕;这个滤镜不可交互,但你可以在滤镜编辑器中调整光晕的颜色(默认是黄绿色)(17.5)。

第九章:样式:描边和标记

尽管在艺术绘图中不常见,但描边路径——轮廓、框架、箭头、连接线等——在技术绘图中非常常见,例如平面图或流程图。大部分 SVG 样式属性控制着描边的外观,因此它值得单独成章讨论。

尽管 SVG 中的描边功能非常丰富,并可以用于多种目的,但你可能会遇到一些不被支持或仅能通过变通方法实现的功能。特别是,SVG 描边总是具有恒定宽度(它不能沿路径变宽或变窄);要模拟可变宽度的描边,可以使用书法笔(14.2)或路径效果(第十三章)。此外,虽然描边可以有虚线模式(9.4)和附加到其节点的标记(9.5),但你不能用画笔或重复模式描绘路径,这种模式会跟随描边的弯曲——不过,同样的功能可以通过路径效果(13.3.2)实现。你始终可以使用标准的 SVG 矩形图案(10.8.1)来精确绘制描边,就像填充一样,但在这种情况下,图案只是叠加上去——它不会被扭曲以跟随描边的轨迹。

9.1 描边宽度

描边最重要的属性是其宽度。像 Inkscape 中的任何其他长度一样,宽度可以用多种不同的单位进行测量。目前,在用户界面中有两个地方可以查看和更改选中对象的描边宽度:状态栏中的所选样式指示器(窗口左下角,描边色板的右端)和填充与描边对话框的描边样式标签(图 9-1)。

图 9-1:所选样式指示器右键菜单中的描边宽度(左)和填充与描边对话框(右)

在所选样式指示器中,你可以通过直接右键点击描边色板旁边的数字,并从弹出菜单中选择一个值来更改描边宽度。在同一菜单中,你还可以选择描边宽度的单位;默认单位是px(SVG 像素)。

类似于使用颜色手势编辑填充或描边颜色(8.7),你也可以通过将描边宽度值拖动到画布上,来交互式地更改选区的描边宽度。沿 45 度无变化轴(从你开始拖动的点出发)向上和向左拖动,会使选中对象的描边变宽(最多达到原始宽度的 50 倍);向下和向右拖动会使其变窄(最小为零)。例如,如果你从 1 px 的描边开始,向上和向左拖动会变成 50 px,而向右和向下拖动则会将其缩小到零。通过这种方式,你可以非常快速地调整描边宽度,而无需打开任何对话框或菜单。

在填充和描边对话框中,有一个常规的可编辑字段,你可以输入任何值,以及一个单位选择器。

当你在单位下拉菜单中选择发丝选项作为宽度值时,宽度值本身会被禁用。所选对象的描边将始终看起来像是常规的 1 像素宽度,无论缩放如何。对象本身会像往常一样进行缩放,但其描边永远不会变得更薄或更厚。

大纲模式 (3.14) 将文档中的所有对象显示为好像它们有一条发丝宽的描边,无论缩放如何,该描边始终保持 1 像素宽。可见发丝模式 (3.14) 允许你放大描边,但不能缩小,因此无论你如何缩小,描边始终至少为一个屏幕像素宽。然而,与填充和描边对话框中的发丝设置不同,这些模式只是 Inkscape 特定的编辑便利功能,不会影响文档的 SVG 代码。

9.1.1 多个对象中的描边宽度

当选择包含多个具有不同描边的对象时,所选样式指示器会平均这些对象中所有具有描边的对象的描边宽度。例如,如果两个所选对象中一个有 3 像素的描边,另一个有 1 像素的描边,则指示器会显示 2(工具提示会显示这是一个平均值)。

现在,如果你通过右键菜单或拖动设置任何宽度,相同的宽度将分配给所有最初有描边的所选对象。例如,如果其中一个对象有 3 像素的描边,而另一个没有描边,则它会显示 3 作为描边宽度,并在描边涂料选框中显示不同,但你设置的任何新宽度将分配给最初有 3 像素描边的对象。

填充和描边对话框表现不同。当在选择中检测到不同的描边宽度时,描边宽度单位会切换到百分比单位(%),并且显示值为 100%。例如,如果你将其更改为 200% 并按回车键,选择中的每个描边宽度将变为原来的两倍宽。所有原本不同的描边宽度将继续保持不同,显示值会再次变为 100%。

在同一个对话框中,你同样可以将单位选择器从百分比(%)切换为任何绝对单位,并为任意数量的所选对象分配相同的描边宽度。另一方面,即使只选择了一个对象,你仍然可以切换到百分比单位,并指定新宽度作为原始宽度的百分比。

9.2 连接

描边始终跟随路径,而路径可以有尖锐的转折点,称为尖点。通常,尖点是两个路径段在一个角度处连接的节点 (12.5.5),但你不需要节点就能创建尖点:即使在贝塞尔曲线的中间,也能创建一个尖锐的尖点(见 图 12-6,左下角)。

描边在角尖处的表现由两个样式属性决定:连接类型锐角限制,可以在填充和描边对话框的描边样式选项卡上进行编辑,如图 9-2 所示。三种可能的连接类型,通过三个切换按钮表示,分别是圆形连接、斜切连接和锐角连接(默认)。

圆形连接

这模拟了用完全圆形的笔描绘连接的效果。外部形状是一个平滑的圆弧,其中心位于角尖处的路径中心线。这种选项最适用于主要是曲线的路径,偶尔的角尖如果不圆化可能会显得不协调。

斜切连接

这种连接基本上与锐角连接相同(见下文),但将锐角限制设置为 0\。这意味着对于任何角度,角落都会被斜切——一条垂直于角尖二等分线的直线。

锐角连接

在这种连接类型中,它的外观取决于角尖角度的尖锐程度。对于那些角度不是太尖锐的情况,描边在角尖处的外轮廓将由两条直线段延续,这两条直线段在连接的两侧与描边切线相切,直到这些直线交叉。因此,连接处被装饰上一个尖锐的峰值,称为锐角,随着连接处角度的减小,锐角变得越来越长和尖锐,可能会超出角尖节点的位置。

然而,这会导致一个问题。锐角可以多长?显然,当连接处的角度变为零时(这是完全合法的),锐角将会是无限长的。为了防止这种情况,锐角限制控制设置了锐角的最大长度,单位为描边宽度。例如,默认的锐角限制为 4,当锐角短于 4 个描边宽度时,它仍然保持尖锐,但一旦你减少角度使得锐角长于这个长度,它将在距离连接 4 个描边宽度的地方被切割——斜切

图 9-2:填充和描边对话框中的描边连接控制

在描边文本对象中,描边连接设置的艺术效果可能是最明显的,正如图 9-3 所示。

图 9-3:描边文本的连接设置效果

9.3 端点

开放路径需要知道如何绘制描边的端点。在这里,也有三个选项,类似于三种连接类型:描边端点可以是平头圆形方形(图 9-4)。

平头端点

粗暴地在路径的末端节点处,垂直于描边方向切断描边。

圆形端点

添加一个半圆形的突起,平滑地圆化描边的末端。

方形端点

向描边末端添加一个半方形的突起。

图 9-4:填充和描边对话框中的描边端点选项

圆形和方形端点都会使一个开放路径的长度增加其整个宽度,并在每个端点处添加一个半描边宽度的端点。只有使用平头端点(本质上意味着没有端点),路径的长度才正好等于其端节点之间的距离。

连接和端点选项的效果仅在描边足够宽或者放大时可见;对于仅渲染为两到三个屏幕像素的描边,它们几乎不会产生视觉差异(除非是长的斜接)。

9.4 虚线模式

描边不需要从路径的起点到终点连续。如果你使用 SVG,可以通过常规的虚线模式,以任意长度的间隔分隔虚线,来描绘路径。如果你知道相应的 CSS 语法,你甚至可以为自己的使用创建新的虚线模式(使用选择器和 CSS对话框,16.3)。否则,请选择填充和描边对话框提供的许多预定义模式之一,如图 9-5 所示。

图 9-5:填充和描边对话框中的虚线模式

所有虚线模式都以描边宽度为基准定义,这意味着当你调节描边的宽度时,模式会按比例放大或缩小。按照从最常见到最独特的顺序,预定义的模式包括:

  • 由点组成的虚线模式(即描边段的长度等于描边宽度),间隔为 1、2、3、4、6 等,直到 48 描边宽度。

  • 具有长虚线(1、2、3,依此类推,直到 24 描边宽度)和单一描边宽度间隔的模式。

  • 具有相等的虚线和间隔长度的模式,范围从 2 到 24 描边宽度。

  • 具有不同虚线和间隔宽度的模式:2 和 4,4 和 2,2 和 6,6 和 2,2 和 8,8 和 2。

  • 先是长虚线,后是短虚线的模式。

  • 虚线和间隔长度相等,且短于描边宽度,从 0.5 到 0.1 描边宽度(例如,一个“方形”路径,其长宽相等,将有五个 0.1,0.1 的重复模式)。

  • 与你预期的相反,自定义选项并不允许你以一种直观的方式编辑模式——它只是一个看似随机的模式,你仍然只能在 CSS 编辑器中进行编辑。

虚线模式选择器旁边的“模式偏移”字段允许你通过给定的距离(仍然以描边宽度为单位)偏移所选模式。例如,如果你使用一个由两个虚线和两个间隔组成的模式,但希望路径从一个间隔开始,可以将其偏移 2。

请注意,笔画端点(9.3)也会影响破折号。如果你设置路径使用圆形或方形端点,它们将被添加到每个破折号的两端。因此,每个破折号的长度将比使用默认的平头端点时长一个完整的笔画宽度。例如,1,1 的破折号模式在使用圆形端点时会失去所有间隔;相邻破折号的圆形端点,每个长 0.5 个笔画宽度,现在会相互接触,如图 9-6 所示。

图 9-6:笔画端点对破折号的影响

因此,要创建一个沿路径排列的圆点图案,你需要使用具有零长度破折号和圆形端点的破折号模式。Inkscape 在填充和笔画对话框中没有列出这种模式,所以你需要手动创建它。首先,为你的路径分配一个具有所需间隔长度的图案,然后在选择器和 CSS 对话框中编辑路径的 stroke-dasharray 属性,将其破折号长度(第一个值)设置为 0。当然,如果没有圆形或方形端点,这样的图案将使路径完全不可见(这也是它没有包含在标准图案中的原因——记住默认的端点设置是平头端点)。

使用间隔非常宽的点模式(如 1,48)的一种有趣用途是快速创建随机散布的点。使用钢笔工具(14.1.2)绘制一个类似螺旋的涂鸦,并为其分配一个 1,48 的破折号模式,将其变成一团看似不相连的点,如图 9-7 所示。

图 9-7:使用间隔较大的破折号数组模拟随机散布的点

此外,破折号模式的规律性与螺旋形相得益彰——螺旋也是一种规则的形状,但由逐渐变长的弯曲组成(11.6)。等距破折号与逐渐变化的路径的相互作用可以产生迷人的图案(图 9-8)。

图 9-8:破折号螺旋是一种艺术形式。

9.5 标记

标记 是附加到路径上的任意对象(或甚至是对象组),并显示为该路径在(某些)节点处的组成部分(12.1)。标记最常见的用途是用于在图表和流程图中创建箭头。

一条路径可以有三种不同类型的标记:起始节点、中间(中)节点和结束节点。每个标记的副本都被放置在节点处,并旋转以跟随该节点处路径的方向。标记的大小与笔画宽度成比例;只需将笔画调整得更窄或更宽,即可缩放路径上的所有标记。

填充和笔画对话框中的笔画样式标签包含三个下拉列表,你可以在其中选择选定路径的起始、中间和结束标记(图 9-9)。

图 9-9:为路径选择标记

这三组列表显示了相同的标记(换句话说,你可以在任何位置使用任何标记),但预览缩略图将它们应用于水平直线路径的起点、中点和终点,因此你可以大致了解标记在实际路径上的外观。

让我们来看一下 Inkscape 的默认标记列表中包含了哪些标记。

箭头

箭头有两种类型:一种是像飞镖一样的,背面有两条直线;另一种是三角形的,箭头背面有一个凹形的圆弧。每种箭头都有三种尺寸:大、中、小(这些不是绝对尺寸,而是相对于描边宽度的相对尺寸)。此外,每种尺寸还有两种方向:起始和结束。

例如,如果你希望箭头指向路径的外部,请在起点选择一个起始方向的箭头标记,在终点选择一个结束方向的箭头标记。如果弄错了,箭头将指向路径的内部。或者,你可以选择相同的结束方向箭头标记,用于路径的所有三个位置(起点、中点和终点),这样路径上的所有箭头都会指向路径的终点。如有需要,可以使用路径 ▶ 反转菜单项来反转路径(详细信息请参见 12.1.1)。

箭尾

箭尾标记仅提供一个尺寸(与大号箭头匹配)和一个方向(作为结束标记很有意义,即指向路径的起点)。

距离测量标记

距离测量标记只是箭头标记,在箭头尖端添加了垂直的直线。它们有两个方向,一个是起始标记,另一个是结束标记。

几何形状

有一组几何形状标记:圆点、方形、菱形(旋转 45 度的方形)、等边三角形、直线停止符号、填充和空心半圆标记。大多数都有实心和空心变体。与箭头一样,这些标记也有三种尺寸(大、中、小);有些标记还具有起点和终点方向(尽管对于对称标记,如菱形,方向仅在标记相对于其节点的位置上有所不同)。三角形标记的起点和终点变体可以作为另一种箭头形状使用。

杂项标记

有几个花哨的标记,特别是剪刀标记(将其分配给中间标记以创建典型的“断开线”)和“无限线”省略号结尾。

如果文档中已经使用了一些自定义标记,这些标记将添加到下拉标记菜单的顶部,与下面的默认 Inkscape 标记分开。要从路径中移除标记,请选择列表中最上面的空行。

9.5.1 中间标记和节点

起始和结束标记比较简单,因为它们在路径上的位置永远不会令人意外(尽管有时它们的方向可能会令人意外,如果结束节点有一个非常短的贝塞尔控制柄,对曲线形状影响不大,但可能会导致该节点的标记朝一个意想不到的方向旋转)。中间标记则更有趣:它们位于路径的中间节点(12.1),这些节点的位置可能不是你需要或预期的。

一个简单的使用案例是由直线段组成的路径(没有贝塞尔曲线)。在这样的路径上,拐角处将显示中间标记。使用没有起始或结束变体的标记,它们在节点周围对称地定位——例如,点或方形标记(Figure 9-10)。

图 9-10:路径连接处的中间标记

你可能希望像虚线模式那样均匀地填充路径中的中间标记,虚线模式会沿路径定期重复。这对于直线路径来说很容易,只需根据需要添加或移除任何数量的中间节点而不改变直线形状。然而,在更复杂的路径中,某些节点可能是为了保持路径的形状而必需的,而你无法在不扭曲形状的情况下沿路径移动这些节点。你也不能选择在这些节点上应用标记:在 SVG 中,中间标记适用于所有中间节点,无一例外。因此,可能无法在路径上完美地均匀分布标记;然而,期望的标记间隔越短,路径越简单,这种不均匀性就越不明显。

如何在不改变路径形状的情况下添加节点?可以通过在路径上双击或按住 Ctrl-Alt 键点击路径的任意位置来使用节点工具(12.5.3)添加一个新节点。然而,为了使节点分布均匀,另一个快捷键更为实用:按 Insert 键将在选定节点之间的每个段落中间创建一个新节点(并将新节点添加到节点选择中,因此你可以通过反复按 Insert 键来不断添加节点)。

例如,选择一个由两个节点组成的路径并按 Insert 键,会在中间添加一个新节点。现在,你有三个已选择的节点,两个节点之间有两个段,因此再次按 Insert 键会添加两个新节点;再按一次 Insert 键,会添加四个新节点,依此类推。在这种简单的情况下,所有节点将始终均匀分布。然而,如果路径中已经有一些中间节点,选择所有节点并反复按 Insert 键时,将会在最初节点较多的区域添加更多的节点,如 Figure 9-11 所示。

图 9-11:通过反复按 Insert 键添加中间节点(左)和使用 Add Nodes 扩展(右)

创建均匀分布节点的更好方法是使用扩展功能“扩展”▶“修改路径”▶“添加节点”扩展(13.4.2.1)。在这个扩展中,你可以指定最大段长度(以px为单位)或所需的精确段数,算法将添加节点(不会移动或删除任何现有节点)以满足这些约束,从而生成均匀的节点间距。

在节点工具中删除单个节点的方法是按住 Ctrl-Alt 并点击该节点,或者选择该节点并按 Delete 键(12.5.3)。删除多个非关键节点(那些仅仅是为了标记而添加的,不影响路径形状的节点)的好方法是使用“简化”命令(12.3)。当然,“简化”命令并不能真正知道哪些节点是必需的,哪些不是;它会尝试猜测——通常效果还不错,尽管可能会出现不需要的节点和轻微的形状扭曲。

9.5.2 上色标记

通常情况下,图表和流程图中的连接线是黑色的,因此 Inkscape 提供的默认标记是纯黑色或黑色带白色填充。然而,如果你有蓝色或红色的连接线,通常你也希望该线上的箭头头部是蓝色或红色的。这正是 Inkscape 默认的做法:当将标记分配到路径时,它会重新上色以匹配路径的描边颜色。当你更改带有标记路径的描边颜色时,标记也会被更新。

这种颜色匹配并不是 SVG 中的标准行为——这只是 Inkscape 为了方便用户所做的处理。在幕后,每当你更改描边颜色时,Inkscape 会创建每个已分配标记的副本,使用新的颜色重新绘制它,并重新将其分配回路径。这就是为什么你会在“填充与描边”面板的顶部看到不同颜色的标记副本(正如你所记得的,它会将文档的自定义标记列在标准标记之前)。好消息是,如果你不喜欢这种行为,你可以在“首选项”▶“行为”▶“标记”中禁用它,具体如图 9-12 所示。

图 9-12:标记行为偏好设置

禁用自动标记上色的一个原因是,如果你只想将路径用作标记的隐形串线——换句话说,你希望看到标记但隐藏描边本身。为此,首先将标记分配到有描边的路径上,然后移除描边(例如,通过在所选样式指示器中中键点击描边样本,8.6)。如果你将“对象颜色变化时更新标记颜色”设置为关闭,这将满足你的需求:在隐形路径上显示标记。

当标记和其描边有不同颜色时,还需要考虑的是渲染顺序(9.6)。默认情况下,描边先被绘制,因此如果它与标记的颜色不同,只有当标记是透明的时,描边才会从标记下方显示出来。

[1.1]

标记的自动着色是 Inkscape 最近的一个创新;在该功能推出之前,唯一的实现方法是通过扩展功能 ▶ 修改路径 ▶ 颜色标记。这个扩展仍然可用,并且有时很有用,因为它提供了一些额外的选项。使用它,你不仅可以为标记上色使其与对象匹配,还可以交换填充和描边颜色,选择性地包含透明度,或者为填充和描边提供你自己的颜色。(如果你希望为标记做更复杂的涂装,请参阅下一节,了解如何将标记转换为常规可编辑对象并再转回。)

9.5.3 创建新标记

标记不必是一个用纯色填充的单一对象。它可以由任意数量的对象组成,这些对象可以是分组的或未分组的,具有任意的填充、透明度甚至模糊属性——换句话说,Inkscape 能绘制的任何内容都可以作为路径上的标记。将这种复杂的标记应用到有很多附加节点的路径上(9.5.1)可以产生惊人的组合效果。让我们看看如何从任意对象创建标记。

通常,这只需要选择对象或对象们,然后从对象菜单中选择“对象转为标记”。所选对象将消失,但在“填充与描边”对话框的“描边样式”标签中,你会看到新的标记出现在标记列表的顶部(就在默认标记之前)。你可能需要关闭并重新打开“填充与描边”对话框,以刷新标记列表。

在创建新标记时,Inkscape 假设原始对象的方向应该是水平的,并且沿从左到右的路径排列。例如,如果你有一个新的箭头头部,想将其用作结束标记,在将其转换为标记之前,请确保它水平指向右侧。

类似于标准标记,用户创建的标记会随着描边宽度的变化而缩放。它的初始大小(你将对象转变为标记时的大小)将与 1 像素的描边宽度相对应。

每个标记都有一个 锚点——这个点将被放置到该标记附着的节点上。当你创建一个新的标记时,Inkscape 会使用所选对象(第一个对象)的变换固定点(6.4)作为锚点(图 9-13)。默认情况下,固定点位于对象边界框的中心(4.3),这意味着新创建的标记将围绕其节点居中。如果你将固定点移动到对象的一个角落,新标记将通过该角与节点接触。

图 9-13:从选定对象创建新标记

你能做到相反的操作,将路径标记转换为对象(例如,编辑它并重新制作成标记)吗?可以,尽管这涉及销毁应用标记的路径(因此你可能希望首先复制路径)。使用路径▶描边到路径命令。它将描边转换为填充路径(12.1.3),但如果原始路径有标记,它还会将转换后的路径与表示以前标记的对象分组。取消分组,选择一个以前的标记,将其旋转到默认方向,并根据需要进行编辑。

9.5.4 高级标记

SVG 标记有一些其他有用的选项,这些选项目前在 Inkscape 的用户界面中不可用。要更改这些选项,你需要同时使用选择器和 CSS 对话框(16.3)以及 Inkscape 的 XML 编辑器(4.10)。打开它们。选择一个带有标记的对象,在选择器和 CSS 中找到你感兴趣的标记属性(marker-startmarker-mid,或marker-end),然后点击该行右侧的绿色箭头。这将使 XML 编辑器滚动到你对象所使用的svg:marker元素。以下是你可以通过该元素的属性更改的内容:

  • 默认情况下,标记会旋转以使其与路径方向对齐。如果你希望标记始终保持相同的方向,无论路径在该点的走向如何,请移除orient="auto"属性。

  • 如果你不希望标记在描边宽度变化时进行缩放,请添加属性markerUnits,值为userSpaceOnUse

9.6 渲染顺序 [1.1]

如你所见,一个单一的实心对象——不是一个组——仍然可以有最多三个不同的组件:它的填充、描边和标记。唯一未解决的问题是这些固有组件的渲染顺序。由于不能像处理组中的单独对象那样简单地重新排列它们,SVG 通过它自己的样式属性来控制这一点。这个属性可以在“填充与描边”面板的描边样式选项卡中编辑(图 9-14),它可以拥有六个值,代表三种组件(从下到上的所有可能顺序)的所有排列:

  • 填充,描边,标记(默认值)

  • 描边,填充,标记

  • 填充,标记,描边

  • 标记,填充,描边

  • 描边,标记,填充

  • 标记,描边,填充

图 9-14:填充与描边面板中的描边样式选项卡上的渲染顺序按钮

每当填充位于描边之上时,它会升至描边所围绕的路径线。因此,如果填充是不透明的(8.3),将填充置于描边之上,视觉效果几乎和描边宽度减半时一样。

第十章:渐变、网格和图案

渐变在矢量图形中非常重要,因为它们是脱离单调平面色彩填充、呈现更生动效果的最便宜和最通用的方式。设计师可以仅凭精心布置的渐变,创作出惊人复杂且逼真的艺术作品。尽管渐变具有极高的多样性,但它们相对容易创建和编辑,渲染速度也很快,而且几乎在所有 SVG 软件中都得到广泛支持——这一点对于 SVG 滤镜(例如模糊效果,17.1)来说,情况并非完全如此。

基本上,渐变是两种或多种颜色之间的平滑过渡。颜色还包括透明度的级别;这意味着你可以,例如,从不透明的红色到透明的红色创建一个渐变,中间有半透明的红色阴影。SVG 支持两种类型的渐变:线性(沿一条线)和椭圆,或径向(从中心开始,可能具有不等的和非中心的焦点)。

在平面线性和椭圆渐变之后,本章介绍了网格渐变,它们更加强大和灵活——尽管不幸的是,目前其他 SVG 软件不支持它们。最后,我讨论了图案,它通过重复另一个对象的副本来填充一个对象;图案在用户界面上与渐变有许多相似之处。

10.1 创建渐变

渐变工具(G 或 Ctrl-F1)是你在对象上创建新渐变的地方。它也是编辑现有渐变的最自然的地方——尽管一旦创建,对象的渐变控制点也可以在节点工具(12.5)、所有形状工具(第十一章)和滴管工具(8.8)中看到(因此它们可以被拖动和着色)。

创建一个新渐变很简单。只需确保你已经选择了对象(或多个对象),然后开始在画布上拖动——从选中的对象或任何附近的点开始。当你拖动时,你将看到一个实际的渐变出现在你鼠标的移动路径上,并且你还将看到一个由线条连接的控制点(小的画布内控制器)。

你不需要在选中的对象上拖动渐变——渐变控制点完全可以位于它们应用的对象之外。你可以选择任意数量的对象,并通过一次拖动将它们全部涂上相同的渐变(更准确地说,是多个重合的渐变)。另一种快速创建跨越整个对象的渐变的方法是使用渐变工具双击该对象。

为了使用最常见的对象选择快捷键,你无需切换到选择工具:点击选择,Alt+点击选择下方的对象,Shift+点击可以向选择中添加对象,这些操作在渐变工具中也同样适用。

你可以将渐变应用到对象的填充描边,或者两者都应用(8.2)。在 Inkscape 中,描边渐变在控制点之间显示粉色的连接线,而填充渐变则显示蓝色的线条,如图 10-1 所示。

图 10-1:对象的填充和描边上的不同渐变

如果你在一个之前有纯色填充的对象上创建渐变,初始的渐变将从对象的完全不透明到完全透明的颜色从你开始拖动的地方。例如,如果你选中了一个黄色矩形并从该矩形开始拖动,你将填充一个从不透明黄色到透明黄色的渐变。然而,如果你在其他地方有一个蓝色填充的对象,并从它开始拖动,你可以填充一个从不透明蓝色到透明蓝色的渐变。换句话说,你创建的渐变应用于选中的对象,但使用的颜色可以来自于任何对象,无论该对象是否选中,只要你从它开始拖动。(如果这不是你想要的,别担心——创建后更改渐变颜色非常简单。)

类似地,如果你开始拖动的对象已经有一些渐变,工具会为所选对象重新绘制渐变,保留该渐变的颜色(即保留渐变定义,10.2)。如果你从空白处开始拖动,而不是从任何对象上开始,则会使用最上层选中对象的颜色或渐变来创建新的渐变。

在许多去除对象渐变的方法中,最简单的一种是确保没有选中任何渐变控制点(所有控制点是白色的,而不是蓝色的;如果有些是蓝色的,按一次 Escape 键即可),然后点击调色板上的任意颜色(或者按住 Shift 键点击以从描边中去除渐变)。该对象将会被填充或描边为纯色,替代之前的渐变。

当你变换(即移动、缩放、旋转或倾斜,第六章)一个使用渐变的填充或描边的对象时,所有渐变控制点会与对象一起变换,从而保持渐变的位置不变。然而,选择工具栏上的第三个影响按钮(6.11)可以改变这一点。如果取消勾选该按钮(默认选中),渐变将保持相对于画布固定,无论如何变换使用该渐变的对象。这在某些情况下非常有用,例如,如果你想缩放对象使其大小与所使用的椭圆渐变完全匹配。

现在让我们更详细地看一下 Inkscape 可以创建的两种渐变类型:线性渐变和椭圆渐变。

10.1.1 线性渐变

线性渐变沿直线段展开,且该线段的两个端点(以及可能的某些中间点)会分配特定的颜色和透明度。对象上颜色区域之间的过渡总是垂直于渐变线。这是渐变工具创建的默认渐变类型;该工具的线性渐变模式对应于工具控制栏上的第一个切换按钮(见图 10-2)。

图 10-2:通过拖动和双击创建线性渐变

线性渐变有两个可以自由拖动的控制点:一个位于渐变线起点的方形控制点,另一个位于渐变线终点的圆形控制点。通过拖动它们,你可以改变渐变的方向和长度。当你拖动控制点时,渐变会实时重新绘制。

按住 Ctrl 键,绘制新的渐变或拖动现有渐变的控制点时,渐变线会捕捉到角度增量,默认每 15 度(你可以在首选项对话框的行为 ▶ 步骤页面中更改此值,参见 6.3)。在线性渐变模式下双击一个对象会创建一个通过对象边界框中心的水平线性渐变。

10.1.2 椭圆渐变

若要切换到创建椭圆渐变而非线性渐变的工具,点击工具控制栏(画布上方)的第二个切换按钮。现在,如果你在画布上拖动并选择了一些对象,将会在这些对象上创建椭圆渐变,如图 10-3 所示。

图 10-3:通过拖动和双击创建椭圆渐变

椭圆渐变至少有三个可拖动的控制点——中心(方形控制点)和两个垂直的半径(圆形控制点)。这些控制点允许你移动、拉伸、压缩或旋转渐变;你可以将其从圆形变为狭长的椭圆,并可以在任何角度进行旋转。移动中心控制点会移动整个渐变(所有控制点);移动半径则会拉伸和旋转渐变,而不会移动中心。两个半径始终保持垂直。与线性渐变一样,按住 Ctrl 键拖动半径时,渐变会捕捉到 15 度的角度增量。

当你开始拖动以创建新的渐变时,你标记了它的中心,并且正在拖出其中一个半径。另一个半径则被设定为选中对象高度的一半——也就是说,如果你从对象的中心开始拖动,水平拖动到它的边界框右边缘,那么椭圆将整齐地被内切到边界框中。你也可以通过双击对象来实现相同的效果。

椭圆渐变还具有一个通常隐藏的第四个控制点:焦点。这是渐变中心停顿点的颜色和不透明度所在的点。通常,它与中心控制点合并在一起,并随其移动,保持渐变的完全对称。要将焦点—通过一个 X 形控制点表示—与中心分开,只需按住 Shift 键并从中心控制点处拖动。这将创建一个不对称的或偏心渐变(图 10-4)。要将焦点重新合并,只需将其拖动到足够接近中心控制点,它将自动吸附。

图 10-4:通过移动焦点创建偏心椭圆渐变

10.2 渐变定义

渐变有一组停顿点,每个停顿点都有自己的颜色和透明度值。停顿点的最小数量是两个端点停顿点:渐变线的两端(线性)或椭圆的中心和边缘(椭圆)。然而,渐变也可以有任意数量的中间停顿点,这些停顿点位于端点停顿点之间的某个位置。例如,你可以在渐变的 0.5 位置上设置一个中间停顿点,这意味着它总是位于端点停顿点之间的正中间。渐变的停顿点列表,包括它们的颜色、透明度和相对位置,被称为渐变定义

渐变定义是文档范围的资源。这意味着你创建或编辑的任何渐变都会将其定义添加到文档中所有渐变定义的列表中。之后,你可以将该定义应用于文档中的任何其他渐变,这意味着该渐变将从定义中获取颜色和中间停顿点的相对位置(但渐变的端点控制点不会移动)。相同的渐变定义可以同时用于线性渐变和椭圆渐变。使用渐变工具的控制栏中的下拉列表可以查看并选择文档中的渐变定义(图 10-5)。

图 10-5:选择渐变定义

相同的渐变样本列表也可以在填充和描边对话框以及绘画服务器对话框中找到(10.9)。当你选择一个或多个带有渐变的对象时,从列表中选择一个定义会将其应用于所有选中的渐变。

你可以通过按 Shift-R 键或点击控制栏上的“反转方向”按钮来反转选中对象的渐变颜色定义。例如,如果你有一个中心为不透明蓝色、边缘为透明黄色的椭圆渐变,按下 Shift-R 后,你将得到中心为透明黄色、边缘为不透明蓝色的渐变。对于线性渐变来说,这相当于将渐变线旋转 180 度,但椭圆渐变不能仅通过移动其控制点来反转,这使得 Shift-R 功能变得必不可少。

10.2.1 分享渐变定义

当复制和粘贴或复制一个带有渐变的对象时,该对象的副本会自动获得原始渐变的副本,因此修改副本的渐变不会影响源对象的渐变定义。这一行为由“工具 ▶ 渐变”页面中的“防止共享渐变定义”复选框控制,默认是选中的;如果取消选中,复制粘贴、复制、粘贴样式以及将现有渐变定义显式分配给对象时,将会共享渐变定义。当两个对象共享同一个渐变定义时,改变其中一个对象的渐变颜色/透明度或中间停止位置会影响所有使用相同定义的对象。然而,移动结束控制点总是只影响单个渐变,因为这些节点的位置并不属于渐变定义的一部分。

另一个影响对象复制过程中渐变定义共享的设置是渐变工具控制栏上的锁定按钮。如果它被按下,下次复制带有渐变的对象时会导致共享渐变,从而使得编辑其中一个对象的渐变会影响另一个对象。如果你取消按下按钮,编辑其中一个共享渐变会立即打破与另一个对象的链接(而再次按下按钮不会恢复它)。

文件菜单中的“清理文档”命令会删除文档中可能残留的未使用的渐变定义。这是整理文档并减少文件大小(有时是显著减少)的好方法。

10.3 渐变重复

如你所见,渐变控制点不需要与它们所应用的对象的边缘对齐;它们可以被放置在画布上的任何位置,且对象只会显示落在其范围内的渐变部分。但那些不被渐变覆盖的对象部分——例如,超出线性渐变端点或椭圆渐变边缘的部分怎么办?

默认情况下,这些区域会被第一或最后一个渐变停止的平面颜色和透明度填充。例如,如果你有一个小的椭圆形渐变,半透明的白色位于半径处,那么渐变之外的其余部分将是相同的半透明白色。然而,这并不是唯一的可能性。

选择一个带有渐变的对象(但确保没有选中任何控制点),然后在渐变工具的控制栏中的重复列表里,选择反射直接,而不是默认的。这些选项会强制渐变无限次重复,既可以保持不变(直接),也可以每隔一个复制品进行反转(反射)。这是在对象上创建各种条纹图案的简单方法,如图 10-6 所示。

图 10-6:使用渐变重复选项

10.4 渐变控制点

控制点是与渐变停止点对应的画布上的控件。在渐变工具中,控制点不仅可以被拖动,还可以被选中并且着色,与选中的对象着色类似。

10.4.1 选择

选中的控制点为蓝色,未选中的为白色。选择一个控制点的最简单方法是点击它;你也可以按住 Shift 键点击以将控制点添加到选择中,或者将其从选择中移除,或者按住 Shift 键拖动多个节点,使用橡皮带选择它们(参见 5.7)。当你通过拖动创建新的渐变后,拖动的控制点会保持选中状态。

与选择器类似,在渐变工具中,你也可以通过键盘选择控制点。Tab 和 Shift-Tab 可以选择下一个上一个控制点(如果之前没有选择,则为第一个和最后一个);Ctrl-A 可以选择所有控制点(在所有选中的对象中);Escape 键取消选择任何控制点(但保持对象被选中;第二次按下 Escape 键取消选中对象)。

10.4.2 绘制渐变停止点

你可以使用与改变对象样式相同的方法,给选中的渐变控制点或多个控制点分配任何颜色或不透明度级别(参见 8.1)。当一个控制点被选中时,调色板、填充和描边对话框、选中样式指示器中的颜色手势和命令(参见 8.2)、粘贴样式命令,甚至滴管工具都会作用于选中的控制点,而不是选中的对象。图 10-7 显示了一个示例。

图 10-7:为选中的渐变控制点分配颜色

与对象不同,渐变停止点没有填充或描边(即使渐变本身可以应用于填充或描边)。因此,当你选中一个或多个停止点时,状态栏中的样式指示器会显示停止点在填充和描边样本中的颜色;这可能不完全符合逻辑,但非常方便。渐变停止点的不透明度由主不透明度控制器(状态栏中的“O”标签)指示。然而,显示的描边宽度始终是对象的描边宽度(如果有描边),而不是停止点的宽度,因为停止点不能有描边。

如果你希望渐变的一端与其他对象平滑融合,使用滴管工具会很方便;确保对应的控制点被选中,切换到滴管工具并点击你希望渐变融合的区域。请注意,通过切换到滴管工具,你会离开渐变工具,但这不是问题;像许多其他工具一样,滴管工具会显示渐变控制点,甚至保留控制点的选择。你不能在滴管工具中选择对象,但可以切换渐变控制点的选择。

多个渐变控制点被选中时,选中样式指示器会显示选中停止点的平均颜色和不透明度,并标记一个(这与多个选中对象的行为相同,8.4.1)。

当至少选择一个控制点时,复制命令(Ctrl-C)会将单个选中控制点的样式(包括颜色和不透明度)或多个选中控制点的平均样式复制到剪贴板。这意味着你可以在渐变停靠点之间复制和粘贴样式——选择一个控制点,复制,选择其他控制点,然后粘贴样式(Shift-Ctrl-V)。如果选择多个控制点,这样可以通过复制并粘贴它们的平均样式来快速平均它们的颜色和不透明度。

顺便提一下,如果你想将渐变中的所有停靠点的不透明度调整相同的量,你不需要单独调整每个停靠点的不透明度。只需调整使用该渐变的对象的主不透明度(见 8.3)。

10.4.3 移动、合并和吸附

你可以通过直接拖动选中的渐变控制点或使用箭头键(配合常规的修饰键)来移动选中的渐变控制点(Shift 表示位移 10 倍标准的 2 像素,Alt 表示像素级位移,Shift-Alt 表示位移 10 个像素;见 6.5.1)。自然,端点控制点(线性渐变中的渐变端点,椭圆渐变中的中心和半径)可以任意移动,而中间控制点只能沿渐变线移动。(不要把中间控制点与椭圆渐变的中心控制点混淆;后者尽管位于椭圆的中心,但代表的是渐变定义的端点。)

如果选择多个对象,所有包含渐变(无论是线性渐变还是椭圆渐变,应用于填充或描边)的对象都会显示其控制点,你可以同时编辑它们中的任何一个。这为你提供了许多有趣的可能性。例如,你可以选择所有线性渐变的端点并一起平行移动它们。或者按 Ctrl-A 选择所有渐变的所有停靠点,并使用箭头键一起移动整个渐变组。

更重要的是,任意数量的端点控制点(但不是中间停靠点)可以被合并。只要将一个控制点移到足够接近另一个控制点的位置,它就会吸附并合并到一起。(状态栏会报告该控制点的合并状态——例如,“2 个渐变共享的渐变点”)。当你拖动这样的合并控制点时,它会影响到它所属于的所有渐变。要分离一个合并的控制点,可以按住 Shift 键将其拖离。

例如,你可以合并两个对象的椭圆渐变中心,将椭圆控制点与另一个对象的线性控制点合并,合并多个对象的所有三个椭圆控制点,或者合并同一对象上填充和描边的渐变,如图 10-8 所示。

图 10-8:合并渐变控制点

当你拖动以创建一个新的渐变并选择多个对象时,你会看到看起来像是一个应用于多个对象的单一渐变——但实际上它是多个渐变,且其控制点已经合并在一起。

如果两个控制点有不同的颜色或透明度,它们在合并后仍会保持不同。然而,如果你为合并后的控制点指定颜色或透明度,它将应用于该控制点所合并的所有停止点,从而统一它们的样式。如果你想改变合并后某个控制点的样式而不解开合并,这在控制点属于不同对象时是可能的:只需取消选择所有内容(包括控制点和对象),然后只选择你想重新着色的控制点所属的对象。

当被拖动时,任何物体的渐变控制点都会根据捕捉条开关进行捕捉(见 7.3)。特别地,作为可捕捉对象的渐变控制点由第二组的主开关控制(捕捉节点、路径和控制点)。渐变控制点的捕捉目标由第一组和第二组中的单独开关控制;你可以捕捉到边缘、角落、中心或边界框的中点,路径和路径交点,以及路径上的尖角或平滑节点。当然,当网格或参考线存在并启用时,你也可以捕捉到它们。

此外,在拖动控制点或创建渐变时,按住 Ctrl 键可以使渐变角度对齐到水平、垂直以及 15 度增量(见图 10-9)。

图 10-9:捕捉渐变控制点

10.5 多阶段渐变

一个至少在结束控制点之间有一个中间停止点的渐变被称为多阶段渐变,因为它包含多个颜色过渡。在这样的渐变中,每个中间停止点都有自己的颜色和透明度,但其位置仅限于结束点之间的某个位置。在 Inkscape 中,中间停止点由菱形控制点表示,如插图 7 所示。

10.5.1 创建中间停止点

要在渐变中添加一个中间停止点,双击或 Ctrl-Alt-点击渐变线的任意位置。新添加的停止点将自动获得点击位置的颜色和透明度,因此渐变的外观不会发生变化。

你可以拖放调色板中的颜色到渐变线上。将颜色放到已有的控制点上会改变该停止点的颜色;将其放到渐变线的其他位置则会创建一个新停止点,并应用该颜色。

当选择了两个或更多相邻的控制点时,按下插入键会在所有选中的停止点间隙的中间添加新停止点(其效果与节点工具中的操作类似,12.5.3)。渐变工具控制栏上的“加号”按钮也具有相同的效果。以这种方式添加的新控制点会被包含在控制点选择中,因此反复按下插入键会不断增加更多的控制点;如果你从两个控制点开始选择并按下插入键n次,最终你会得到 2^(n)个控制点。

要删除所有选定的停靠点,只需按下 Delete 键。你也可以通过 Ctrl-Alt 点击删除单个停靠点(无论是否被选中)。或者选中一个停靠点,并点击控制条上的“减号”按钮。

删除操作不仅限于中间停靠点;你还可以删除一个端点停靠点,这样最近的中间停靠点就会成为渐变的新端点。当你删除线性渐变的端点控制点或椭圆渐变的半径控制点时,行为会根据操作方式有所不同;如果你 Ctrl-Alt 点击了端节点,最近的剩余控制点会移到它的位置,从而保持渐变跨度不变,但如果你选中该节点并按下 Delete 键,渐变会缩短。如果删除椭圆形渐变的中央控制点,它最近的控制点总会向内移动并成为新的中心点。最后,如果删除一个两停靠点渐变的端点控制点,渐变将消失,物体将被最后一个剩余的停靠点的平面颜色和不透明度填充。

按下 Ctrl-L 并选择一些中间停靠点,简化渐变的选定部分,移除那些在不影响渐变外观的情况下可以删除的停靠点(参见 12.3)。特别是,通过双击或按下 Insert 键创建的新停靠点最初不会改变渐变的外观,简化操作会删除所有那些在创建后没有被移动或重绘的冗余停靠点。你可能需要反复按 Ctrl-L 来删除所有不需要的停靠点。

10.5.2 移动中间停靠点

自然地,你可以将一个中间停靠点的控制点沿着渐变线(无论是通过拖动还是使用箭头键)移动,但不能超过其邻近控制点的范围。按住 Ctrl 拖动一个中间控制点时,它会吸附到可用范围的 1/10 分之一位置——也就是说,它会吸附到其邻近控制点之间的 1/10、2/10、3/10 等位置。控制条上的 Offset 字段显示并允许你编辑所选停靠点在渐变中的位置(介于 0 和 1 之间)。

两个或更多的中间停靠点可能会重合。如果它们具有不同的颜色,那么该点的渐变将形成一个明显的颜色边界。例如,添加两个中间停靠点,将一个涂成绿色,另一个涂成蓝色,然后将绿色的停靠点拖到蓝色停靠点上,便会在渐变中创建一个明显的绿色到蓝色的边界。

按住 Alt 拖动多个选定的控制点时,它们以一种柔软的“橡胶”方式移动。你抓住并拖动的控制点会完全移动,而所有其他选定的控制点会滞后,距离你拖动的控制点越远,滞后越明显。渐变的选定部分不会僵硬地整体移动,而是随着你的拖动平滑地重塑(参见节点工具中的节点雕刻功能,12.5.7.2)。

为什么这很有用?Inkscape(以及 SVG 整体)缺少的一个渐变功能是轮廓,意味着任何两个颜色之间的过渡总是线性的,不能加速或减速(即,它不能向其中一个端点偏移更多)。然而,通过 Alt 拖动中间控制点,可以轻松近似这种非线性轮廓。如果你有一个两停点的渐变,想要根据弯曲轮廓来调整它,选择渐变的两个端点,按多次插入来添加多个中间控制点,然后通过 Alt 拖动中间控制点,平滑地重新塑造渐变,如图 10-10 所示。

图 10-10:通过拖动中间停点并使用 Alt 来近似配置渐变

10.6 渐变技巧与示例

如果你想“淡出”或“羽化”一个物体的边缘,你不必对其应用颜色到透明的渐变(实际上,通常你不能,例如,如果它是一个无法填充的位图)。你可以使用遮罩(18.3);然而,如果物体下方的背景是纯色的,那么一组与背景颜色相同的覆盖物体(着色器),并且带有不透明到透明的渐变,通常更容易创建和维护。这种方法对于多个需要一起羽化的物体,对于不同边缘的羽化效果,对于已经具有不同渐变填充的物体,或者对于位图或图案填充的物体都同样有效。

在图 10-11 中,四个渐变着色器被放置在位图的边缘,用于在白色背景上羽化它。

图 10-11:使用线性渐变着色器为矩形物体的边缘添加羽化效果

在使用着色器时,你不需要移动渐变控制点来将渐变放置到所需位置。相反,只需将整个带有渐变的着色器对象进行变换即可。在图 10-12 中,渐变工具仅使用了两次:一次用于在两个椭圆上创建不透明到透明的椭圆渐变,一个为白色,一个为黑色。然后,使用这两个着色器椭圆的 29 个克隆(链接副本),它们的大小和旋转不同,且具有不同的主不透明度水平,用来为卡通面部添加深度。

图 10-12:通过椭圆渐变着色器为卡通人物添加深度

黑色(或任何其他深色)着色器的一个问题是,它们可能看起来不够柔和——尤其是在完全不透明时,边缘显得太生硬。这是由于默认的渐变轮廓是线性的结果。你可以通过添加中间停点并通过 Alt 拖动来“配置”它们,从而尝试解决这个问题(10.5.2)。另一种技巧是对着色器进行一些模糊处理(17.1),使其边缘不那么突出。

然而,也许解决这个问题的最简单方法是将渐变绘制为不透明黑色到透明黑色(默认设置),而是从不透明黑色到透明的白色(或者,如果您打算在其他浅色上使用着色器,则使用该浅色的透明版本),如图 10-13 所示。这会大大改变渐变轮廓的感知效果,使其边缘更加平滑和自然。缺点是,这可能会让椭圆渐变的中心部分显得过于尖锐,这通常可以通过稍微放大着色器对象来解决。

图 10-13:通过在边缘使用完全透明的浅色来创建更好的暗色着色器渐变轮廓

在设计中使用渐变通常涉及叠加几个带有半透明渐变的对象。彩色插图中的图 8 展示了一个彩色水滴(或玻璃按钮),实际上是六个带有不同椭圆渐变的对象的组合。

Tweak 工具的颜色模式(8.9)不仅可以在纯色填充或描边中绘制或随机化颜色,还可以在渐变中进行操作。对于渐变,工具考虑的不仅是带有渐变的对象的位置,还包括每个渐变停靠点相对于工具画笔的位置。

例如,您可以通过仅用画笔在蓝色端覆盖涂色,而不接触红色端,轻松地重新着色对象的蓝色端,使用蓝-红渐变。颜色调整不会在以前使用纯色的对象上创建渐变,也不会添加停靠点,但它会在绘图中涂抹现有渐变的停靠点。

让我们试试看。拿一个简单的不透明黑色到透明黑色的渐变,按 Insert 键多次添加中间停靠点,然后通过在 Jitter Colors 模式下使用 Tweak 画笔在对象上划线,随机化停靠点的亮度,仅启用 L 通道。然后,对另外两个平滑的原始渐变副本做同样的操作,并将它们全部稍微旋转叠加在一起。最终的纹理看起来就像一幅非常逼真的雾气海景,如图 10-14 所示。

图 10-14:使用 Tweak 工具随机化渐变

10.7 网格渐变 [1.1]

与传统的旧式渐变类似,网格渐变,或简称为网格,也可以在两种或更多颜色之间创建平滑的过渡。然而,在网格中,承载这些颜色的点——类似于线性或椭圆渐变的渐变停靠点——并不是位于同一条直线上。相反,颜色的节点可以被放置在对象的内部或外部的任何位置。此外,节点被连接成网格状或圆锥状的网格,其段落是贝塞尔曲线,类似于路径中使用的曲线(参见第十二章)。由这些段落划定的区域被称为网格补丁

每个网格节点都有其独特的颜色/不透明度;移动节点,添加新节点(因此增加段和补丁)以及重塑连接段,都会影响它们之间颜色过渡的拉伸和弯曲方式。所有这些机制使得你在一定技能下,可以快速高效地创建各种物体和效果的逼真近似。当你进行照片描摹时,甚至可以通过从网格对象下方提取颜色来自动完成这项工作(10.7.5)。

网格渐变是 Inkscape 中相对较新的功能。我很愿意说它们也加入到了 SVG 标准中,但遗憾的是,事实并非如此。网格渐变曾出现在 SVG 2.0 的草案中,并由标准工作组广泛开发。Inkscape 提供了这个新功能的首个,也是迄今为止最先进的实现。然而,浏览器厂商对其的支持一直持保留态度。

可以理解的是,Chrome 或 Firefox 在技术界的影响力远大于 Inkscape;特别是在 SVG 方面,浏览器的支持对其存活至关重要。因此,为了加速其采用,SVG 工作组决定在即将发布的 SVG 2.0 标准中删除此功能。网格功能可能会在未来的 SVG 版本中恢复;与此同时,尽管这一功能目前不是标准 SVG,Inkscape 计划继续支持网格渐变。

10.7.1 何时使用网格渐变?

网格渐变是位图和矢量图形的一种奇特混合体。像位图一样,它是一个由彩色点组成的网格——有时是许多点。像矢量渐变一样,它允许你在放置这些点时拥有相当大的自由度,并能在它们之间平滑地插值颜色。因此,网格渐变的一个完美应用场景是那些对于简单的几何渐变来说过于有机、无形或自由形态的东西——但仍然平滑,且没有太多的纹理或细节。

这一类适合网格的图像包括各种(主要是)平滑的物体,具有柔和、微妙的色彩变化、曲线阴影和高光:衣物和窗帘、面孔和身体、水果和花卉、树干和树叶、餐具、汽车、船只以及帆。另如你将在下文中看到的,网格在你需要在绘图中插入位图图像并进行修整以遮盖一些细节时非常方便。

尽管网格比简单的渐变功能更强大,但在 Inkscape 中的网格也更复杂,且目前使用起来并不那么方便。许多使得使用常规渐变变得更加轻松的功能(例如使用调整工具着色或按住 Alt 拖动多个节点)在网格渐变工具中还不能使用。希望未来版本的 UI 能不断改进。

需要记住的另一件事是,目前网格渐变是 Inkscape 独有的功能,其他 SVG 软件不支持。如果你打算将最终作品导出为位图或 PDF 格式,这应该不会太打扰你。如果你打算以 SVG 格式分享作品,最好的办法是将网格转换为位图(18.6.4)并嵌入 SVG 文档中。

10.7.2 创建网格

要在路径上创建网格(第十二章)、形状(第十一章)或甚至文本对象(第十五章),请通过工具栏按钮切换到网格渐变工具,并双击对象(图 10-15)。

图 10-15:在梨形路径上创建网格渐变

默认情况下,工具会创建最简单的矩形网格,包含一个补丁和四个位于对象边界框角落的节点。你可以通过控制条上的行和列值来改变初始的补丁数量(它们只影响新创建的网格,不会影响已有的网格)。节点最初按棋盘顺序上色,使用对象的原始颜色(例如黄色)和不透明的白色。

就像线性渐变或椭圆渐变一样,你可以在对象的填充或描边上创建网格渐变。这是通过控制条上的一个开关来控制的。

10.7.2.1 矩形网格还是圆锥网格?

控制条上的另一个开关提供了选择矩形网格或圆锥网格的选项。具有中央点和径向线段的圆锥网格,听起来非常适合(大致)圆形或其他中心对称的对象。事实上,当你在多边形或星形(11.5)上创建网格时,Inkscape 会创建一个圆锥网格,具有相应数量的半径,无论控制条上的矩形/圆锥开关是什么状态。

然而,圆锥网格并不是一种不同的网格类型;在后台,它仍然是一个矩形网格,只是被弯曲成一个圆形,所有节点都集中在其中一侧的同一个中央点上。因此,圆锥网格的一个半径就是一个可以展开的接缝,如图 10-16 所示。

图 10-16:圆锥网格渐变的结构

在编辑圆锥网格时,你需要避免弄乱接缝或中央点。这并不难做到;只需要记住通过拖动选择接缝上的节点和中央节点,而不是点击—这样你可以选择该位置上所有重叠的节点(单击只会选择其中一个重合的节点)。

请注意,在 Inkscape 创建的初始圆锥网格中,中心的不同节点具有不同的(交替的)颜色,这使得该区域具有了特有的圆锥形外观。如果你想在保持颜色不同的同时进行编辑,你必须将这些节点分开,应用颜色,然后再合并这些节点。否则,如果你通过拖动选择所有中心节点并应用颜色,你将得到一个平坦的对称色彩峰(类似于椭圆渐变),而不是一个圆锥(见图 10-17)。

图 10-17:圆锥网格的中心:圆锥或峰值

10.7.3 塑形网格

网格节点在许多方面类似于路径节点(见 12.1)。最大区别在于,只有网格的角落节点连接有两个控制柄和两个段(像路径上的非末端节点);网格的边缘节点有三个控制柄/段,内部节点则有四个。这种控制方式的繁杂使得编辑复杂网格变得困难。你可以选择并移动多个节点,但无法像对“网格布料”那样弹性地按住 Alt 拖动它们(参见 12.5.7.2),而且 Tweak 工具(见 12.6)在网格节点上无法使用。

在网格中,你希望节点——颜色的承载体——位于物体的色彩斑点、峰值高光和阴影所在的位置。然而,连接节点的段形状与节点的位置同样重要,因为这些段形成立体的“力场”,弯曲并拉伸色彩。最好通过确保新节点创建的位置大致与需要它们的位置相符,并且新添加的段已经与模型的形状贴合,来最小化对网格节点的编辑。

当你细分网格时,新的段是通过在相邻的现有段之间插值创建的。这给我们提供了一个最佳策略:从一个最小的四节点单补丁网格开始(见图 10-15,左侧),但在添加更多节点之前,先将外框塑形以匹配所建模物体的整体形状(在我的例子中是一个梨形)。由于网格的外部始终是完全透明的(见图 10-16,左侧),你需要将外部节点放置得足够靠近物体的路径,但仍然在外部,如图 10-18 所示。

图 10-18:在添加更多节点之前,先塑形网格的外边缘

与路径不同(参见 12.5.5),网格没有平滑节点类型,因此你需要手动拖动节点及其控制柄,以使其平滑并塑形段落。你可以一次选择多个节点并一起拖动;请注意,选中节点的控制柄将变成指向其母节点的定向三角形(这使得解开复杂网格变得稍微容易一些,因为节点和其控制柄之间没有连接线)。你还可以在控制栏上使用两个按钮,将段落(在选择其端节点后)切换为直线,并恢复为曲线。

由于重塑即使是一个简单的网格也非常麻烦,因此你可能会很高兴得知,当你在椭圆形上创建一个网格时(11.4),Inkscape 会自动将其形状调整为符合椭圆形状(图 10-19,左图;请注意,这是一个圆角矩形网格,而不是锥形网格)。因此,如果你的物体大致呈圆形或椭圆形(例如盘子或液滴),那么首先将其创建为椭圆形,之后在其上创建网格,然后在必要时将其转换为路径并在椭圆网格内重新塑形,可能是一个明智的选择。此方法的一个问题是,节点工具同时显示路径节点和网格节点(它们看起来非常相似);要隐藏网格节点,可以在节点工具的首选项页面上取消选中启用渐变编辑(这会影响渐变节点和网格节点)。

10.7.4 子划分网格

一旦你将物体塑形至大致所需的样子,并且将默认的单一补丁网格形状调整以贴合物体(图 10-18),你可以开始对子网格进行子划分,以添加更多的点和补丁。现在,插值段和点将跟随网格的外形—就像地球上的经线和纬线—因此,在大多数情况下,它们只需要进行最小的编辑。接下来要做的就是为网格节点分配颜色,以创建你设想的阴影和色调。

子划分网格非常简单。你可以通过选择两个或更多节点并按下插入键或 Shift-I 来半自动完成:这将在(每对)选定的节点之间添加一个节点(和相应的段)。例如,如果你选择一个单一补丁网格的四个节点(Ctrl-A)并按插入键,你最终将得到一个 2×2 的补丁网格,总共有九个节点。现在,如果你再次按下 Ctrl-A(将新创建的节点添加到选择中),然后再次按下插入键,每个段将再次被一分为二,生成 4×4 补丁和 25 个节点(图 10-19)。

图 10-19:使用插入键子划分形状网格

这种不加区分的网格加倍策略是一个不错的选择,特别是当你不确定节点的最佳位置时(例如,在创建位图修饰补丁时,10.7.5.1)。如果你知道高光、阴影和着色点的位置,那么使用手动细分来瞄准它们。在任何点双击一个段落,都会在该点添加一个节点,并在该点处生成一条新的段落链。例如,如果你想在点 A 创建一个高光,首先在点 B 的顶部段落双击,以便在 A 处创建一条经过的段落链,然后在 A 处双击以创建交点,如图 10-20 所示。

图 10-20:通过手动创建节点细分形状网格

请注意,添加节点(无论使用哪种方法)并不会改变网格的外观:Inkscape 不仅会插值位置和段落形状,还会插值颜色——因此新节点会自动获得网格在该点的颜色。现在由你来雕刻颜色过渡,通过为新节点应用颜色来实现。

10.7.5 网格节点着色

在开始实际着色之前,不要过于激动地细分你的网格;最好从最小的细分开始,只有当你发现没有新节点无法正确着色时才添加节点。没有什么比看到一个非常简单的网格能产生令人惊叹的生动色彩和阴影效果更令人满意的了。

然而,在你开始着色之前,我建议你将网格的默认 Coons 插值切换为控制栏上的三次插值。Coons 插值是线性的,这会使网格看起来不自然地棱角分明;而三次插值则要平滑得多。

网格节点的实际着色方式与渐变停止点的着色方式相同(10.4.2)。选择一个或多个节点(单击、Shift+单击、框选拖动),并从调色板中选择一个颜色,或通过填充和描边对话框调整现有颜色(再次建议使用“轮盘”标签,它是最自然的选择)。你也可以直接将颜色从调色板拖放到节点上(无论是否已选择)。

从这里开始,操作网格基本上是一个重复的循环:选择一个节点;调整其颜色;取消选择节点和对象(为了隐藏网格,因为网格遮挡下很难看出颜色效果);再次选择对象;然后重复。偶尔,你可能还需要通过细分添加节点或稍微移动一些节点。只要投入足够的时间,你将会惊讶于你的对象如何变得栩栩如生(插图 9)。

在图 10-20 中有几点值得注意。A 点保留了我最初分配给所有节点的黄色颜色;从这样的平均颜色开始,然后稍微偏离它要容易得多。B 和 C 点是两个主要的亮点;它们被涂成非常浅的(几乎是白色的)梨黄色。D 点添加了绿色的点缀,而 E、F 和 G 点则带来了一些红色。自然,梨的右侧和底部的点被涂成较深的颜色,以创造整体的阴影效果,但也有局部例外;特别是 E1 到 E2 和 E3 到 E4 的边缘节点(注意它们位于实际形状之外)被涂成纯白色,以创造出类似于物体置于明亮背景前时的“溶解边缘”效果(比如窗户前的效果)。

10.7.5.1 使用网格修补位图

网格是一种简单的方式来创建照片修补——它是一个完美融合的对象,能够覆盖位图图像中你不需要的部分。假设你想要遮挡蒙娜丽莎脸颊上的裂纹。首先,在一个区域上画一个圆形对象。为它创建一个矩形网格,并用插入(10.7.4)将其分割几次。为了获得最佳效果,网格的外部节点应该位于对象区域之外;为此,只需在节点工具中选择路径的所有节点(而不是网格),然后通过按 < 键缩小路径几次(如图 10 在颜色插入所示)。

现在,你所需要做的就是选择网格渐变工具中的所有网格节点,然后点击控制栏上的“选取颜色”按钮。对于每个选中的节点,Inkscape 会查找此点的背景(即位图)颜色,并将该颜色分配给节点。修补仍然在放大时可见,因为它的平滑度与面部其余部分的裂纹纹理形成对比——但是如果稍微缩小视图,它就会完美地融入!虽然可能使用其他工具(如普通渐变、滴管工具、模糊等)也能实现类似的效果,但只有网格渐变能让修饰工作如此轻松愉快。

10.8 图案

图案是一种填充类型(8.2),其中对象的填充或描边由重复的图块组成。图块可以是任何东西:一个单独的对象或一组对象,使用任何样式属性或 Inkscape 技巧(例如,图块本身可以递归地用图案填充)。这种通用性使得图案成为一个非常丰富和灵活的特性。然而,从另一个角度来看,SVG 中的图案是有限制的:它们只能以简单的矩形网格方式平铺,不能进行旋转或反射(与克隆平铺工具 16.6 进行比较,后者可以使用 17 种不同的平面对称方式排列克隆)。

对象不能同时应用渐变和图案,它们是两种不同的绘制类型。如果你想要在一个带图案的对象上使用透明渐变,请参考 10.6 中的着色器部分或 18.3 中的遮罩部分。

10.8.1 创建图案

与渐变或网格不同,图案在 Inkscape 中没有专门的创建工具。相反,只需选择你想要转换为图案的对象或对象集,然后从菜单中选择对象 ▶ 图案 ▶ 将对象转换为图案,或者按 Alt-I。

选中的对象不会消失,也不会明显改变;然而,你会注意到现在选中的是一个单一的矩形,而不是原来的对象。这个矩形填充了由你的对象所构成的图案,并且它的大小和位置正好与它们的边界框相同,这意味着正好有一个图案副本适合填充矩形。如果你现在拖动矩形的调整手柄(使用矩形工具或节点工具),你将看到其他的图案瓷砖,正如图 10-21 所示。

图 10-21:从对象创建图案

现在,你可以通过从这个矩形中选择“复制并粘贴样式”(如果不再需要,可以删除它),或者从填充和描边对话框中的图案列表中选择它,轻松地将新图案应用到任何对象上,如图 10-22 所示。

图 10-22:填充和描边对话框中的图案填充

SVG 允许你设置图案瓷砖之间的间距以将它们分开。Inkscape 目前还不支持通过 UI 来实现这一点,但一种更简单的方法是在将对象转换为图案之前,给原始对象添加一个透明矩形,扩展到其他对象的边缘之外,从而在图案瓷砖之间增加分隔。图案瓷砖不可能重叠。

如果你想从图案中提取出瓷砖对象以便编辑,选择一个带有该图案的对象,然后使用对象 ▶ 图案 ▶ 图案转为对象命令(但如果你不想丢失图案对象,请先复制带图案的对象)。

10.8.2 编辑图案

当你使用节点工具或形状工具时,带有图案填充的每个对象都会显示三个编辑手柄,允许你在对象内移动、缩放和旋转图案(如图 10-21 所示)。与渐变类似,这些手柄可以出现在画布上的任何位置,不一定在对象本身上。点击缩放或旋转手柄(但奇怪的是,点击移动手柄并不会选中它),然后你可以使用箭头键进行移动。

X 形手柄

这个手柄位于其中一个瓷砖的左上角(“原点”瓷砖)。拖动这个手柄可以移动图案的方向。

方形手柄

位于原始图块的右下角。拖动这个控件可以缩放图案。若要使缩放保持一致(即保持图块的宽高比),请按住 Ctrl 拖动。

圆形控件

位于原始图块的右上角。拖动此控件可以围绕 X 形控件旋转图案,旋转以 X 形控件为轴心。按住 Ctrl 拖动,旋转角度将以 15 度为步进量对齐。

10.8.3 艺术中的图案

从美学角度看,图案的问题与其主要优点相同:重复性。图案可能在技术插图中是必要的或至少可以接受的,但艺术作品通常不会因为烦人的重复矩形图案而有所改进。

如果你在艺术作品中使用了图案,但又不希望它看起来太过规整,你可以选择放大图案(让图案在物体中出现的次数减少)和/或将其旋转使其不再水平/垂直。更激进的方法是,不仅仅在一个对象上平铺图案,而是将多个副本(或克隆)的图案随机分布在其中;这样,观众可能需要费点力气才能发现任何规律性(这就是库存波点图案的制作方式,10.8.4)。

10.8.4 库存图案

“对象到图案”命令并不是将图案添加到文档中的唯一方式。Inkscape 提供了一系列简单的库存图案,你可以在文档中重复使用。

选择一个对象,并通过点击填充和描边对话框对应选项卡中的图案按钮,将其切换为图案填充。你将看到一个下拉列表(图 10-22),其中包含文档的自定义图案(如果有的话)在顶部,接着是一个库存的 Inkscape 图案集合。要使用任何图案,只需从列表中选择即可。

  • 这里有一系列简单的条纹图案,条纹宽度与间隙宽度的比例从 4:1 到 1:64 不等。例如,1:2 的条纹图案表示间隙的宽度是条纹的两倍。所有条纹图案有两种版本:黑色条纹和白色条纹(间隙始终是透明的)。

  • 有两种棋盘格图案,黑白相间的方格(偶数方格为透明的)。

  • “打包圆圈”选项是一种黑色圆圈密集排列的六边形图案,间隙透明。

  • 波点是一种点状图案,随机但均匀地分布,掩盖了重复图案的规律性。该图案有三种尺寸变体(小、中、大点)和两种颜色变体(黑色和白色点)。

  • 波浪是由波浪线组成的图案,线条之间有透明的间隙。

  • 伪装图案是一种绿色调的保护性图案,通常用于军事用途。

  • 白鼬纹是传统的纹章图案,源自对白鼬皮毛的 stylized 表现,尤其是黑色的尾巴。

  • 三种位图图案,沙地、布料和旧油漆,是基于无缝摄影图像的瓦片,允许你为绘图添加一些自然纹理。它们都是灰度图案,因此你可以使这些纹理对象半透明,并将它们覆盖在其他彩色对象上进行纹理化。

图案存储在 Inkscape 数据文件夹中的 inkscape/paint/patterns.svg 文件中,你可以在首选项的系统页面中查找该文件。你可以将自己的图案添加到此文件中,或者用任何包含所需图案的 SVG 文件替换它。

10.8.5 网格填充 [1.1]

网格填充是 SVG 提供的另一种机制,用于通过重复某个元素的副本来填充对象。网格填充比图案更为局限,因为它只能使用任意路径碎片作为瓦片,而不是任意对象——这些碎片被用来“网格化”引用此网格的对象,作为填充或描边绘画。

网格填充是 SVG 2.0 中的新特性(截至撰写本文时尚未最终确定),并且在浏览器中并未得到普遍支持。Inkscape 可以渲染 SVG 网格填充,但它没有提供画布上的控件和其他方便的编辑工具。这个功能我不推荐任何人使用;我提到网格填充只是因为 Inkscape 配备了一些预设的网格填充,你可以通过“绘画服务器”对话框进行浏览和应用(10.9)。

10.9 绘画服务器对话框 [1.1]

请记住,绘画(8.2)是用来绘制对象的填充或描边的任何东西。在所有绘画类型中,有些是简单的(例如无填充或纯色填充)而有些则是复杂的(例如渐变或图案)。在 SVG 中,复杂的绘画定义不是在使用它们的对象中,而是单独定义的——这就是为什么你可以在不同的对象之间共享渐变定义的原因(例如,10.2)。这样的复杂绘画被称为绘画服务器,因为它们将其绘画提供给任意数量的用户(即对象)。

Inkscape 有一个绘画服务器对话框(从对象菜单中可以找到),可以让你查看绘画服务器并将它们应用于选定对象的填充或描边。这不是你不能用其他工具和对话框完成的事情;这个对话框的主要价值在于它将每种绘画显示为缩略图,使得比较变得更加容易。你可以查看当前文档中定义的绘画服务器(渐变、网格渐变、图案和网格填充),或者查看程序随附的预设图案和网格填充。

第十一章:形状

任何时间对任何事物做任何事情的自由,正是矢量图形如此吸引人的原因。借助少量通用的对象类型和操作这些对象的工具,你可以呈现,或者至少近似呈现,任何可以想象的图形。

然而,绝对自由并不总是好事。例如,路径(第十二章)可以表示任何可能的二维形状。然而,通常你需要的不是“任何形状”,而是一个简单、明确的几何实体,比如矩形。当然,一个四节点路径会给你一个完美的矩形——但难道没有更快更方便的方式来专门创建矩形吗?

确实,Inkscape 有多种常用几何形状的对象类型:矩形、3D 方块、椭圆、多边形、星形和螺旋线。每种形状类型都有相应的创建工具,并且 Inkscape 提供了一系列数字参数、可拖动的控制点和快捷键来操作这些形状。你不能对这种形状对象做所有事情,但你可以做的事情非常符合其特定形状类型的需求。

你可以随时按下 Shift-Ctrl-C 将一个形状转换为路径(或者,在 3D 方块的情况下,转换为一个组)。然而,反向转换是不可行的(至少不是自动的)。这意味着,形状比路径是更高层次的抽象:将一个形状转换为路径会导致信息丢失,因此这是一种单向的、破坏性的操作。

11.1 形状工具

要创建一个新的形状对象,使用相应的工具在画布上拖动——例如,使用矩形工具拖动会创建一个新的矩形。新创建的形状会保持被选中状态,任何选中的形状会显示其编辑控制点(外观类似于渐变控制点,10.1)。通过拖动这些控制点,你可以立即编辑你创建的内容。

当你拖动控制点时,大多数控制点会根据是否按下各种键盘修饰键(Ctrl、Shift、Alt)而表现不同。将鼠标悬停在一个控制点上,可以在状态栏中读取提示,了解当按下不同的修饰键时,拖动或点击该控制点会执行什么操作。

和大多数工具一样,形状工具也具有某些对象选择功能。在任何形状工具中,你可以通过点击选择一个对象(不一定是形状)——这就像在选择工具中按 Ctrl-click(一种忽略任何分组的操作,5.10)。Alt-click(选择下方,5.9)有效,但 Alt-wheel 无效;Shift-click(添加到选择或从选择中移除)有效,但橡皮筋工具无效(因为拖动会创建一个新形状)。按 Escape 键可以取消选择。

创建一个矩形,你需要使用矩形工具——但编辑一个形状则是另一回事。任何形状对象,在选中后,都允许你在任何形状工具中拖动其特定的控制点,也可以在节点工具(F2)中进行编辑。然而,当你选中多个形状时,只有节点工具允许你编辑它们的控制点。

11.1.1 形状参数

每个形状工具都有自己的控制栏(2.3),在这里你可以查看和编辑参数。通常,控制栏上会有几个数字输入框和切换按钮,以及一个重置按钮,用于将值恢复为默认设置(该按钮位于所有其他控制项的右侧)。

控制栏最左侧的标签会在所有其他控制项之前显示“New:”或“Change:”。“New”表示未选择相应类型的形状,因此你所编辑的参数将在创建新形状时使用。“Change”表示选择的对象包含当前工具类型的形状——因此你的参数更改将应用于这些形状。

对这些控制项所做的任何更改都会被记住,并用于你使用该工具绘制的下一个对象——就像你赋予对象的样式属性通常会用于下一个创建的对象一样(11.1.2)。例如,在你更改星形的角数之后,任何新绘制的星形将会具有相同的角数。

此外,即使只是选择一个形状,也会将其参数传送到控制栏,在那里这些参数会被记住,并在稍后创建相同类型的新形状时使用。这使得重用形状参数变得容易——类似于从对象到对象粘贴样式(8.1),但不需要使用复制和粘贴。例如,如果你在绘图中某处有一个略微圆角的九角星,并且没有随机化,只需在星形工具中选择该星形,随后的星形将会使用完全相同的参数创建。

11.1.2 新形状的样式

你为下一个创建的形状选择的样式是什么?你可以通过查看控制栏最右端来找到这个答案。所有形状工具——实际上,所有的对象创建工具——在此处都有一个样式样本,显示将用于新创建对象的填充、描边和不透明度(图 11-1)。

图 11-1: 这个样式将用于新创建的形状。

默认情况下,除螺旋形工具外,所有形状工具都会使用上一次设置的样式作为新对象的样式。这意味着每当你更改对象中的某些样式属性时,Inkscape 会记住该属性,并在创建新形状时使用它。例如,在你将某物涂成绿色后,所有新创建的矩形、椭圆、星形等将会使用相同的绿色阴影。或者,如果你为某个路径或形状分配了 3 像素的描边宽度和 1:1 的虚线样式,新的形状也将使用该描边样式。(对于 3D 盒子来说,这种行为更为复杂,因为它们不仅仅使用一种样式,而是为盒子的六个面使用六种不同的样式;详细信息请参见 11.3.5)。

如果你不希望新对象使用最近设置的样式,可以进行更改。在工具箱左侧双击某个形状工具按钮,打开该工具在偏好设置对话框中的页面(3.1.1),如图 11-2 所示。在那里,使用双向切换按钮将新对象的样式设置为最后使用的样式,或者设置为该工具特定的固定工具样式。要更改工具样式,点击从选择中获取按钮,将当前选择的样式保存为该工具的样式。

图 11-2:形状工具的偏好设置页面

例如,如果你希望所有新建的矩形都是黑色且没有边框,选择一个黑色的无边框对象,进入偏好设置 ▶ 工具 ▶ 形状 ▶ 矩形,切换到此工具的自定义样式,然后点击从选择中获取

11.2 矩形

矩形,虽然听起来有些无聊,却是最常用的形状类型。你几乎不可能找到一个不以矩形为主的设计。Inkscape 使得创建和编辑矩形变得尽可能简单和多功能。

切换到矩形工具(点击左侧工具栏按钮或按 R 或 F4 键),然后在画布上任意位置拖动,如图 11-3 所示。按住 Ctrl 拖动可以绘制正方形或整数比例(2:1,3:1 等)矩形;按住 Shift 拖动可以让矩形的起始点位于矩形的中心,而不是角落。你也可以同时按 Ctrl 和 Shift。

图 11-3:绘制矩形

新的矩形会显示四个控件,如图 11-4 所示。左上角和右下角各有一个小方块,这些是调整大小控件。另外两个控件是小圆圈,称为圆角控件;它们都位于右上角,看起来像是一个控件,直到你拖动其中一个。

图 11-4:矩形控件

11.2.1 调整大小

使用调整大小控件,你可以通过拖动任意一侧来调整矩形的大小。按住 Ctrl 拖动会锁定宽度、高度或宽高比,控件会自动对齐到矩形的边缘或对角线。

在控制栏中,标有 W 和 H 的两个数值控件也可以控制选中矩形的宽度和高度。它们使用右侧单位选择器中选定的计量单位。

为什么要使用大小调整手柄,当你可以用选择工具轻松调整矩形的大小呢?选择工具总是按照文档坐标系水平或垂直地缩放物体——也就是沿着页面的边缘。相比之下,矩形的大小调整手柄会沿着矩形的边缘缩放它,即使矩形被旋转或倾斜。W 和 H 值也总是反映矩形固有的宽度和高度,而不一定是其边界框的尺寸,如果矩形被旋转或倾斜,可能会有很大的不同(见 图 11-5)。

图 11-5:矩形大小调整手柄与选择工具的缩放

大小调整手柄的另一个优点是它们始终保留矩形圆角的半径(尽管稍后你将看到选择工具也能做到这一点)。

与任何其他形状类型一样,你可以使矩形的手柄与网格、参考线和其他对象对齐(7.3)。如果你从一个特别旋转和/或倾斜的矩形开始,并启用节点对路径、节点和交点的捕捉,就可以使用复制(Ctrl-D)和大小调整手柄创建紧密贴合、无缝的轴测矩形组合,如 图 11-6 所示。

图 11-6:将倾斜的矩形互相对齐

捕捉的是鼠标指针,而不一定是手柄本身。如果例如你在使用 Ctrl 锁定矩形的宽度或高度进行调整,这两者可能会相差很远。在 图 11-6 中,我想使最左边的矩形变窄但保持其高度,所以我使用 Ctrl 将手柄从 A 移动到 B。然而,我还想让这个矩形紧邻矩形 D 的左边缘(用粗线标记),所以在拖动时,不放开 Ctrl,我将鼠标指针移动到点 C,使其捕捉到我需要的边缘(实际手柄位置在 B),然后释放鼠标。为了实现这一点,我启用了节点和手柄作为捕捉目标以及路径作为捕捉目标(7.3)。

11.2.2 圆角

要使矩形的角变为圆角,抓住一个圆形的角落手柄,并沿着矩形的边拖动它。矩形的所有四个角都会变成圆弧。此外,现在你可以看到第二个圆角手柄——它保持在角落的原始位置(见 图 11-7)。如果你需要圆形的圆角,可以保持这种方式。如果你想要椭圆形的角而非圆形的,把另一个手柄从角落移开,沿着矩形的另一边移动。

图 11-7:矩形圆角手柄

使用控制栏中的 Rx 和 Ry 数值字段,你可以在绝对单位(通过右侧的单位选择器选择)中明确设置两个圆角半径。如果选择了多个矩形,你输入的值将应用于所有矩形(如果选择了非矩形对象,它们将被忽略)。右侧带有角图标的按钮可以去除所选矩形的所有圆角。

你可以移动圆角手柄的最大距离是对应矩形尺寸的一半。当两个圆角手柄都达到这个最大值时,矩形会变成一个圆形,非正方形则会变成椭圆形。

在技术图纸如方案图和示意图中,圆角的大小和形状通常需要在整个构图中保持一致,即使矩形的大小不同。Inkscape 使这变得简单。选择工具栏中四个 Affect 按钮中的第二个(6.11),带有两个同心圆角的按钮,控制矩形缩放时是否缩放圆角。图 11-8 显示了使用此按钮开启和关闭时,缩放矩形的效果。

图 11-8:缩放矩形可能会或不会影响其圆角半径。

以下是矩形圆角手柄的快捷键:

  • 按住 Ctrl 拖动以使圆角变为圆形(即使另一个半径相同)。

  • Ctrl+点击一个手柄,可以不拖动而使圆角变为圆形。

  • Shift+点击一个手柄以去除圆角。

11.3 3D 方框

3D 方框 是表示三维方框(长方体)投影到平面上的对象。因此,它由六个组成,从纯 SVG 视角来看,它只是六条路径的组合,每条路径有四个节点和四个线段。然而,Inkscape 以特殊方式处理这些对象——例如,你可以在它们自己的 3D 空间中调整大小和移动,或者一次性重新定位多个方框的消失点。

除了 3D 方框工具,其他大多数工具和命令将 3D 方框视为一个组。特别是在选择工具中,你可以 Ctrl+点击、Ctrl+Alt+点击或 Alt+拖动选择方框内的任意一面(通常用于更改样式),就像选择组内的对象一样。选择方框内的面不会破坏方框;但是,你可以轻松地通过路径 ▶ 对象转路径(Shift-Ctrl-C)命令“取消方框”——这会去除任何 3D 特性,留下一个普通的包含路径的组。你也可以简单地取消组合(Ctrl-U)一个 3D 方框。

11.3.1 为什么使用 3D 方框?

3D 方框这种专门构造的实用性在哪里?

Inkscape 并不会取代一个功能全面的 3D 应用程序——它并不会模拟一个“真实”的三维空间,你无法在其中放置你的 3D 物体。Inkscape 是并且永远是一个二维绘图工具。然而,它经常被用来绘制三维物体。为了辅助这一点,Inkscape 实现了一个简单的、以二维为导向的透视绘制系统——其原理自文艺复兴时期六百年前被完善以来一直未变。

在 Inkscape 中,你并不是在“构建一个 3D 世界”;你只是创建一个平面图形,表示某个透视下的三维场景。Inkscape 的 3D 方框工具主要是一个助手,它使得创建这种透视图形变得更加容易。在透视图绘制中,方框几乎和矩形在二维绘图和排版中的重要性一样;正确的透视绘制通常从绘制其包围方框开始。因此,Inkscape 的 3D 方框通常不是为了它们自身的目的,而是作为快速且 3D 精确的透视绘图指南——用来对齐物体和将其描绘进去(见第二十二章的示例)。

另一方面,在 Inkscape 中创建和重塑 3D 方框的便利性本身就是一种灵感。Inkscape 0.46(该工具首次亮相的版本)的关于页面(帮助 ▶ 关于)就是一幅艺术作品的例子,作品中以 3D 方框为主,如图 11-9 所示。

图 11-9:3D 方框的组合

11.3.2 绘制

要绘制 3D 方框,切换到 3D 方框工具(按 X 键或 Shift-F4),然后在页面框架内的任意位置拖动(因为默认的消失点位于页面的左右边缘)。这样会在 X/Y 平面上创建方框的前面,沿 Z 轴的深度保持固定。要切换到 Z 轴,按住 Shift 键进行拖动;这会冻结 X/Y 侧面,但可以调整深度,如图 11-10 所示。

图 11-10:绘制 3D 方框

一旦创建了方框,它将在八个角落显示一个菱形控制柄,并在中央显示一个十字形控制柄。此外,彩色线条会从方框的边缘延伸到消失点。让我们详细看看这些控制项。

11.3.3 透视与消失点

每个 3D 方框都存在于某个透视中,这个透视由三个消失点定义,分别对应三个空间维度:X(红色导向线)、Y(蓝色导向线)和 Z(黄色导向线)。每个消失点可以是有限的(它是一个实际的控件,你可以拖动它)或无限的(它只是指向无限远的方向;你可以改变这个方向的角度)。

默认情况下,X 和 Z 消失点是有限的,位于文档页面的左右边缘的中间。Y 消失点是无限的,其方向垂直,如图 11-11 所示。

图 11-11:默认透视

你可以使用工具控制栏中的三个按钮切换每个维度消失点的有限/无限状态。有限的消失点可以在画布上自由拖动。无限消失点的角度可以在控制栏中数值调整,或者通过快捷键进行调整:

  • [ 和 ] 旋转 X 消失点的方向。

  • ( 和 ) 旋转 Y 消失点的方向。

  • { 和 } 旋转 Z 消失点的方向。

如果没有按修饰键,这些键按角度步长旋转(默认是 15 度,6.3)。按住 Alt 键时,它们旋转的角度使得透视线在当前缩放级别下最多移动 1 个屏幕像素。

Shift-X、Shift-Y 和 Shift-Z 切换相应的消失点,从有限状态切换到无限状态,反之亦然。

例如,你可以将三个消失点都设为无限,并将它们旋转到 150(X)、90(Y)和 30(Z)度的角度,从而绘制等距盒子而没有透视缩短。此外,虽然盒子在三个消失点之间的位置最自然,但它们不必局限于此;将盒子移离“自然”透视的甜点位置,会使其看起来奇怪的失真——有时,这正是你所需要的效果。

11.3.3.1 合并与分离透视

对于新创建的 3D 盒子,Inkscape 会重复使用最后选择的 3D 盒子的透视。因此,图形中的盒子通常会共享相同的透视。当你改变透视时,所有使用该透视的盒子——无论是否被选中——都会响应变化,如图 11-12 所示。

图 11-12:通过拖动消失点改变透视会影响该透视中的所有盒子。

如果多个盒子共享一个透视,你可以通过按住 Shift 拖动其有限消失点(仅选择该盒子)来分离其中任何一个。与没有按 Shift 拖动不同,这一变化只会影响所选的盒子。一旦分离,任何透视变化(无论是通过拖动有无 Shift,还是通过控制栏)只会影响该盒子。

此外,当你在选择工具中移动一个 3D 盒子对象时,它的消失点集合会随盒子一起移动,如果它之前共享透视,实际上会将其透视分离。这意味着,如果你希望你的 3D 场景保持一致的透视,应避免在选择工具中操作 3D 盒子。

将两种不同的视角合并在一起,使它们成为一个整体是同样简单的。为此,选择两个具有不同视角的框,将一个视角的有限消失点移动到另一个视角的同一维度(同色)点——它们将自动对齐并连接(类似于渐变处理当拖动靠近时的连接方式,10.4.3),如图 11-13 所示。现在,这两个框将具有相同的视角。(如果视角中有任何无限消失点,则它们的方向角度必须相同,才能成功合并视角。)

图 11-13:合并和分离消失点

11.3.4 手柄

每个 3D 框体,在形状工具或节点工具中选中时,会显示八个菱形的角落手柄和一个 X 形的中心手柄。没有修饰符时,前 X/Y 面上的四个手柄会重新塑造该面,而另外四个手柄则会改变框体的 Z 深度。然而,按住 Shift 时,它们的角色会发生反转,如图 11-14 所示。

图 11-14:带 Shift 和不带 Shift 拖动框体角落手柄

按住 Ctrl 时,边缘调整手柄会自动对齐到该边缘的延续线以及其对角线。对于深度调整手柄,Ctrl 不会产生任何效果(图 11-15)。

图 11-15:按住 Ctrl 拖动框体角落手柄

你可以通过将手柄拖动到并超出对应轴上另一个手柄的位置,来使框的任何一个维度变为负值。这样会反转边的顺序(即,该轴上的远端变为近端,反之亦然)。不过不推荐这样做,因为这种“里外反转”的框并不总是正确渲染其侧面的 z 顺序。

拖动中心手柄时不使用任何修饰键会在 X/Y 平面内移动框体;按住 Ctrl 时,它会使框体对齐到其 X 和 Y 消失点的方向,以及它们之间的角平分线。按住 Shift(无论是否按住 Ctrl),中心手柄会将框体朝向其 Z 消失点移动,如图 11-16 所示。

图 11-16:带 Shift 和不带 Shift 拖动框体中心手柄

与矩形相似,如果启用了节点对路径、节点和交点的对齐(7.3.1.2),你的 3D 场景会非常灵敏——你绘制或调整大小的所有内容都将热衷于对齐和连接,使得用框体构建没有缝隙的实心结构变得愉快。例如,要构建一个多层建筑,可以先绘制一个单层的框体,然后按 Ctrl-D 复制它,接着按住 Ctrl 拖动复制框体的中心手柄向上移动,直到它自动对齐到下一级,如图 11-17 所示。

图 11-17:使用 Ctrl 和自动对齐手柄到路径,使构建复杂场景变得轻松。

11.3.5 样式

从样式的角度来看,3D 盒子与路径组没有什么不同。默认情况下,新盒子的六个面有不同的蓝色阴影;你可以给整个盒子涂上某种颜色(消除面之间的差异),或者你可以按住 Ctrl 键点击并按住 Ctrl+Alt 键点击来选择任何一个面单独涂色。

你甚至可以像进入一个组一样进入盒子(5.10),通过选择它并按 Ctrl+Enter 键。之后,你可以通过简单的点击或使用 Tab 和 Shift-Tab 来选择单个面。无论你如何为各个面设置样式,盒子仍然是一个盒子,因此它的样式会在所有 3D 变换中被保留。要移除 3D 盒子的功能,你需要取消分组(Ctrl-U)或将其转换为路径(Shift-Ctrl-C,这实际上将其转换为一个路径组)。

除了改变填充或描边的颜色之外,你还可以对整个盒子或它的单个面应用模糊效果(17.1)、裁剪和蒙版效果(18.3)。如果你降低了 3D 盒子的透明度,它将在组级别(4.8.2)工作——也就是说,你可以看到盒子下面的内容,但无法看到盒子本身的隐藏面。要查看隐藏面,你需要通过单独选择每个面并降低它们的透明度,如图 11-18 所示。

图 11-18:整个盒子的透明度与单个面透明度对比

从三维视角来看,盒子各面的z 顺序是自动正确的——也就是说,应该距离你更远的面位于 z 顺序的底部,前面的面位于 z 顺序的顶部。然而,不同盒子的 z 顺序并不会被 Inkscape 强制执行;和其他形状工具一样,3D 盒子工具会在当前图层的 z 顺序之上创建一个新盒子(4.4)。因此,在绘制一个盒子之后,你可能需要将其在 z 顺序堆栈中相对于其他盒子进行移动,以便让组合看起来正确。

对于新创建的盒子,工具提供了一个选择项,在最后设置的样式与工具自带的样式之间进行选择(11.1.2)——但有一点不同。默认情况下,3D 盒子工具使用最后设置的样式,但与所有其他工具不同,它会记住在同一个 3D 盒子面上最后设置的样式,而不是任何对象的样式。例如,如果你将任何盒子的顶面涂成红色,那么你之后创建的所有新盒子的顶面(而不是其他面)都会是红色。

由于三维场景通常假设只有一个光源,这种行为是合理的。绘制一个单独的盒子,并绘制它的各个面,就像它们被从例如左上角的光源照亮一样。之后,你创建的所有新盒子将以类似的方式“照亮”。

Tweak 工具在 3D 框体上的工作方式与它在路径(无论是否分组)上的工作方式完全相同。使用路径调整模式(12.6),一旦你扭曲了框体的边,框体就不再是 3D 框体,而变成了一个简单的组。然而,颜色绘制和颜色抖动模式会在不破坏其 3D 能力的情况下对框体进行着色。启用色相和可能的饱和度通道,而不是亮度通道(8.9.3),可能是有意义的,这样你就可以调整框体的颜色,但仍能保留其边缘的相对亮度和暗度,以保持 3D 效果,如图 11 在颜色插图中所示。

11.4 椭圆

椭圆是一种形状,既可以表示椭圆,也可以表示(椭圆或圆的一段弧,带有弦)或线段(弧加上从弧的两端出发并在中心相交的两个半径),如图 11-19 所示。

图 11-19:椭圆、弧和线段的控制点

11.4.1 绘制

要切换到椭圆工具,按 E 或 F5。以下是椭圆绘制的快捷键:

  • 在画布上拖动会创建一个内接于你拖动创建的(假想的)矩形的椭圆。

  • 按住 Ctrl 时,那个假想的矩形首先被限制为一个正方形或一个整数比例(1:2、2:1 等),然后椭圆被内接到其中。

  • 按住 Shift 时,绘制从中心开始,因此椭圆的四分之一被内接到这个矩形中,而不是整个椭圆。当同时按住 Ctrl 和 Shift 时,你会从中心开始绘制一个圆或一个整数比例的椭圆(图 11-20)。

    图 11-20:绘制没有 Alt 的椭圆

  • 按住 Alt 时,工具的行为发生变化(见图 11-21)。现在它绘制一个对角线从鼠标拖动的开始到结束点的椭圆。换句话说,你从椭圆的 10:30 时钟位置开始拖动,并在 4:30 点结束,椭圆会根据需要被压缩以适应这个对角线。

    图 11-21:按住 Alt 绘制椭圆

  • 按住 Ctrl-Alt 时,工具总是绘制一个完美的圆形,其直径从拖动开始到拖动结束。这对于需要给定直径的圆形非常方便。

  • 在 Alt 和 Ctrl-Alt 的基础上按住 Shift,操作与没有 Shift 时相同,但开始时是从中心绘制——换句话说,它会创建一个给定半径的圆。

创建固定大小圆形的一个快速方法是通过在“钢笔工具”中的直线或平行模式下 Ctrl+点击(14.1.4)。你可以在钢笔工具的首选项页面设置这些圆形的大小。按住 Shift 可以使它们的大小加倍,或按住 Alt 可以随机化它们的大小,如图 11-21 所示。

11.4.2 控制点

创建时,椭圆会显示四个手柄:两个方形手柄(上方和左侧),一个圆形手柄(右侧),以及一个 X 形手柄(中心)。与矩形类似,方形手柄是大小调整手柄,而圆形手柄实际上是两个重叠在一起的手柄。在椭圆中,它们不是用来做圆角的,而是用来将椭圆转变为弧形或线段,正如你将很快看到的那样。X 形手柄移动整个椭圆,并用于中心吸附(7.3.1.3)。

与矩形类似,椭圆的大小调整手柄改变的是椭圆的宽度和高度在椭圆的坐标系中,而不是文档坐标系中。无论你如何旋转或倾斜椭圆,这些手柄都会记住椭圆两个轴的位置,并允许你相对于这些固有轴拉伸或挤压椭圆,同时始终保持中心位置不变,如图 11-22 所示。

图 11-22:在选择器中以及通过大小调整手柄转换椭圆形状

以下是椭圆大小调整手柄的快捷键:

  • 按住 Ctrl 拖动将椭圆转为圆形,通过使另一个半径相同。

  • Ctrl+点击一个手柄将椭圆转换为圆形,而无需拖动。请注意,如果椭圆已被倾斜,圆形仍可能看起来是椭圆形的。

现在让我们来看看弧形/线段手柄——圆形手柄。要创建一个线段(一个弧加上两个半径),将这些手柄之一或两个拖动到椭圆形外部;要创建一个弧形,则拖动时保持在椭圆内。当然,手柄本身既不在内也不在外,而是恰好位于椭圆的边缘;“在内部拖动”是指当你抓住手柄时,鼠标的移动位置。请注意,大小调整手柄仍然有效,并且与整个椭圆形时的位置相同(这可能在你的弧形或线段之外)。

椭圆工具的控制栏允许你指定弧形的精确角度,将其转为线段,并将椭圆恢复为完整形状(图 11-23)。

图 11-23:线段和弧形

请注意,与线段(始终是封闭的)不同,弧形可以是封闭未封闭的。未封闭的弧形沿椭圆的边缘绘制,但不会连接弧形的两端(如果你去掉填充,仅保留描边,就能明显看到这一点)。使用控制栏上的两个弧形按钮之一,可以在封闭和未封闭之间切换弧形。

以下是弧形/线段手柄的快捷键:

  • 按住 Ctrl 键时,拖动时会将手柄卡入角度增量(默认 15 度,6.3)。

  • Shift+点击一个手柄将弧形或线段转换为完整椭圆。

与所有其他形状参数一样,椭圆的起始和结束角度会被记住并在新创建的形状中重新使用。如果你最近将另一个椭圆转为线段时,你本想绘制椭圆却得到一个窄的扇形,可能会让你感到惊讶。

11.5 星形与多边形

星形工具(*键或 Shift-F9)创建两种略有不同的旋转对称形状:多边形和星形(见图 11-24)。尽管这一概念很简单,但这是 Inkscape 中最有趣的工具之一——非常适合给朋友们留下深刻印象!

图 11-24:多边形和星形

多边形由一组等距的点组成,这些点位于一个假想的圆上,并通过线段连接。在 Inkscape 中,多边形有一个菱形手柄,用于缩放、旋转,并控制连接线段的形状。

星形是一种更有趣的形状。它在两条假想的同心圆上有两组等距的点,星形的轮廓在内圆和外圆上的点之间来回折返。使用星形的两个手柄,你可以改变这两条圆的直径,并使它们围绕共同的中心彼此旋转,从而产生一种迷人的对称形状变化。

11.5.1 绘制

在绘制新形状之前,通过按下控制栏中的切换按钮决定你是想要绘制多边形还是星形,并在数字控制中选择角点的数量(凸顶点)。例如,三个角点的多边形是等边三角形,如果转换为路径,则会有三个节点;而三个角点的星形则会有六个节点。你也可以随时更改现有形状的多边形/星形类型和角点数——只需选择形状并编辑数值。

星形的最小角点数为 2,而多边形为 3。三角形自然是一个三角形,而两角的星形则会形成菱形或平行四边形。

绘制一个形状再次和在画布上拖动鼠标一样简单。星形或多边形总是从其中心开始绘制。这里只有一个快捷键:按住 Ctrl 拖动时,会将形状某个角点相对于其中心的角度调整为 15 度的增量。

11.5.2 手柄

拖动多边形的菱形手柄可以缩放和旋转多边形——这也是通过选择器进行转换时能够做的操作。星形的两个手柄则更加有趣。

首先,通过将其中一个角点移动到离星形中心更近或更远的位置,你正在改变星形角点所在的两个圆的直径比例。这个比例称为辐条比,并且在控制栏中可以作为数字参数进行调整(多边形无法调整此参数)(见图 11-25)。

图 11-25:调整一个五顶点星形的辐条比

你甚至可以将原始的内手柄移动到比外部手柄更远的位置。控制条仍然会显示一个小于 1 的比例,因为它始终将较小的半径除以较大的半径,无论它们最初是内圈还是外圈。

接着,内手柄(最初位于内圆上)可以沿着星形中心的弧线切向移动——以扭曲星形的顶点,如图 11-26 所示。(旋转外手柄只会旋转整个星形。)

图 11-26:将星形的内手柄沿切线方向移动

如果您希望保持顶点严格按径向排列(没有切向位移),可以按住 Ctrl 拖动内手柄,或者 Ctrl+点击内手柄以去除任何现有的切向倾斜而无需拖动。

11.5.3 圆角

通过圆角化星形或多边形,您可以创造出迷人的效果。这与矩形的圆角不同;在星形或多边形中,不仅角部失去锐利感,而且形状的边缘也会弯曲成优雅的贝塞尔曲线(图 11-27)。

图 11-27:与圆角矩形相比,圆角四边形

请注意,圆角矩形的直线段位于圆形或椭圆形的圆角之间。然而,圆角多边形或星形没有任何直线段——它的所有边都变成了贝塞尔曲线。

星形工具的圆角数字控制是每个贝塞尔手柄的长度(12.1.4)与该手柄影响的多边形/星形边长的比例。该参数可以为负值,这会反转切线的方向。通常,0.2 到 0.4 之间的值能产生最自然的效果。负值或过高的正值可能会导致扭曲、循环或自交。通过调整此值,您可以获得各种各样的美丽形状,如图 11-28 所示。

图 11-28:圆角星形的乐趣

除了控制栏上的数字圆角参数外,您还可以通过按住 Shift 键切向拖动任意手柄来进行圆角处理。对于正向圆角,逆时针旋转手柄;顺时针旋转则为负向圆角。Shift+点击手柄可去除任何圆角效果。

如果您希望星形的外角保持锐角,而内角保持平滑,或反之,请尝试从星形创建一个偏移路径(12.4)。

11.5.4 随机化

另一种使星形变得有趣的方式是通过随机化它。随机化将星形或多边形的所有顶点沿随机方向和随机距离移动。如果星形已经是圆角的,随机化将保留所有顶点的平滑度。

控制栏中的随机化参数控制效果的整体强度。它可以取正值或负值。当您更改此值时,或者简单地按住 Alt 键并切向拖动星形的手柄时,每个节点的随机位移方向保持不变,只有距离发生变化;负值则会使顶点向相反方向移动。换句话说,星形的随机化方式保持不变,只是程度有所不同。

相比之下,当你简单地拖动一个随机化星形的控制点来缩放或重塑它,或者当你绘制一个具有非零随机化的新星形时,形状会颤动并且抖动,所有节点的随机位移会随着鼠标的微小移动而突然改变(在数学术语中,这就是重新播种随机化)。因此,如果你希望你的星形随机化有所不同,但整体振幅保持相同,只需轻微拖动其任何一个控制点,如图 11-29 所示。

图 11-29:随机化星形

随机化的星形有什么用呢?随机性是自然的基本原则,设计中的随机性是一种让事物看起来不那么僵化、更自然的好方法。你的艺术感觉会告诉你在哪里以及多少程度的随机化是合适的。Inkscape 提供了许多艺术随机性的来源:你可以打乱对象的位置(7.5.2),创建具有随机位置、缩放和旋转的图案(16.6),以及随机地改变路径中节点的位置来扭曲它们(12.6.6)。然而,随机化的星形在创造一种内在对称性突显其随机性的形状时独具特色。

轻微的随机化会让星形更加生动——有时甚至非常有趣。强烈的随机化会产生各种狂野且无法预测的形状——凌乱的毛球,圆形的变形虫样墨迹,大星形边缘的奇幻景观,具有许多顶点和接近 1 的辐条比例。作为一个例子,图 11-30 显示了一个有 500 个顶点的星形,没有随机化(左)和随机化了 0.005(右),看起来更加自然,且去除了莫尔纹理。

图 11-30:一个没有随机化的 500 个顶点的星形(左)和随机化程度为 0.005 的星形(右)

另一个例子是这里有一组随机但不聚集的(7.5.2)五边形,圆角为 0.28,随机化程度为 0.15,看起来很像海滩上的卵石,正如图 11-31 所示。

图 11-31:卵石:一种不聚集的圆角随机化五边形分布

11.6 螺旋线

螺旋线工具(I 键或 F9)创建了另一种简单但多用途的形状:同心螺旋线。作为绘图辅助工具和一种独立的形状,螺旋线非常有用——并且不亚于星形的激动人心。

螺旋线,像星形一样,是从中心开始绘制的。按住 Ctrl 键拖动时,拖动点(螺旋线的外端)会按 15 度的增量对齐(6.3)。与所有其他形状工具不同,螺旋线工具默认使用自己的样式来创建新螺旋线——没有填充,黑色 1px 的描边——而不是上次使用的样式(11.1.2)。

绘制完成后,螺旋会在线的两端显示两个手柄。只需拖动这些手柄,螺旋就会从内侧或外侧滚动进出。通过这种方式,你可以例如创建一个只有一圈的螺旋。

控制栏上的 Turns 参数表示你的螺旋从中心到外端绕了多少圈。螺旋的最大圈数为 1000。Inner radius 值控制内端;它表示螺旋开始的总圈数的百分比(图 11-32)。例如,Inner radius 为 0 表示螺旋从中心开始;0.5 表示它从中心和外端之间的中点开始。

图 11-32:调整圈数和内半径

螺旋的发散度控制螺旋的缠绕是否均匀(发散度 = 1)、是否向中心变得更密集(发散度 > 1)或是否向外围变得更密集(发散度 < 1)。你可以通过控制栏数值更改该参数,或者通过按住 Alt 键并上下拖动内手柄,如图 11-33 所示。

图 11-33:调整发散度

这是外部手柄的其他快捷键:

  • 按住 Shift 键并拖动以围绕中心进行缩放或旋转(不会滚动或展开);这与绘制螺旋时的行为相同。

  • 按住 Alt 键并拖动以在滚动或展开时锁定半径。这样,整个螺旋将变得更密集或更稀疏,而不会改变其整体大小。

内部手柄快捷键包括:

  • 按住 Alt 键并垂直拖动以调整发散度。

  • 按住 Alt 键并点击以将发散度重置为默认值 1。

  • 按住 Shift 键并点击以将内半径重置为 0(即将内手柄移动到中心)。

什么时候使用螺旋比较合适?螺旋以均匀的同心图案填充指定空间——这是手动绘制或使用其他工具可能很难实现的效果。因此,它可以作为绘图指南或承载其他对象的载体,例如标记(9.5.1)、虚线图案(9.4)、路径上的文字(15.2.4)或实时路径效果(第十三章)。另外,像椭圆工具一样,螺旋工具对于创建曲率平滑变化的曲线也很方便;与普通的贝塞尔曲线不同,你可以通过沿曲线拖动手柄调整弧线或螺旋的长度,而不影响其形状。

第十二章:编辑路径

在典型的矢量绘图中,绝大多数对象都是路径。这就是为什么熟悉路径如此重要——否则,你无法真正说自己懂得如何在矢量编辑器中工作。Inkscape 提供了丰富的工具、命令和效果,专门用于处理路径。

我将从 SVG 路径的基础知识和一些传统的路径工具开始,这些工具的类似物你可能已经在其他软件中见过。然后,在本章后半部分以及下一章中,我将介绍一些先进的 Inkscape 路径编辑技巧,它们通常更加高效——而且几乎总是使用起来更有趣。例如,你可能会发现,Tweak 工具(12.6)非常自然,你很少需要依赖更加技术性和底层的节点工具(12.5)。尽管如此,了解路径由什么组成并且在必要时能直接操作路径节点仍然非常重要,因为这是任何类型的矢量图形的基石之一。

12.1 路径的结构

路径是由一系列节点(点)通过直线或曲线连接而成的(图 12-1)。每个节点可能只有一个相邻段(如果它是端节点)或两个相邻段(如果它是中间节点);SVG 不支持在同一节点连接多个段的分支路径。

图 12-1:路径 = 节点 + 段

路径的长度没有限制;它可以有从两个到成千上万个节点。一个路径也可以只有一个甚至零个节点,但这样的路径是不可见的。

使用路径,你至少可以近似(在许多情况下,甚至可以精确地复制)任何可想象的形状、形式或图形。根据所需的形状和精度,在最糟糕的情况下,你只需要使用许多密集排列的节点(图 12-2)。

图 12-2:你可以通过几个节点大致近似相同的图形,或通过更多节点更精确地重现它。

12.1.1 子路径

在路径中,顺序相邻的一对节点可能并不通过一个段连接。这会在路径中产生一个间隙,每一个这样的间隙将路径分割成不相连的部分,称为子路径,如图 12-3 所示。

图 12-3:子路径是路径中一组相连的节点。

一个没有任何间隙的路径被认为由单一的子路径组成。任何子路径,就像一段绳子,可以是开放的(有两个松散的端点,称为端节点)或封闭的(绑成一个环,端节点是同一个节点)。

在许多方面,子路径看起来和行为就像独立的路径。你可以随时使用路径菜单中的“拆分”命令,将路径的子路径转换为独立的路径对象。相反的命令“合并”会将多个选中的路径转换为一个路径的子路径。

当组合具有不同样式的路径时,除了最上层(按 z 顺序排列)的选定路径外,其他路径的样式都会丢失——因为无论有多少子路径,一个路径只能有一个样式。但是,路径数据永远不会丢失或增加:如果你组合然后分解任意数量的路径,节点不会以任何方式发生变化。

每个子路径都有一个方向——也就是说,它的节点总是从起点到终点排序。在封闭子路径中,起始节点和结束节点是相同的节点;在开放子路径中,起始节点和结束节点是不同的。通常,子路径的方向并不重要;需要考虑方向的情况包括使用起始和结束标记(9.5)和路径上的文本(15.2.4)。方向还可能通过填充规则(12.1.2)影响路径的填充。如果你在节点工具中启用路径轮廓(图 12-17),并在工具的首选项中勾选“显示路径方向”,就可以在节点工具中可视化路径方向。使用路径 ▶ 反转(Shift-R)可以翻转选定路径的方向(或者,当在节点工具中时,翻转选定节点的子路径方向)。

12.1.2 填充路径

无论你使用什么方式填充路径——实色、渐变、网格还是图案(8.2)——有几件重要的事情需要注意。

填充总是停止于路径本身——也就是说,如果路径有描边,它会停在描边的中心线处。封闭的子路径如果没有与自己或其他子路径相交,就只会填充内部。开放的子路径就像在子路径的起始节点和结束节点之间有一段直线段一样进行填充,如图 12-4 所示。

图 12-4:填充开放和封闭子路径

这条直线不是路径的一部分——它没有描边,例如,你不能用节点工具弯曲它。如果在编辑一个开放的没有描边的路径时,遇到一段无法按预期编辑的直线段,最可能的原因是它实际上不是一个路径段,而只是填充的边缘。关闭子路径(12.5.4)可以让你不受限制地编辑它。

当路径自交或一个子路径完全位于另一个子路径内时,是否填充某个区域取决于两个因素:围绕该区域的子路径的方向和路径的填充规则。填充规则是一种样式属性,可以是nonzeroevenodd,由填充和描边对话框中的两个切换按钮设置(图 8-3):

  • 当填充规则为evenodd时,孔和环总是保持空白,除非你有一个“孔中有孔”的情况——在这种情况下,内部的孔将变成一个填充岛屿。

  • 当填充规则为nonzero时,只有当一个循环或孔的边界与外部路径的方向相反时,它才会被填充;如果它们方向相同,则保持空白。

使用nonzero的填充规则时,填充的环形和孔洞是不可见的,除非路径有描边。通常这些不会构成问题,但有时你可能想要去除它们。最简单的做法是选择该路径并使用路径 ▶ 联合命令(Ctrl-+)。将路径与自身合并可以移除所有不影响填充的子路径。

要反转路径,请使用路径 ▶ 反向(Shift-R);如果你想反转路径内某个子路径的方向,请使用节点工具选择该子路径中的一个或多个节点,然后按 Shift-R,这将只作用于选中的子路径(如果没有选中节点,所有子路径都会被反转)。

12.1.3 描边路径

路径的描边是沿着路径本身绘制的涂料带,因此路径标记了中心线的位置。描边通常绘制在填充物之上(如果有的话),但你可以更改这一点(9.6)。影响描边外观的许多样式属性在第九章中有详细介绍。

路径 ▶ 描边转路径命令(Ctrl-Alt-C)将选定路径的描边转换为填充,如图 12-5 所示。换句话说,它用一个新路径替换了描边路径,新路径的填充看起来与原路径的描边相同,并且保持了该描边的所有连接、端点、斜接和虚线属性。原路径的描边填充将变为新路径的填充,而原路径的填充则被丢弃。如果原路径有标记(9.5),结果将是一个组合,其中描边转为路径的部分与标记一起作为单独的对象。

图 12-5:将描边转换为路径

12.1.4 贝塞尔曲线

如前所述,路径的各个段落——即路径中节点之间的部分——可以是直线或曲线。让我们更仔细地看一下那些曲线段——它们被称为贝塞尔曲线,以法国工程师皮埃尔·贝塞尔(1910-1999)的名字命名,他是第一个在设计中使用这些曲线的人。

贝塞尔曲线完全由四个点的位置决定,其中两个是节点,另外两个是控制点,即手柄。曲线本身总是完全位于这四个点组成的四边形内部。在节点工具中(12.5),每个手柄通过一条直线与其节点相连。这些手柄线始终与曲线在相应节点处切线,如图 12-6 所示。

图 12-6:贝塞尔曲线

如果路径节点位于两个贝塞尔曲线段之间,它将有两个与之相连的手柄,每个手柄分别对应一个相邻的曲线段。

贝塞尔曲线对控制点移动的反应很难描述,但一旦尝试过,你很快就能感觉到它的特性。贝塞尔曲线可能和圆弧非常相似,但也可能具有尖锐的弯曲,几乎呈尖点形状;它可能会自交,或者当控制点在节点之间的直线上时,变得完全笔直(或者完全缩回)。

当然,尽管贝塞尔曲线具有广泛的应用,但用一条单一的贝塞尔曲线能够实现的形状并不多。当构建路径以近似某些形状时(例如,在手动描摹位图时,18.5.2),经验会告诉你当前的贝塞尔段能延伸多远,以及下一个节点的最佳位置在哪里。强行让路径更接近某个真实形状,通常需要通过添加节点和调整控制点来细分贝塞尔曲线。相比之下,简化路径,无论是手动操作还是使用 Simplify 命令(12.3),通常会减少节点的数量,导致贝塞尔曲线变得更长。

12.2 布尔操作

英国数学家乔治·布尔(1815–1864)并不专攻几何学。他发明了自己的布尔代数,用于处理“真”与“假”的逻辑值。然而,后来人们发现,这些相同的概念也非常适用于其他数学对象,如集合或任意几何形状。

Inkscape 支持对路径执行多种布尔操作。这些操作可以通过路径菜单访问,也可以通过与相应数学操作符号对应的快捷键进行访问。有些操作需要正好选择两个对象;而其他操作则可以作用于任何数量的已选形状。所有操作不仅适用于路径,也适用于文本对象和形状(3D 框除外),会自动将它们转换为路径。如果布尔操作失败(例如,由于选择的操作数数量或类型错误),状态栏会解释失败的原因。

12.2.1 联集

两条或多条路径的联集(Ctrl-+)会创建一条新的路径,用其填充区域覆盖原路径覆盖的每一个点。这样,它将任意数量的路径合并成一条路径,并赋予它最底部选中对象的样式,如图 12-7 所示。

图 12-7:路径联集

如果路径不重叠,结果将与路径 ▶ 合并(12.1.1)的结果完全相同。然而,如果路径重叠, 与合并不同,这个命令永远不会创建任何空洞;它会在路径相交的地方创建新的节点,并移除路径中位于最终路径填充区域内的部分。

例如,如果一个小圆完全位于一个大圆内,将这两个圆进行联合操作将简单地去掉较小的内圆。如果你想让较小的圆在较大的圆内形成一个孔洞,可以使用差集(组合也有效,除非结果路径的填充规则是nonzero,并且两个圆刚好是反向的,12.1.2)。不过,联合命令即便对于单一选中的路径也有意义,因为它允许你快速清理掉任何对填充没有影响的内部分。

12.2.2 差集

两条路径的差集(Ctrl-–)创建了一条路径,其填充覆盖了底部(按 z 顺序排列的)路径所覆盖的所有点,但不包括上面的路径——换句话说,它是从底部减去顶部。结果路径采用底部对象的样式,如图 12-8 所示。

图 12-8:从一条路径中减去另一条路径

如果路径不重叠,路径 ▶ 差集将简单地删除上面的路径;如果上面的路径完全覆盖了下面的路径,结果将是空白(两个对象都被删除,且没有任何选中)。此命令是创建孔洞和擦除不需要路径部分的主要工具。

书法笔(14.2)在你按住 Shift 键绘制时会将新创建的路径与选中的路径联合,而在你按住 Alt 键绘制时会从选中的路径中减去新路径。在橡皮擦工具(14.4)中,某些模式也会将你所绘制的部分从选中的路径或形状中减去。

12.2.3 交集

两条或多条路径的交集(Ctrl-)创建了一条路径,其填充仅覆盖原始路径全部*交叉的点。它使用最底层选中对象的样式来呈现结果,如图 12-9 所示。

图 12-9:交叉的路径

如果至少两个选中的路径不重叠(即它们的交集为空),路径 ▶ 交集将删除所有路径,而不会创建任何内容。此命令类似于用另一条路径裁剪一条路径(18.3),不同之处在于,裁剪路径是非破坏性的,且可以作用于任何对象,而不仅仅是路径;另一方面,交集可以同时对任意数量的路径进行交集操作。

12.2.4 排除

两条重叠路径的排除(Ctrl-^)创建了一条路径,其填充覆盖了只有一个原始路径所覆盖的点。它使用底部对象的样式来呈现结果路径,正如图 12-10 所展示的那样。

图 12-10:从一条路径中排除另一条路径

当两条路径不重叠时,路径 ▶ 排除的结果与路径 ▶ 组合完全相同。当路径重叠时,结果看起来像是组合,但实际路径不同:它在原始路径轮廓相交的地方有新的节点,而组合则不会创建新的节点。

12.2.5 划分

两条路径的分割(Ctrl-/)通过上方路径将下方路径切割成若干段,删除上方路径,如图 12-11 所示。

图 12-11:通过另一条路径分割路径

12.2.6 剪切路径

剪切路径操作(Ctrl-Alt-/)类似于分割路径。主要的区别在于,剪切路径不会沿着切割线创建任何新的节点或段落,从而使得结果路径不封闭。它还会移除被切割路径的填充部分。对于切割填充路径,使用分割路径更为自然,而对于切割没有填充的描边路径,则使用剪切路径,如图 12-12 所示。

图 12-12:剪切路径类似于分割路径。

12.3 简化

路径上的一个重要操作是简化。当你简化路径时(路径 ▶ 简化 或 Ctrl-L),Inkscape 会尝试用更少的节点重新绘制该路径,去除小细节但保留路径的大致特征。如果这个描述听起来有点模糊,那是因为该操作本身并非完全确定的;通常,在尝试简化之前,很难准确预测简化的结果。即使是节点数量的减少也不能保证(虽然这是常见的情况)。

尽管如此,简化是非常常见的操作,对于某些艺术绘图风格来说,简化是一项真正的救命稻草。另一方面,在技术绘图中,这种操作很少有用——如果说有用的话,那也是因为它将路径中的任何尖角视为需要“平滑”的“缺陷”。

你几乎可以确定的一个效果是,如果路径中有可以删除的节点,而不会对路径形状造成任何变化,它们在简化时被删除。这包括你通过节点工具(12.5.3)或添加节点扩展(13.4.2.1)添加的节点,但这些节点从未从它们的初始位置移动。

路径简化类似于渐变工具中的渐变简化操作,也可以通过 Ctrl-L 来触发(10.5.1)。渐变简化也会移除你添加的但尚未移动的渐变停靠点。

每个简化操作都使用一定的强度。弱简化仅会稍微改变路径,只移除最明显冗余的节点。强简化则会改变路径更多,并平滑掉较大的起伏。

当你按下 Ctrl-L 一次 时使用的默认强度可以在偏好设置对话框的行为页面上设置为简化阈值。默认值是 0.002;大于 0.01 的值对大多数情况来说可能太强。如果你做任何更改,考虑降低此值,因为它实际上是最小的简化强度;你可以随时临时增强你的简化命令,通过提高该值而无需进入偏好设置对话框。

如何让简化效果更强大?只需快速连续按 Ctrl-L 几次(参见图 12-13)。每次调用该命令都会略微增加效果,前提是它发生在上次调用后的不到半秒钟内。通过这种加速简化,你可以对每条路径应用恰到好处的简化效果。如果第一次按键没有足够地平滑路径,只需继续按 Ctrl-L,它会逐渐加大。如果等待超过半秒钟,简化力度会重置为在偏好设置中定义的默认值。

图 12-13:简化路径

图 12-13 展示了简化如何影响路径的一些示例(参见图 12-2,它是通过逐渐简化节点较多的玫瑰轮廓产生的)。如你所见,除了减少节点数量并抚平细节外,这个操作还会消融尖锐的角落并使直线弯曲,产生一种自然且常常具有艺术感的扭曲。

12.4 偏移

偏移路径意味着以一种方式扩展或收缩路径,使得每个点相对于路径在该点处沿垂直方向移动。向内偏移叫做内插,而向外偏移叫做外插。想象你的路径是一个岛屿;外插会通过将海岸线的每个点都移动相同的步数向海洋扩展,从而使其变大,而内插则通过让海洋按相同的步数向内侵蚀,使岛屿变小,如图 12-14 所示。

图 12-14:偏移路径

要内插所选路径,按 Ctrl-((向内偏移 2 像素),或 Alt-((在当前缩放下向内偏移 1 屏幕像素),或 Shift-Alt-((向内偏移 10 屏幕像素)。要外插路径,使用相同的修饰键加上 ) 键。在大多数键盘上,9 和 0 键与 ( 和 ) 键在同一个键上,因此数字也会像括号一样工作。

偏移用于那些希望在不改变整体形状的情况下让路径变得“更粗”或“更细”的情况。这对于阴影、轮廓、光晕、斜面等非常有用。(有时,除了外偏移,你也可以简单地为路径设置一个足够宽的笔画,颜色与填充色相同。)

如果你多次对一条路径进行外插和内插,它会以一种独特的方式发生扭曲,这种扭曲与简化的扭曲类似但有所不同(参见 12.3)。这种扭曲将路径的各个部分焊接在一起——圆滑的角落、平滑的交点,并将路径中的相近子路径融合在一起。例如,将书法笔绘图中的所有笔画合并,然后对其进行几次内插/外插循环,使其看起来更加自然和磨损(参见图 12-15)。

图 12-15:通过重复偏移来融化复杂路径

偏移操作,像简化操作一样,是一种破坏性操作:你无法恢复原始的精确路径,除非通过撤销操作来恢复。(例如,偏移一个开放路径总会使其闭合。)然而,Inkscape 也有两种动态对象类型,链接偏移动态偏移,它们会存储原始路径的精确数据,并允许你在不产生失真的情况下调整偏移量(13.3.11)。

内插和外扩命令,以及链接偏移和动态偏移,会将相同的偏移距离应用到整个路径。然而,实际上,你也可以仅对路径的一部分进行内插或外扩(例如,书法笔触的一端),这可以通过 Tweak 工具的“增大”和“缩小”模式来实现(12.6.4)。

12.5 节点工具

和 Inkscape 中的其他工具一样,节点工具——主工具栏中的第二个按钮,可以通过按 N 或 F2 快捷键访问——旨在让简单的操作变得简单,让复杂的操作成为可能。这可能是 Inkscape 中最复杂的工具——至少,节点工具的键盘和鼠标快捷键数量比任何其他工具都要多。你不需要知道所有的技巧就能高效使用 Inkscape,但你应该了解基础操作。

12.5.1 路径显示

切换到节点工具后,任何选中的路径都会显示其节点,这些节点呈现为小灰色方块、菱形或圆形(具体取决于每个节点的类型,12.5.5)。作为额外的功能,形状(第十一章)、渐变、网格和图案(第十章),以及许多路径效果(第十三章)在节点工具中也会显示其编辑控制柄。

你可以选择部分或全部路径节点;选中的节点会变为蓝色并稍微增大。贝塞尔曲线的控制柄(12.1.4)仅在选中的节点及其相邻节点处可见。即使如此,如果这些控制柄妨碍操作,你也可以通过控制栏上的按钮来隐藏它们,如图 12-16 所示。

图 12-16:节点工具中的节点和贝塞尔控制柄

默认情况下,选中的路径在节点工具中不会被视觉化,只会显示其节点。通常,你会看到路径的描边和/或填充在编辑节点时实时更新。然而,有时你的路径可能过于透明或模糊,或者可能应用了某些路径效果(第十三章);在这种情况下,你可以通过切换控制栏上的另一个按钮,要求 Inkscape 用红线高亮显示实际路径,如图 12-17 所示。

图 12-17:节点工具中的路径高亮显示

除了路径本身,节点工具还允许你编辑与对象关联的其他一些路径——它们是不可见的,但会影响路径的外观:剪切路径(显示为浅绿色,18.3)、蒙版路径(显示为蓝色,18.3)和路径效果的链接路径参数(显示为深绿色,13.2.1)。这些对应于控制栏上的三个按钮;剪切路径和蒙版按钮是开关切换,而显示下一个可编辑路径效果参数按钮切换到下一个链接路径参数(因为可能有多个,具体取决于所使用的效果)。

最后,如前所述,节点工具显示了对象(不一定是路径)所拥有的各种编辑控件。例如,在这个工具中,你可以编辑形状(第十一章)、调整渐变、网格和图案(第十章),或者更改流动文本对象的尺寸(15.2.2)。

12.5.2 选择节点

就像 Inkscape 中的许多其他功能一样,路径的节点可以在节点工具中被选择。毫不意外,节点选择的方法与对象选择的方法非常相似(第五章)。

除了在路径中选择节点外,该工具还可以选择对象(记住,选择对象是 Inkscape 中所有工具和命令的共通功能)。在节点工具中,你可以使用一些你从选择工具中学到的快捷键:点击选择一个对象(忽略分组),Shift-点击添加到选择中或从选择中移除,Alt-点击选择下方的对象(5.9)。节点工具可以同时编辑多个选定路径中的节点(在许多方面,它将它们视为单一路径的子路径,12.1.1)。

这与节点类似。要选择选定路径中的单个节点,只需点击它;该节点会变成蓝色,并且比未选中的灰色节点稍大。按住 Shift 键点击添加一个节点到节点选择中;选定的节点不需要相邻,甚至可以不在同一条路径上。拉框选择(在节点周围拖动矩形,参见 5.7)也可以使用;按住 Shift 键拖动会将矩形框内的节点添加到选择中。

如果你点击两个节点之间的路径段,两个节点都会被选中。点击空白区域(远离已选路径),就像按下 Escape 键一样,会取消选择任何已选的节点——或者,如果没有已选节点,则取消选择任何已选的对象。

在选择工具中,Tab 和 Shift-Tab 键用于跳转到下一个或上一个对象,而在节点工具中,它们用于选择所选路径或路径中的下一个或上一个节点。当到达最后一个节点时,按下 Tab 会跳转到第一个节点;当到达第一个节点时,按下 Shift-Tab 会跳转到最后一个节点。顺便说一下,按 Tab 键几次是快速了解一个(子)路径方向(12.1.1)的方法,而不会以任何方式更改文档。

与选择工具中的操作一样,Ctrl-A 选择所有选定路径中的所有节点。但是,如果你已经选中了某些节点,Ctrl-A 仅选择那些已经选择节点的路径和子路径中的节点(这类似于选择工具中的 Ctrl-A 仅选择当前图层内的对象)。要始终选择所有路径中的所有节点,请使用 Ctrl-Alt-A。!键会反转选择,选择未被选中的内容,反之亦然,在已经选中了某些节点的(子)路径内。

另一种选择节点的方法是节点工具特有的。当你将鼠标悬停在一个节点上(该节点会高亮显示为红色)时,你可以通过旋转鼠标滚轮或按 Page Up 和 Page Down 键来扩展收缩节点选择。向上滚动一格或按 Page Up 会将最近的未选中节点添加到选择中;向下滚动一格或按 Page Down 会取消选择最远的已选中节点。

为了确定“最近”和“最远”的节点,Inkscape 通过计算每个节点到鼠标指针的直线欧几里得距离来测量。但是,如果在旋转滚轮或按 Page Up 或 Page Down 时按住 Ctrl 键,距离将按路径计算,选择将仅限于你悬停的节点所在的(子)路径。

12.5.3 删除和创建节点

删除任意数量的选定节点,只需按 Delete 或 Backspace 键,或者点击控制栏上的“减号”按钮。

删除子路径的末端节点会使子路径变短,但你不能通过删除节点来打开一个闭合的子路径——你需要按照 12.5.4 中的描述将其断开

当删除中间节点(位于其他节点之间)时,Inkscape 会将每组相邻节点替换为一个单独的 Bézier 曲线段。在大多数情况下,这会引入一些失真,但 Inkscape 尽量最小化这种失真——它会调整剩余节点的控制柄,使得新的 Bézier 曲线段尽可能接近它所替代的路径片段。换句话说,在路径上删除节点可能像一个局部的简化命令(12.3)。

然而,有时候,你不需要新的 Bézier 曲线来完全突出显示你正在删除的节点,因为你正试图避免更改剩余节点的控制柄。在这种情况下,直接按 Ctrl-Delete 或 Ctrl-Backspace,如图 12-18 所示。

图 12-18:删除节点

与删除不同,插入新节点总是可以在路径的任何位置进行,而不会改变其形状。只需在路径上(即笔触的中心线或填充的边缘)双击或按 Ctrl-Alt 点击你希望插入新节点的位置。一个新节点将被插入,并且其相邻节点的控制手柄会自动调整,以确保路径形状不变(图 12-19)。

图 12-19:通过点击创建节点

还有另一种创建节点的方法,无需点击。选择两个或更多相邻节点,然后按 Insert 或 Shift-I(或点击控制栏上的插入节点按钮)在每个路径段的中间插入一个新节点(图 9-11)。由于新节点会被添加到选择中,这是增加路径上节点数量的快捷方式—例如,如果你从两个节点开始并按 Insert 八次,你的路径将有 257 个节点(2⁸ + 1)。这类似于通过按 Insert 创建新的渐变停点(10.5.1)。

[1.1]

控制栏上的插入节点按钮有一个下拉子菜单,命令可以将新节点插入路径或其选中部分的端点—但前提是该端点还没有节点。例如,如果你选择两个节点之间的曲线,而该曲线比任一节点的 Y 轴值都要低,你可以使用“在最大 Y 处插入节点”命令,在该段最低点插入一个节点(图 12-20)。所有端点的节点将是平滑节点(12.5.5),其控制手柄严格水平(对于最小/最大 Y)或严格垂直(对于最小/最大 X)。

图 12-20:在路径的端点插入节点

另一种方法是复制节点。选择任意数量的节点后,按 Shift-D。这将“分割”每个选中的节点为两个,每个新节点继承原节点的两个控制手柄之一。图 12-21 展示了如果你复制路径中的所有节点,并通过按→将新节点(原本与旧节点位于相同位置)移开时的效果。

图 12-21:复制节点

Shift-D 方法特别适合通过复制并移开路径末端节点来继续开放的(子)路径。例如,如果你选择了一条直线段的末端节点(即没有 Bézier 控制手柄的末端节点),你可以轻松地通过按 Shift-D 然后按箭头键来“绘制”线段。

12.5.3.1 复制、剪切和粘贴节点 [1.1]

传统的复制、剪切和粘贴命令和快捷键也可以在节点工具中使用,尽管有一些限制。

复制单个节点没有什么用处。复制两个或更多选定的节点会从这些节点创建一个路径,并将其放入剪贴板。从这里开始,无论你是在选择工具还是在任何其他工具中,都可以将其粘贴回来,作为由复制的节点子集创建的新路径对象。如果你复制的不是一个完整的封闭子路径,粘贴的路径将会是开放的。

如果你将从节点工具复制的节点选择粘贴到同一工具中,并且选择了单个路径,则会在选定路径中创建一个新的子路径(12.1.1)。粘贴时,是否选择了节点并不重要,因为粘贴操作不会将复制的节点插入到现有节点之间。它总是创建一个独立的子路径,并且根据填充规则(12.1.2),此操作可能会在填充区域中产生空洞。虽然这可能有用,但有时将节点并入路径并避免创建独立的子路径更为合适。要做到这一点,退出节点工具,将复制的节点粘贴为独立路径,根据需要定位该路径,并将其与目标路径合并。

12.5.4 连接与断开

连接两个端节点,首先选择它们。这些节点可以是同一开放子路径的端节点,在这种情况下,连接它们将闭合该子路径。也可以是属于不同子路径的节点,在这种情况下,你将这些子路径连接成一个单一子路径。它们还可以属于不同的路径对象,在这种情况下,这些对象将合并为一个路径(并采用第一个选中的路径的样式)。

有两种方法可以连接节点,这与节点控制栏上的两个连接按钮对应。第一种方法——“连接节点”按钮或 Shift-J——实际上是将两个端节点移动并合并为一个单一节点。第二种方法——“与路径段连接”按钮——则保留端节点的位置,但在它们之间添加一个新的路径段。如果你使用第一种方法,但又不希望其中一个端节点移动,可以在按 Shift-J 时,将鼠标悬停在该节点上以锁定其位置(见图 12-22)。

图 12-22:连接节点和插入路径段

同样,有两种方法可以断开路径。第一种方法是选择一个或多个非端节点,然后点击断开节点按钮或按 Shift-B。这将复制每个选定的节点,但不会将其与原始节点连接,从而使路径在每个选定节点处断开,形成多个子路径。第二种方法是选择两个相邻的非端节点,然后点击删除路径段按钮,删除它们之间的路径段,如图 12-23 所示。

图 12-23:断开节点和删除路径段

使用任何这些方法剪切开放路径会在路径内产生新的子路径(12.1.1)。如果你想将路径分解为独立的对象,首先将其分解为子路径,然后使用路径 ▶ 分离将每个子路径分成独立的路径对象。

12.5.5 节点类型

中间节点可能有一个或两个控制柄,分别位于两侧。在 Inkscape 中,节点可以属于多种节点类型,这些类型在拖动控制柄或节点本身时表现不同(图 12-24)。

图 12-24:节点类型:尖点、平滑、半平滑、对称和平滑自动节点

  • 如果节点没有控制柄(它们都缩回了),或者一个控制柄与另一控制柄或路径段不共线,或者在拖动一个控制柄时另一个控制柄不动,那么这个节点被称为尖点节点——因为当两个控制柄成角度时,节点表示路径中的急转弯(尖点)。尖点节点以菱形表示。

  • 如果另一个控制柄的旋转始终与正在移动的控制柄保持共线,这种节点称为平滑节点,因为它使路径保持平滑流畅。平滑节点以方形表示。

  • 节点可能只有一个控制柄,一侧是贝塞尔曲线,另一侧是直线段,而节点的唯一控制柄可能被锁定为始终与该直线段共线——这样,当你拖动节点时,其控制柄会自动旋转以保持共线。这样的节点被称为半平滑;它也以方形表示,但与其他节点类型不同,它没有自己的按钮或快捷键。要将节点转换为半平滑,可以通过使选定段为直线按钮(12.5.6.1)将两个平滑节点之间的段转换为直线,或简单地缩回该段节点的内部控制柄(外部控制柄会与段对齐,节点变为半平滑)。你还可以通过将一个控制柄与直线相邻的尖点节点转换为平滑节点(Shift-S)一次,使其成为半平滑节点;再次平滑后,节点会变为完全平滑,并具有两个控制柄。

  • 平滑节点的另一个控制柄可以旋转和缩放,以始终与正在移动的控制柄共线且长度相同。这样的节点被称为对称节点,因为其控制柄总是围绕节点对称。对称节点也以方形表示。

  • 自动平滑节点,以圆形表示,是一种会在移动时自动调整控制柄的平滑节点。你不应该手动编辑自动节点的控制柄;如果这样做,节点将从自动平滑变为平滑节点。如果你使用自动节点,最好通过控制栏按钮(图 12-16)完全隐藏控制柄,以免它们干扰操作。

    自动平滑节点会调整其控制柄的角度和长度,以使相邻的路径段尽可能平滑。如果相邻的节点也是自动平滑的,它们的控制柄也会进行调整。例如,当你将一个自动平滑节点 A 移动到其相邻的自动平滑节点 B 旁边时,两个节点的控制柄会逐渐变短,并朝彼此旋转,从而保持它们之间的路径段,以及两侧相邻路径段的曲率最小。这种行为类似于 Spiro 曲线路径效果(13.3.7.2)。

要改变一个循环中的节点类型(尖点到平滑到对称到自动平滑,再回到尖点),按住 Ctrl 并点击它。要改变多个选中节点的类型,可以点击控制栏上的一个节点类型按钮,或使用快捷键:

  • 按下 Shift-C 使选中的节点成为尖点。第一次 Shift-C 仅改变节点类型,但不会移动控制柄;第二次 Shift-C 会收回选中节点的所有控制柄。

  • 按下 Shift-S 使选中的节点平滑。如果之前是尖点且控制柄未收回,它们将被旋转为共线;如果控制柄已收回,它们会被拉出并使其在一个角度下共线,以最小化曲率。

    如果一个节点在一侧有直线段(12.5.6.1),而另一侧有控制柄,则第一次 Shift-S 会使它半平滑,将单个控制柄锁定到直线段的方向。再次按 Shift-S 会延长第二个控制柄,使节点完全平滑。

  • 按下 Shift-Y 使选中的节点成为对称节点。

  • 按下 Shift-A 使选中的节点成为自动平滑节点。

将路径的所有节点从尖点切换为平滑或自动平滑会以一种典型的方式扭曲路径,去除直线和锐角,正如图 12-25 所示。

图 12-25:整个路径中节点类型的转换

12.5.6 控制柄移动

也许编辑 Bézier 路径段最简单的方法是通过拖动曲线本身,而不是节点或控制柄。这不需要选择任何节点,也不会移动任何节点。Inkscape 会自动调整两个相邻节点的 Bézier 控制柄,使曲线跟随你的鼠标,如图 12-26 所示。

图 12-26:曲线拖动

如果一个节点是平滑或对称的,拖动该节点一侧的曲线也会改变另一侧的曲线,因为节点一个控制柄的移动会被另一控制柄镜像。与自动平滑节点旁的曲线拖动会将该节点转换为平滑节点。

当然,你还可以拖动任何选中节点的贝塞尔句柄(如果没有看到句柄,请确保你在控制栏上按下了“显示句柄”按钮,图 12-16)。尽管句柄仅在选中的节点及其邻近的路径节点上显示,但句柄本身(与节点不同)是不可选择的。当你拖动句柄时,Inkscape 的状态栏会报告总位移以及句柄的当前角度和长度。

按住 Ctrl 时,你旋转的句柄会以 15 度为增量对齐。按住 Shift 时,同一节点的另一个句柄也会旋转相同的角度,保持句柄之间的角度(这对于平滑节点始终如此;不过使用 Shift 时,这对于尖点节点也适用)。按住 Alt 时,句柄的长度被锁定,因此只有它的角度发生变化。这些修饰符可以任意组合使用。

也可以使用键盘快捷键来移动节点句柄。在 12.5.7.3 中,你会看到<和>键进行缩放,而[和]键旋转多个选中的节点,就像它们是一个物体一样。从逻辑上讲,当你选中一个单独节点时,这些相同的键会旋转和缩放(即改变)该节点的贝塞尔句柄的长度,而不会移动节点本身,如图 12-27 所示。

图 12-27:使用键盘快捷键调整节点句柄

使用 Alt 键,你甚至可以分别缩放和旋转每个节点的句柄。只需使用键盘上的左侧Alt 键来缩放(使用<和>)或旋转(使用[和])单个选中节点的左侧句柄——即那个端点位于左侧,比另一个句柄更靠左的句柄。右侧 Alt 键则会影响右侧句柄。

12.5.6.1 段类型

如果你想通过将贝塞尔曲线转换为直线段来平整它呢?实际上,直线就是一个贝塞尔曲线,只不过它的两个句柄收回了——即与相应的节点重合。要收回句柄,Ctrl+点击它;要把收回的句柄从节点中拉出,按住 Shift 并拖动它远离该节点。

另一种将贝塞尔曲线转换为直线(并反向转换)的方法是使用控制栏上的段类型按钮。这些按钮要求至少选择两个相邻节点,但它们会作用于选中节点之间的任意多个段。使段为直线按钮(或 Shift-L)会收回任何拉出的句柄;使段为曲线按钮(或 Shift-U)实际上并不会将段变成曲线,但它会拉出句柄并将其放置在段上,这样你就可以手动移动它们,如图 12-28 所示。

图 12-28:改变段的类型

12.5.7 移动节点

重塑路径就像选中一些节点并拖动它们一样简单。属于这些节点的 Bézier 控制点会与节点一起平行移动(除了半光滑和自动光滑节点,在拖动时它们的控制点可能会旋转)。

与选择工具中的操作一样,简单的点击并拖动可按预期移动单个未选择的节点;如果拖动的是已选中的节点,那么你将一起拖动所有已选中的节点。按住 Ctrl 键时,鼠标拖动仅限于水平和垂直方向的移动。

箭头键以与选择工具中相同的方式和相同的距离移动选中的节点(6.5.1):不使用修饰键时移动 2 像素(默认值),按住 Shift 时移动该距离的 10 倍,按住 Alt 时移动 1 屏幕像素,按住 Shift-Alt 时移动 10 屏幕像素。

如果你按住 Ctrl-Alt 拖动一个节点,移动将限制在拖动节点的 Bézier 控制点及其垂直方向上。如果节点的一侧有直线段,则使用该线段的方向,而不是控制点的方向。所以,如果节点的两个控制点或相邻的线段共线,你可以在四个方向之一拖动它;否则,你可以在八个方向之一拖动它(图 12-29)。

图 12-29:按住 Ctrl-Alt 拖动节点的方向

你可以按住 Ctrl-Alt 并拖动多个选中的节点,但移动将仅限于你用鼠标拖动的节点的控制点/线段。

你通过鼠标拖动的节点可能会对齐到(7.3.1.2)指南、网格以及其他对象或节点。默认情况下,节点会对齐到指南和网格,但不会对齐到对象。你可以通过按住 Shift 键临时禁用对齐。

12.5.7.1 数字方式移动节点

单个选中节点的坐标会显示在节点工具的控制栏中的 X 和 Y 字段内(图 12-30);编辑这些值会将选中的节点移动到新的坐标位置。

图 12-30:使用 X 和 Y 可编辑字段定位节点

如果选中了多个节点,这些字段会显示它们的平均坐标——换句话说,就是选中节点的几何中心坐标。在这种情况下,输入这些字段中的一个值会整体移动选中的节点,使它们的中心位置达到新的坐标值。

你还可以使用一个你已经见过的工具对选中的节点进行对齐:对齐和分布对话框(7.4)。当你处于节点工具时,此对话框会显示节点部分,四个按钮可以让你:

  • 将选中的节点水平对齐。

  • 将选中的节点垂直对齐。

  • 将选中的节点在 X 轴上均匀分布。

  • 将选中的节点在 Y 轴上均匀分布。

对于节点对齐,Relative to 下拉列表让你选择对齐的参考点。例如,如果你想垂直对齐选中的节点——在一列中——你可以选择该列是否位于选择的中间(默认设置),最小值(左边缘),最大值(右边缘),或是第一个选中节点或最后一个选中节点的位置。

12.5.7.2 节点雕刻

简单的拖动会使所有选中的节点移动相同的距离,这通常是你需要的。例如,在一个示意的面部轮廓(图 12-31,左侧)中,你可以通过选择两个节点并将它们拖到右边,轻松地将鼻子变长——对于这种风格的画法,这个结果是可以接受的。然而,如果你有一个更复杂且更逼真的绘图,包含大量节点(图 12-31,右侧)呢?无论你选择多少个节点,拖动它们都会引入不连续性,并破坏面部的自然轮廓。

图 12-31:拉动两个鼻子

在这种情况下,能够按不同的距离移动不同的节点是非常有用的,这样鼻尖会移动得最远,而其他节点随着离开鼻尖的路径逐渐移动较少。这正是 Inkscape 在你选中所有鼻子节点并按住 Alt 拖动鼻尖节点时所做的。这种技巧叫做节点雕刻

在最简单的情况下,当所有选中的节点在同一条直线上时,按住 Alt 并拖动中间的选中节点,会将路径弯曲成一个平滑的钟形曲线。最远的选中节点保持不动;被拖动的节点完全移动;其他选中的节点则按一定的中间距离移动。现在,如果你选中的节点形成了一条弯曲的线、文本转化为路径,或者是一个逼真的鼻子,按住 Alt 拖动会平滑地弯曲它们,同时保留它们的特征(图 12-32)。

图 12-32:使用 Alt 雕刻节点

在按住 Alt 拖动时,决定移动哪些节点以及移动多远,拖动节点的距离是沿着一条直线(空间方向)计算的,而不是沿着路径。

如果你在路径的某部分没有足够的节点进行雕刻,只需选择已有的节点并按几次 Insert 键,以在路径的该部分填充节点。在雕刻具有许多密集节点的复杂形状时,例如位图追踪(18.5),隐藏它们的贝塞尔控制柄(通过取消按下控制栏上的按钮),这样它们就不会干扰,并通过从一个节点扩展选择来选择节点(12.5.2)。

节点雕刻让人联想到 Tweak 工具(12.6),因为它使路径编辑更加自然,并且让你能够从简单的形状中发展出复杂的形状。然而,与 Tweak 不同的是,这种技术不会创建或删除节点——总体而言,它更具确定性。对复杂的分散路径进行反复调整,最终会简化并退化整个路径,即使你没有用工具触及某些细节。而节点雕刻则不同,只有选定的节点会受到影响,不论你将选定的节点来回拖动多少次,都不会发生退化。

12.5.7.3 节点变换

变换节点是什么意思?你已经知道许多移动节点甚至雕刻节点的方法。那么这有什么不同呢?

请记住,在选择器工具中,变换不仅包括移动,还包括缩放和旋转(第六章)。这些变换对于路径上的一组节点也非常合理——如果你把这组节点看作一个“对象”。

[1.1]

控制栏上的显示变换手柄按钮正是执行这一操作:显示八个缩放手柄——与选择器中的完全相同——围绕路径上选定的节点(图 12-33)。与选择器中的操作一样,如果你点击任何一个选中的节点,缩放手柄会切换为旋转/倾斜手柄,反之亦然(参见 6.3)。选择器工具中的大部分修饰符同样适用:按住 Ctrl 进行缩放以保持比例,按住 Shift 进行缩放以围绕中心进行缩放,按住 Ctrl 进行旋转以将角度对齐到 15 度增量。

图 12-33:变换选定的节点

节点变换同样可以通过键盘快捷键实现。就像在选择器中一样,<和>键可以缩放选定的节点,[和]键可以整体旋转节点。没有修饰符时,旋转以 15 度为增量,缩放以 2 像素为增量;按住 Alt 键时,相同的按键会以当前缩放级别下的 1 屏幕像素进行旋转和缩放。H 和 V 键用于水平和垂直翻转(反射)。

默认情况下,键盘上的缩放、旋转和翻转操作是围绕选定节点的几何中心进行的。然而,如果你将鼠标光标悬停在其中一个节点上,它会保持固定,而其他选定节点会围绕它作为中心进行缩放或旋转。例如,你可以通过按 Ctrl-A 选择一个对象的所有节点,然后将光标悬停在某个节点上,并使用[和]键围绕该节点旋转整个对象。

12.6 路径调整

你已经在 8.9 中看到过如何使用 Tweak 工具(W, Shift-F2)在对象中绘制和抖动颜色,在 6.10 中,也了解了如何用它来移动和变换对象。这个多功能工具剩下的模式——推拉缩放/放大吸引/排斥粗化——用于编辑路径。

Tweak 工具在编辑路径的方式上与节点工具有本质的不同。节点工具,顾名思义,允许你编辑节点,并且你需要具备一定的知识,了解节点如何定义路径的形状。而使用 Tweak 工具时,你可以忘掉任何有关节点的知识;只需将路径当作一个可塑的物体与之交互,就像一块雕塑泥,可以在任何位置、任何方向上弯曲和雕刻它。虽然这对于技术绘图来说几乎没有用,但调整路径非常适合创作艺术图像,比如卡通图。

Tweak 工具适用于任何选中的对象。例如,你可以全选(Ctrl-A)并在推拉模式下“涂抹”整个绘图。该工具甚至可以进入组内并作用于组内的单独路径。如果你在没有选中任何对象的情况下尝试使用它,它会通过状态栏消息提醒你先选择一些对象。

12.6.1 宽度和力量

在任何 Tweak 工具的模式下,你所使用的是一个圆形的画笔(位于光标中心的橙色边缘圆形),用它“涂抹”选中的对象以改变它们。宽度参数控制画笔的大小,而施加的效果量取决于力量参数,以及如果你使用的是压力感应板,笔压也会影响效果。有关这些参数的更多细节,请参见 6.10。

要在正确的位置以适当的力量(包括笔压)和正确的画笔大小施加恰当的拖动,需要练习。然而,这项技能非常值得——过去在节点工具下显得笨拙且耗时的操作,使用 Tweak 工具后往往更加迅速且自然。

12.6.2 保真度

对路径的任何微调都会稍微扭曲——或者说是简化,就像简化命令一样——整个路径,包括你没有用画笔触碰到的部分。

保真度值允许你控制这种寄生简化的程度。这里的权衡是结果路径中的节点数量。低保真度下,结果路径将节点较少,但可能比你能接受的更扭曲。而高保真度则尽量减少变形,但路径可能会有很多节点——这会增加 SVG 文件的大小并减慢 Inkscape 的速度。

最佳的保真度值取决于你作品的性质。如果你正在雕刻无定形的块状物,你可以选择较低的保真度,大约 20. 然而,如果你正在推拉或扩展一个已转换为路径的文本字符串,并希望变形区域外的字母保持尽可能干净且易读,那么你需要将保真度提高到 80 或更高。

在幕后,Tweak 工具将路径重塑为一个“近似多边形”,该多边形由成千上万的细小直线段组成,调整该多边形的顶点,然后再将其转换回由 Bézier 曲线段构成的路径。保真度级别控制此转换的精度,从而影响结果中的节点数量,但无论如何都无法得到与原始路径完全相同的节点——一些节点始终会被移位和更改,就像简化操作后那样。

12.6.3 推模式

Push 是 Tweak 工具的默认模式。要从任何其他模式切换到 Push 模式,按 Shift-P,或点击控制栏上的按钮。

Push 是一种通用的雕刻模式。在此模式下,当你拖动时,选定路径上被画笔覆盖的部分会朝着你拖动的方向移动,只要按住鼠标按钮或触控笔,直到松开为止,如图 12-34 所示。

图 12-34:Tweak 工具的推模式

根据需要调整画笔宽度,你可以通过推动任何路径将其变形为几乎任何其他形状——你还可以用它来进行小的调整,比如压平一个凸起、弯曲一个附加部分或弯曲雕刻网格。由于画笔呈钟形轮廓,推动的路径会相应地软化并平滑地弯曲,如图 12-35 所示。

图 12-35:在推模式下雕刻路径

12.6.4 Shrink/Grow 模式

Shrink/Grow 模式(Shift-S)会使路径的每个点沿路径边缘的垂直方向移动,可以向内(收缩,普通拖动)或向外(扩展,按 Shift 拖动)。要快速从工具的任何其他模式切换到此模式,按住 Ctrl 并拖动以缩小,按住 Shift+Ctrl 并拖动以扩展。

Shrink/Grow 模式与 Inset 和 Outset 命令非常相似(参见 12.4),不同之处在于,Tweak 工具始终只对路径的一部分进行柔和操作,而不是整个路径。你可以使用此模式来调整细节丰富的图形的明暗——例如雕刻、手写涂鸦,甚至是文本(转换为路径后),如图 12-36 所示。

图 12-36:Tweak 工具的 Shrink/Grow 模式

Shrink/Grow 模式允许你通过 Shift-拖动轻松追踪路径的移动边缘:通过使用小尺寸的画笔,你可以从路径中生长出附加部分和分支,且长度不受限制。(你也可以在 Push 模式中实现这一点,但 Grow 模式对此任务更为简便。)此外,Shrink 模式可以作为一种快速的橡皮擦——轻松剪切路径、去除小碎片和修剪长画笔笔画,正如图 12-37 所示。

图 12-37:将 Shrink 模式用作橡皮擦

12.6.5 吸引/排斥模式

吸引/排斥模式(Shift-A)通过将路径上每个受影响的点朝向(吸引,普通拖动)或远离(排斥,按住 Shift 拖动)光标点移动,从而挤压或爆炸任何位于画笔下的路径。有时,这看起来可能与收缩/膨胀模式相似,但区别在于吸引/排斥模式不关心被调整路径的方向;该模式将一切围绕画笔的中心对称地移动(见图 12-38)。

图 12-38:调整工具的吸引/排斥模式

12.6.6 粗化模式

粗化模式(Shift-R)随机扭曲你应用画笔的路径边缘,而不会改变路径的整体形状,如图 12-39 所示。轻微的粗化使边缘弯曲不平,而强烈的粗化则将边缘撕裂并爆炸成随机的斑点和污渍。

图 12-39:调整工具的粗化模式

这个操作,尤其是高保真度时,会添加大量的节点。如此粗糙的路径可能会变得难以编辑——用节点工具处理起来很别扭,使用调整工具可能会非常慢。我建议在需要时使用推拉、膨胀和收缩来最终确定路径的整体形状——只有在最后一步,才需要将其粗化。

第十三章:路径效果

Inkscape 有三种主要的可扩展机制:滤镜、路径效果和扩展。如果你是一个开发者,渴望添加一个不需要成为矢量编辑器核心功能的新特性,那么你应该研究一下这些机制。滤镜(第十七章),源于位图处理软件,主要用于改变颜色和纹理;在本章中,继续讨论形状和路径的主题,我将描述那些为简单的 SVG 路径增添了全新复杂性和激动人心的交互式路径效果。扩展是为 Inkscape 用户提供新功能的最通用(但最少交互性)方式,相关内容在第十九章中有详细介绍,尽管我们将在 13.4 节中讨论路径处理扩展。

13.1 路径效果的工作原理

实时路径效果(LPEs),或者简单地称为路径效果,是一种易于使用(对最终用户而言)但功能强大的(对开发者而言)机制,用于修改路径的可见形状——例如,圆角、使平滑路径变粗糙,或通过拉伸或捏合使其变形。当你对路径应用路径效果(或多个路径效果)时,原始的效果前的路径仍然存在——你可以随时查看和编辑它。每次你编辑原始路径时,可见的效果后的路径都会根据原始路径和效果参数重新计算。这就是“实时路径效果”中“实时”的含义!

Inkscape 的路径效果是矢量图形基本原理的另一种应用:不是对对象做出一些永久性和破坏性的改变,而是保留原始对象不变,并记录如何应用该变化。之后,原始对象和效果的参数可以在任何时候单独进行编辑。

尽管名字如此,路径效果不仅适用于路径,也适用于形状(第十一章)——这些形状仍然是形状,并且依然可以像普通形状那样进行编辑,使用其形状工具中的句柄或数字参数(图 13-1)。路径效果也可以应用于一个组,得到的效果就像将效果应用于该组中的所有路径和形状一样。路径效果从不应用于文本对象、克隆或位图。

图 13-1:应用于路径(左)和 3D 方框(右)的素描效果(13.3.4.1)

当路径效果应用于对象时,唯一改变的是对象的可见形状;如果你想以非破坏性方式改变其样式,可以尝试使用滤镜(第十七章)。路径效果可以相互堆叠,使得一个效果的输出成为下一个效果的输入。

路径效果是 Inkscape 专有的功能;与滤镜等功能不同,路径效果并不是 SVG 标准的一部分。然而,它们是以 SVG 兼容的方式实现的。换句话说,如果你将一个使用了路径效果的 SVG 文件加载到任何 SVG 查看器中(或加载到不支持此效果的旧版本 Inkscape 中),你将看到与最新 Inkscape 中相同的可见路径——只不过无法访问原始路径和效果参数。

不幸的是,显示兼容性(你的文件在所有 SVG 查看器中保证看起来一样)并不意味着编辑兼容性。如果你在其他编辑器或旧版本的 Inkscape 中编辑带有路径效果的 SVG 文档,你将编辑可见路径,忽略了效果。如果你随后将编辑过的文件重新加载到一个支持该效果的 Inkscape 版本并尝试在其中编辑,它的修改将会丢失,因为新的可见路径将会根据未更改的原始路径和效果参数重新生成。更糟糕的是,路径效果及其解释列表没有标准化;没有保证未来版本的 Inkscape 会以完全相同的方式实现你所使用的所有效果。

尽管存在这些潜在的缺点,路径效果仍然是 Inkscape 的重要技术,自从其诞生以来,已经广泛应用于整个软件中。在内部,许多命令和功能都通过路径效果实现。举例来说,包括在钢笔和铅笔工具中的压力感应(14.1.2.2)和形状化(14.1.5)笔画,此外还有这些工具中的 Spiro 和 BSpline 模式(14.1.4),以及 Power Clip 和 Power Mask(13.3.12)。

13.2 管理路径效果

Inkscape 自带了一些示例 SVG 文件(位于 Inkscape 数据文件夹下的 inkscape/examples 文件夹中,你可以在首选项的系统页面查找)。其中一些示例文件(文件名以 live-path-effects 开头)展示并解释了部分 Inkscape 路径效果。让我们加载并探索其中一个,快速了解路径效果的外观和行为。

当你选择一个应用了一个或多个路径效果的路径对象时,你会注意到在状态栏中会显示相关信息——例如,“路径 328 节点,路径效果:沿路径图案,粗糙化,背景层”。你可以使用复制/粘贴技巧将相同的效果(或效果堆栈)重用到任意数量的路径上:复制源对象(Ctrl-C),选择其他路径(或形状)对象,然后使用路径 ▶ 粘贴路径效果命令(Ctrl-7)。

要清除路径效果并恢复到原始路径,请使用 删除路径效果 命令,位于 路径 菜单中。然而,如果你想保留效果的结果并忘记原始路径(这有时称为“扁平化”或“烘焙”效果),请使用 对象转路径 命令(Shift-Ctrl-C);这样,路径看起来完全相同,但效果会消失。

对带有路径效果的路径进行布尔操作(12.2)也会“扁平化”它们——也就是说,结果与事先对所有路径使用对象转路径相同(不过,布尔操作有一个不破坏原始路径的路径效果重新实现,13.3.10)。不幸的是,这对于合并和拆分操作(12.1.1)也是如此,尽管许多效果作用于子路径,因此能够在不丢失效果的情况下操作子路径将非常有用。(事实上,这就是合并和拆分在 Inkscape 早期版本中的工作方式。)一种解决方法是将不同的路径分组,然后对组应用效果。之后,你可以进入该组(4.9.1),根据需要合并或拆分组内的路径,而不会丢失组的效果。

节点工具(12.5)编辑的是 原始 路径,而不是应用效果后的 可见 路径。由于你正在编辑的原始路径本身不可见,因此如果启用显示路径轮廓工具栏按钮(图 12-17),节点工具可以选择性地将其高亮显示为红色。此外,正如你将看到的,许多效果具有可在画布上编辑的控制柄,你可以使用节点工具拖动它们。

13.2.1 路径效果编辑器对话框

路径效果编辑器对话框(Shift-Ctrl-7)是 Inkscape 用于路径效果的主要控制中心(图 13-2)。在这里,你可以为选定的对象应用单独的效果,并编辑已应用效果的参数。当选定的对象包含一个或多个路径效果时,这里就是管理效果堆栈的地方——你可以在堆栈中添加、重新排列或删除效果。

图 13-2:路径效果编辑器对话框:选定了一个包含三个效果的路径(Spiro 样条曲线、缝合子路径和素描)。

该对话框仅在选定单一路径、形状或组时有效——也就是说,你不能同时编辑多个路径上的效果。再次强调,路径效果可以应用于组这一事实提供了一个解决方法:如果你有许多路径或形状希望应用相同的效果和相同的参数,只需将它们分组,选择该组,并使用此对话框将效果应用于该组。之后,你只能在选择父组时访问或编辑这些效果,而不能选择组内的单个路径(记住,例如,节点工具总是选择路径,忽略分组)。

对话框顶部的列表显示所有应用于选定对象的效果。这些效果按从上到下的顺序列出——也就是说,列表中最上面的效果是第一个应用于源路径的。它的输出作为输入传递给第二个效果,以此类推,直到最后列出的效果的输出显示为最终结果。

你添加的任何新效果(使用列表下方的加号按钮)都会被放置在堆栈的末尾。你可以使用箭头按钮上下移动堆栈中的任何效果。点击每个效果名称前的眼睛图标可以禁用该效果,迫使 Inkscape 跳过它。要从堆栈中删除效果,请使用带有减号的按钮。

列表下方的面板是你编辑所选效果参数的地方。这些可能是普通的复选框或下拉列表,但有些效果参数属于更有趣的类型:

  • 数字可以是整数或小数,具体取决于参数的性质。当数字表示距离时,通常会有一个单位选择器。

  • 如果一个效果使用了随机数,对应的随机数参数给出了随机值必须落在的范围(参见图 13-3)。右侧的骰子按钮会重新随机化(技术上是重新播种)由该参数控制的随机值!

    图 13-3:路径效果的随机数参数

  • 链接参数用于当一个路径的效果使用另一个路径作为其参数之一时,如图 13-4 所示。这个链接路径可以是位于画布上某个地方的独立对象(在同一个文档中),也可以是完全存储在路径效果中的路径,而在文档中不可见!

    图 13-4:路径效果的链接参数

每个链接参数显示一排四个按钮:

编辑

切换 Inkscape 到节点工具,并让你编辑那个链接的参数路径——无论它是一个独立对象还是存储在效果内部的路径(图 13-5)。参数路径显示为深绿色轮廓。

这就像你手动切换到节点工具并点击控制栏上的“显示下一个可编辑路径效果参数”按钮(参见图 12-17),以导航到这个特定的链接参数路径(因为根据效果的不同,可能有多个)。

图 13-5:编辑路径效果的链接路径

复制

将链接的路径复制到剪贴板。

粘贴

将剪贴板中的路径粘贴到效果中,制作一个剪贴板路径的副本并将其存储在效果中。

链接

将复制到剪贴板的路径链接到文档中的原始路径。现在,编辑你复制的路径将改变该路径的效果。

一些效果只能链接到文档中的另一路径,而不能将其存储在内部,因此它们没有复制和粘贴按钮(例如,克隆原始效果,13.3.5.1)。

除了对话框中的数字控制外,一些路径效果还允许你通过节点工具和形状工具中的画布上手柄来可视化编辑它们的参数(在我讨论具体效果时,你会看到这些例子)。这些手柄通常是白色的,呈菱形,但它们可以是任何颜色或形状,只要它们不会与路径节点和节点手柄混淆,这些节点和手柄也可以在该工具中进行编辑。将鼠标悬停在路径效果手柄上时,通常会在状态栏中显示一些有用的提示。

在参数面板的底部,有一个折叠的部分,标题为“设置默认参数”。在这里,你可以将任何效果参数的当前值设为默认值。然后,当你将此特定效果应用到新对象时,默认值将被使用。

13.3 Inkscape 路径效果指南

路径效果仍然是 Inkscape 开发中的一个活跃增长领域,程序支持的效果列表在每个新版本中都会扩展。不幸的是,这也意味着路径效果在 Inkscape 中比其他部分更处于“进行中”状态。某些效果被标记为“实验性”,但即使是非实验性的效果,也并非所有效果都足够完善和可靠,不能常规使用。

本节列出了最新版本 Inkscape 中最有用和最实用的路径效果,并按主题进行了分组,并附有示例。图 13-6 显示了当你点击路径效果编辑器对话框中的加号按钮以添加新效果时所看到的内容。

图 13-6:Inkscape 中的所有路径效果(不包括实验性效果)

13.3.1 描边塑形效果

从历史上看,后来的 Inkscape 路径效果最初是受到了希望让路径的描边更加有趣和富有表现力的想法的启发——而不仅仅是标准的同宽 SVG 描边——即拥有可编辑的矢量画笔。现在,Inkscape 提供了两种不同的方法,在本节和随后的章节中进行了描述;每种方法至少有两种不同的实现,作为独立的路径效果。

13.3.1.1 功率描边

想象一下,你的描边路径沿其长度有额外的手柄,你可以水平拖动其中任何一个,以便在该区域内使路径变宽或变窄。这正是功率描边效果所提供的:一种可变宽度的描边,你可以通过拖动屏幕上的手柄(在节点工具中)来交互式地调整其轮廓。就像常规描边一样,你还可以调整端点类型(9.3)和连接类型(9.2),并可以调整各种插值和平滑设置。

Power stroke 是铅笔工具在压力敏感模式下应用于它所创建的路径的效果(14.1.2.2)。然而,像其他任何路径效果一样,你也可以手动将其应用于任何路径。只需选择一个路径,点击路径效果编辑器对话框中的加号按钮,并在列表中选择Power stroke(图 13-6)。这将在路径上创建一个带有(最初)三个紫色 Power stroke 控件的效果。切换到节点工具,拖动其中任何一个控件,查看路径的反应(图 13-7)。

图 13-7:Power stroke 效果

在该效果的参数中,最有用的是宽度因子,它可以在所有控件上均匀地缩放笔触宽度,以及端点类型,你可以为起始和结束节点分别选择。默认的零宽度端点将笔触从第一个/最后一个紫色控件平滑地渐变到路径的终点,而平头、圆头和峰头端点则保持从最终控件到路径末端的相同宽度。

如果你需要更多的紫色控件来塑造你的笔触,可以按住 Ctrl 键点击其中任何一个控件,然后拖动以创建一个新的控件,位置与原控件相同。要删除一个控件,按住 Ctrl+Alt 键点击它。

13.3.1.2 渐变笔触

Power stroke 的一个更简单的变体是渐变笔触效果,如图 13-8 所示。与任意形状的设计不同,它只是在笔触的两端进行渐变——但这对于许多使用场景来说已经足够。这种效果显示了两个圆形控件,它们只能沿路径的中心线移动,指示路径开始变窄的位置。渐变平滑参数允许你调整渐变的程度,从三角形(0)到平滑的椭圆形(1)。

图 13-8:渐变笔触效果

渐变笔触和 Power stroke 的最大问题在于,它们依赖于路径中节点的位置,而不是路径上的距离。例如,渐变笔触中的数字起始/结束偏移是以路径中第一个/最后一个节点的单位来衡量的——因此当起始偏移为 1 时,起始渐变控件与路径上的第二个节点重合。许多路径操作(如简化功能,12.3)不会保留节点位置,这使得渐变笔触和 Power stroke 的表现变得不可预测。

13.3.2 路径弯曲效果

路径沿线图案和弯曲效果实现了另一种可编辑向量画笔的方法(图 13-9)。它们都取一个路径(称为图案)并将其沿另一个路径(称为骨架)进行弯曲和/或拉伸。像往常一样,路径效果中,骨架路径和图案始终是可编辑的,结果会实时更新。

图 13-9:沿着骨架弯曲一个图案

这也被铅笔工具使用:你可以将预定义的固定形状分配给铅笔笔画,而不是由压力敏感平板笔控制的强力笔划(参见图 14-12 示例)。你还可以将使用普通 SVG 笔画绘制的现有图形尝试应用各种图案。

13.3.2.1 路径沿线图案

路径沿线图案和 Bend 效果的主要区别在于哪个路径是骨架,哪个是图案。在路径沿线图案中,你应用效果的路径是骨架,而图案是通过链接参数连接的。

该效果非常适合应用于任意复杂骨架的简单、可能重复的图案。链接的图案路径可以是文档中的独立路径对象,也可以是效果本身内部存储的路径。结果将获得骨架的样式。这是钢笔和铅笔工具中形状选项所使用的效果(14.1.5)。

一旦你将路径沿线图案应用到骨架路径上,你需要通过图案源链接参数提供图案。编辑按钮不会起作用,除非你先粘贴或链接某个图案路径,因此操作的常规顺序如下:选择一个图案路径,复制它(Ctrl-C),选择一个骨架路径,给它分配路径沿线图案,然后将图案粘贴或链接到它,如图 13-10 所示。如果你在钢笔或铅笔工具的形状列表中选择“从剪贴板”选项,你还可以自动将已复制的图案应用到新绘制的路径上。

图 13-10:路径沿线图案效果

路径沿线图案效果可以使用以下重复模式之一:

单一

沿着骨架从起始节点放置一个图案副本,而不拉伸它。如果图案短于骨架,它只会覆盖骨架的一部分;如果图案长到根本无法适应,甚至不符合一次,它将不会被应用。

单一,拉伸(默认)

也会将图案的单个副本沿着骨架放置,但总是会拉伸或压缩它,以使其完全适应骨架的长度。Bend 效果始终使用这种模式;与路径沿线图案不同,在 Bend 中,重复模式不可更改。

重复

沿着骨架放置尽可能多的图案副本,但不拉伸它们,因此骨架的剩余部分(少于一个图案长度)保持为空。(这并不意味着图案的副本是相同的;骨架的曲率可能会明显扭曲它们,如图 13-11 所示。)

重复,拉伸

沿着骨架放置尽可能多的图案副本,并均匀地拉伸它们,使它们完全填充整个骨架长度。

图 13-11:路径沿线图案的重复模式

图案总是从路径的起点开始;如果你想让它反向排列,可以使用路径 ▶ 反转

路径沿图案效果还允许你调整一些距离参数

间距(仅适用于重复模式)

设置图案在路径上副本之间的间距。

正常偏移

将所有图案副本垂直于骨架路径移动。

切向偏移

将所有图案副本沿着骨架路径移动,使得第一个图案不从骨架的起点开始,而是从指定的距离开始。

这些偏移和间距参数默认使用绝对px单位。通过勾选“以图案大小为单位的偏移”复选框,你可以将它们表示为图案大小的乘数——例如,0.5 的切向偏移会将图案沿骨架移动图案宽度的一半,如图 13-12 所示。

图 13-12:路径沿图案的间距和偏移

默认情况下,原始图案被认为是水平的——即图案通过图案的水平轴与骨架对齐。通过勾选“图案为垂直(对于路径沿图案)”或“原始路径为垂直(对于弯曲)”,你可以将图案旋转 90 度,使其垂直轴与路径对齐(见图 13-13)。

图 13-13:路径沿图案中的图案方向

这两个效果都允许你改变图案的宽度。宽度参数可以用图案原始宽度的单位来测量,也可以用骨架长度的单位(长度单位下的宽度)。在这两个效果中,你还可以通过屏幕上的手柄来调整宽度,该手柄通过一个垂直的线段附加到骨架路径的一端(图 13-14)。

图 13-14:在路径沿图案中调整图案的宽度

13.3.2.2 弯曲

在弯曲效果中,你应用效果的路径就是图案,而骨架则通过链接参数连接。当你有一个复杂的图案,想要沿着一个简单的骨架路径轻微弯曲时,这种方式更加方便,多个弯曲路径可以共享这个骨架路径。类似地,链接的骨架路径可以是文档中的独立路径,也可以是效果内部存储的路径。结果将得到图案的样式。

对于这个效果,你从图案开始,应用效果,并使用弯曲链接参数连接到骨架。不过,与路径沿图案不同,弯曲效果提供了一个默认的两节点骨架路径,这个路径沿图案的水平轴拉伸——因此你可以直接使用编辑按钮编辑这个骨架(图 13-15)。或者,你可以从剪贴板粘贴一个骨架(该骨架本身可能已应用了一些路径效果),或者链接到剪贴板中复制的路径。

图 13-15:弯曲效果

13.3.3 变形效果

这一组效果会在你的路径上创建一个可编辑的外部框架,然后你可以编辑该框架,从而以各种方式变形或扭曲路径。例如,当你将复杂的形状嵌入到 3D 场景中(透视变形)或将标签贴到曲线瓶身上(格栅或信封变形)时,你将需要使用这个效果。与所有其他路径效果一样,这些变形既可以应用于群组,也可以应用于单个路径,并且该群组可以包含各种不同风格的对象(尽管该群组中的非路径对象和非形状对象,如位图或未转换为路径的文本,将不会受到该效果的扭曲)。

13.3.3.1 信封

这一组中最简单的效果——信封变形,创建一个矩形信封,四个边都可以作为贝塞尔曲线进行编辑。该效果将四个边视为四条独立的辅助路径(“弯曲路径”),这有点不便:你需要依次点击编辑按钮来弯曲四个边。复制和粘贴按钮允许你将信封的形状从一个对象转移到另一个对象,但这也需要四次独立的复制/粘贴操作。另一方面,四条边是独立的,意味着它们不一定需要相互接触,这使得变形具有更多灵活性,如图 13-16 所示。

图 13-16:在路径群组上进行信封扭曲(底部弯曲路径激活);红色轮廓(在节点工具中鼠标悬停时显示)显示了其中一个字母的原始未扭曲路径。

13.3.3.2 格栅

格栅变形效果是相同概念的一个更复杂的变种。它创建一个五乘五的控制点格栅,你可以单独拖动每个控制点(同样适用于节点工具),这使得可以进行更复杂、更精细的变形(见图 13-17)。

手动处理这么多点可能会很麻烦,因此该效果提供了一些简化工作流程的方法:水平/垂直参数的镜像运动使格栅对称,这样你只需要编辑其中一半;使用“仅使用外围”会完全移除内部点,仅限于外围的 16 个点。重置网格按钮可以清除所有出错的格栅编辑,并重新开始。

图 13-17:在路径群组上进行格栅扭曲;红色轮廓(在节点工具中鼠标悬停时显示)显示了其中一个字母的原始未扭曲路径。

13.3.3.3 透视

最后,透视变换效果专门用于路径的 3D 类变换——例如,这是你将文本放置在 3D 盒子侧面时所使用的效果(见 11.3)。在这里,信封只有四个角节点,且其边不能进行弯曲,如图 13-18 所示。该效果的参数允许你数值设置四个点的坐标,或使信封具有对称性。

图 13-18:一组路径的透视失真;红色轮廓(在节点工具中鼠标悬停时显示)显示了其中一个字母的原始未失真路径。

13.3.4 艺术效果

这一组效果旨在使物体看起来不那么几何化,更加有机或像自由手绘的效果。通常,这涉及到一定的随机元素。

13.3.4.1 草图

草图是一种艺术效果,将路径转换为像草图一样的图形,由多条笔画构成,就像艺术家在纸上草拟完美形状的过程一样(见图 13-19)。

图 13-19:草图效果

为了理解这个复杂效果的参数,注意草图由两种类型的图形元素组成:近似笔画和构建线条。近似笔画覆盖整个路径;它们通常是曲线,或多或少与原始路径平行(带有一定的抖动),并与原始路径保持一定距离。而构建线条则通过绘制直线,在路径的每个直线或近似直线的段落两侧延伸,以识别并强调这些段落。

对于近似笔画,你可以更改以下内容:

  • 路径上每个点的平均笔画数量(默认值为五)。将此参数设置为 0 可以隐藏近似笔画(仅保留构建线条)。较低的值使草图显得轻盈和试探性;增加数量则使草图更加大胆且喧闹,如图 13-20 所示。

    图 13-20:改变近似笔画的数量(构建线条关闭)

  • 笔画的最大长度(以px为单位)及其随机长度变化的范围(相对于最大长度)。

  • 后续笔画的最大重叠(以px为单位)及该参数的随机变化范围(相对于最大重叠值)。

  • 结束容差,影响近似笔画与原始路径之间的接近程度。

  • 近似笔画与原始路径的平均偏移;通过调整该参数,你可以使草图看起来既整齐紧凑,又宽松凌乱。

  • 最大的抖动和它的频率;这些控制笔画围绕原始路径的振荡方式(见图 13-21)。增加最大抖动会使草图更加凌乱,类似于增加偏移量,但更具随机性。增加频率则会让草图线条看起来更粗糙,因为它们在更小的尺度上抖动。

    图 13-21:改变近似笔画的抖动频率

对于构建线条,你可以更改以下内容:

  • 草图中的总线条数量(非平均值,默认值为五)。将此设置为 0 可以抑制构建线条,只保留近似笔画。

  • scale参数指示构造线的端点可以超出路径的直线(或近似直线)段的多远。

  • 最大的长度及其随机变化,用于设定构造线的长度上限(见图 13-22)。

图 13-22:调整构造线(近似的笔画已关闭)

13.3.4.2 Hatches

Hatches 效果与您之前看到的所有其他效果不同,它聚焦于路径的填充,而不是其笔画。它创建了一条填充路径的波动线,给人一种自由手绘艺术填充的印象。

填充的基本参数通过屏幕上的手柄进行控制,可以在节点工具中编辑。共有两对手柄:绿色的一对控制填充的密度(频率)和倾斜度,黄色的一对将填充线条弯曲成弧线。在每一对手柄中,圆形手柄为基准(可以放置在任何位置),而菱形手柄则通过相对于基准的位置来控制其参数,如图 13-23 所示。

图 13-23:Hatches 效果及其控制手柄

该复杂效果的其余参数控制填充形状的各个方面。频率随机性控制填充笔画密度的随机变化量;此值越小,填充的密度越均匀。

参数标签中的第 1 侧和第 2 侧指的是交替弯曲的两组方向——例如,如果填充是垂直的,则为底部和顶部。因此,Magnitude 抖动,第 1 侧控制了每个弯曲在底部的随机位置——即,填充在底部沿着原始路径的边缘跟踪的程度。

Parallelism 抖动会增加笔画方向的随机性,Half-turn 平滑度允许您调整弯曲角度的锐利度,直到形成圆弧。最后,Thickness 值会改变不同部分的填充笔画宽度。图 13-24 展示了一些示例。

图 13-24:调整 Hatches 效果参数

13.3.4.3 Roughen

Roughen 效果是路径效果生态系统中的通用噪声组件。它将路径的 Bézier 曲线细分为较短的段,并随机位移节点和节点手柄(见图 13-25)。

图 13-25:Roughen 效果

细分通过两种方式之一完成:要么指定最大段长度,要么给定将原始路径的每个 Bézier 曲线分成的段数。第一种方法(默认)更好,因为它不依赖于原始路径的节点,并且产生大致相等的段长度。

接下来,你可以选择节点抖动的幅度。最大位移参数将从上方限制此幅度——但如果勾选固定位移复选框,它还会限制节点的移动幅度为(细分后的)段长度的 1/3。也就是说,如果你想将节点抖动 10 像素,你需要在最大位移字段中输入 10,并且取消勾选固定位移复选框。如果未勾选移动节点选项,效果仅会随机旋转贝塞尔段的控制点,而不会移动节点本身。

13.3.4.4 简化

你已经在 12.3 中遇到过简化效果,它是一个一次性破坏性命令。现在,来认识一下它的温和、合作且完全可逆的“亲戚”:简化路径效果。

简化是一个强大的概念。你取一个路径,要求 Inkscape 从头开始重新绘制它,不看原始节点,但尽量保留整体形状——并进行一定的简化。结果可能或多或少有用,但它很少不令人愉悦。将简化与粗化一起归类是有道理的,因为它们的作用是完全相反的——尽管,当然,简化一个粗化的路径不会得到完全相同的原始路径,而只是得到一种不同的(更微妙的)艺术性扭曲,正如图 13-26 所示。

图 13-26:简化效果

该效果的参数包括简化阈值和通道次数,值得调整。(辅助线大小最好设置为 0;我无法找到此效果在画布上显示的辅助线有什么用。)

有时,将粗化效果叠加到简化效果上也是有意义的,这样简化就会创建一个具有特征的有机形状,而粗化则为其添加纹理,正如图 13-27 所示。

图 13-27:粗化叠加在简化效果之上

13.3.5 重复器与分形

一些效果不是扭曲源路径,而是以各种有用的方式简单地复制或乘以它。

13.3.5.1 克隆原始路径

这是一个通用的克隆效果,用于将一个路径的节点(更准确地说,是路径数据,包括所有节点和控制点的位置与类型)复制到另一个路径。与标准 SVG 克隆效果(第十六章)不同,这个效果只允许复制路径数据,而不包括其路径效果。克隆路径仍然是路径,因此你可以在原始路径上应用其他效果。例如,你可以有一个使用 Spiro 曲线的原始路径,以及多个在其上应用不同程度的粗化或简化效果的克隆路径。这个效果还允许你精确指定克隆对象从原始路径获取的属性或 CSS 样式(8.1)。

你甚至可以将一个路径链接到文本对象,而无需将其转换为路径。这样,文本仍然保持可编辑状态,但你也会拥有一个自动相同的路径,具有克隆原始效果,可以在其上叠加其他路径效果。

要使用此效果,首先需要一个路径对象,它将成为克隆(其自身的路径数据将被丢弃)。为其分配克隆原始效果。然后,选择并复制(Ctrl-C)你想要克隆的路径或文本。接着,再次选择具有克隆原始效果的路径,并在其参数面板中点击链接到项目按钮。(旁边的“选择原始”按钮用于选择该路径克隆自的对象。)然后,选择一个形状选项来精确控制将被复制的路径数据:

  • 带有 LPE(默认):显示所有路径效果的路径。

  • 无 LPE:路径未应用任何路径效果之前的状态。

  • 仅限 Spiro 或 BSpline:仅应用了其样条效果的路径(如有)(13.3.7)。

  • 无形状:没有任何内容被复制。

最后,你可以指定(以逗号分隔的列表形式)克隆将从原始路径获得的属性和 CSS 属性。一个单独的复选框控制变换的复制(第六章);如果未选中,克隆将始终精确地定位在原始路径的上方(或下方,取决于 z 顺序)。

13.3.5.2 切割 [1.1]

切割效果将一个路径(或形状或组)通过直线切割成两半。这个“把人一分为二”的技巧会生成两个独立的路径,你可以分别移动、变换和样式化它们(图 13-28)。这两个生成的路径中,一个(应用了切割效果的路径)存储并允许你编辑整个路径,但只显示其中的一半。另一个路径没有任何路径效果,但当你编辑第一个路径时,它会自动更新以反映更改。你可以通过控件调整切割线的位置和角度。

图 13-28:切割形状

13.3.5.3 镜像对称

此效果会将原始路径进行镜像,并围绕一个对称轴创建其副本,你可以通过节点工具中的屏幕控件进行交互式调整(图 13-29)。镜像轴的长度无关紧要,只有其位置和方向才是关键。在镜像轴上的三个控件中,端点控件会旋转它,而中间的控件则使其平行移动。

图 13-29:镜像对称效果

默认情况下,效果会将副本创建为原始路径的子路径,因此在原始路径和副本重叠的区域,填充规则决定了绘制方式(12.1.2)。如果启用融合路径,路径将永远不会重叠,因为它们会被镜像轴裁剪;如果你同时启用融合对面,则裁剪本身也会镜像,因此你只会看到超出镜像轴的路径部分(以及它们的反射)。分割元素选项会为镜像副本创建一个单独的路径元素,而不是子路径,它可以有不同的样式;你可以手动变换或节点编辑这个镜像路径——但如果你之后对原始路径进行变换或节点编辑,镜像副本对象会同步并覆盖你的更改。

甚至像镜像对称这样的简单效果,如果应用到一个大型复杂的星形,例如图 13-30 所示,也能产生令人惊叹的深度图案。

图 13-30:猫头鹰的眼睛:一个镜像的 183 射线星

13.3.5.4 旋转副本

这是镜像对称效果的近亲,区别在于它可以创建任意数量的副本,这些副本被放置在一个圆圈上,你可以通过节点工具的屏幕手柄调整圆心和起始角度。你还可以选择镜像每第二个副本。你也可以启用分割元素选项,为每个副本创建独立的路径元素,而不是子路径。请注意,调整起始角度会旋转所有路径副本,包括原始路径(即使节点工具仍会显示原位置,如果你启用了红色轮廓),如图 13-31 所示。

图 13-31:旋转副本效果

13.3.5.5 填充多重[1.1]

填充多重效果会创建一个新的路径,链接到一个或多个原始路径,并覆盖它们之间的整个空间——就像这些路径的端点通过直线段连接形成一个单一的闭合路径一样。原始路径可以有一些自己的路径效果(例如,路径形状效果)。编辑任何链接路径时,填充路径会自动更新。这个效果非常有用,它甚至有自己的菜单命令:路径 ▶ 填充路径之间。

图 13-32:填充多重效果

你不能使用选择器进行节点编辑或转换填充路径,但你可以为其设置自己的填充和/或描边样式。你还可以选择并删除它作为一个独立的对象,而不会影响链接的路径。

尽管名称中有many(许多)一词,这个效果在只有一个原始路径时也同样有效。当你给带填充的路径分配 Power stroke 或 Taper stroke(13.3.1.1),也会创建一个填充路径,这个路径与原始路径关联,重新生成其原始的填充样式(否则会丢失)。这样,你就可以获得一个有形状的笔触和其中的填充,且当你编辑路径时,两者都会实时更新。

13.3.6 VonKoch

这个递归效果会将原始路径重复两次(作为子路径),并进行位移、缩放和旋转;然后,它会对这些副本重复相同的操作,如此反复进行,直到达到指定的数。这是一个分形的例子——一种自相似的形状,在不同的缩放级别下看起来是相同的。

三条辅助路径控制副本的变换:一个参考段(最初,水平跨越源路径)和两条生成路径(最初,水平跨越两个第一代副本),如图 13-33 所示。

图 13-33:多个 VonKoch 分形,源路径相同,但辅助路径不同

这些辅助路径是两节点的直线段;要编辑它们,请使用节点工具,并在其控制栏上点击显示下一个可编辑路径效果参数按钮一次(对于参考段)或两次(对于生成路径)。

13.3.7 样条

样条一词最早由造船工人使用,指的是一种有弹性的木条,它被固定在几个点上,并根据限制条件形成最自然平滑的形状。在计算机设计中,样条是一种数学曲线,它通过给定的点,并具有一些理想的特性,如平滑度和自然性。

贝塞尔曲线(12.1.4)是一种样条,但也有其他类型的样条。贝塞尔曲线具有灵活性和强大功能;使用它们构建路径已有许多年的传统。所有现代图形软件都以类似的方式支持它们,数以百万计的用户对此非常熟悉。然而,一旦尝试更好的东西,贝塞尔曲线的缺点就变得显而易见。

通过路径效果,Inkscape 实现了另外两种样条曲线类型:BSplines 和 Spiro 样条曲线。钢笔和铅笔工具可以直接生成 BSplines 和 Spiro 路径(14.1.4)。

13.3.7.1 BSpline

BSpline 是一种平滑曲线,刻画在由原始路径的节点组成的多边形中(见图 13-34)。它并不经过这些节点,而是将它们视为滑雪道上的标杆——尽量接近它们,但不会减速(也就是说,不会牺牲平滑度)。只有曲线的起点和终点节点位于 BSpline 上,而平滑的内部节点则是离曲线的。(实际上,这些离曲线的节点几乎表现得就像它们是一个单一庞大 Bézier 曲线的控制点,该曲线可以有任意数量的控制点,而不仅仅是两个。)

图 13-34:BSpline 示例

一个 BSpline 路径也可以包含尖点节点(这些节点确实位于曲线上,因为它们开始或结束一个弯曲段)。如果原始路径的某个节点拥有非零长度的 Bézier 控制点,那么它就会变成 BSpline 的离曲线平滑点;如果某个节点至少有一个控制点被收回,那么它就会被解释为一个尖点节点。要在 BSpline 中切换节点类型,在节点工具中使用 Shift-S(平滑)和 Shift-C 两次(尖点,第一个 Shift-C 只是改变节点类型,第二个 Shift-C 则实际上收回控制点)。

除了第一个/最后一个节点和尖点节点外,所有其他节点都是离曲线的这一事实,可能是 BSpline 在实践中的最大缺点。尽管如此,如果你希望路径始终保持自然平滑,并且比一系列 Bézier 曲线更容易操作,那么 BSpline 效果值得一试。

13.3.7.2 Spiro Spline

Spiro splines,由 Raph Levien 开发,是另一种定义曲线路径的方式。Spiro 路径需要一些时间来适应,但对于某些任务(如字母形状设计,图 13-35),它们相比 Bézier 曲线有明显的优势。与 BSpline 相比,Spiro 路径通常更难操作——有时甚至让人很难控制——但作为回报,它们在平滑度上达到了一个全新的自然水平。

图 13-35:通过 Spiro 路径创建的字母形状

Spiro 路径由一系列节点定义。一个 Spiro 路径没有离曲线的节点或控制点;与 BSpline 不同,Spiro 路径会经过它的所有节点。路径的曲率完全由节点的位置及其类型定义,如图 13-36 所示。该路径的行为非常类似于原始船舶制造商的spline——一根弹性杆,必须通过给定的点并假设最小可能的曲率以满足要求。

图 13-36:将常规路径转换为 Spiro 路径并再转换回

Spiro 路径的最大卖点是它总是非常平滑——不仅仅是表面或局部平滑,比如没有尖点,而是整个路径在平滑度上的一致性,这是通过贝塞尔曲线只有通过大量繁琐的调整才能近似得到的。使用 Spiro 时,移动一个节点可能会明显影响几节点远处的曲线。这需要一些适应,但结果可能值得付出努力。

对于贝塞尔曲线,主要问题是每个节点不仅有一个位置,还有它的内在方向和曲率,这些是由控制点定义的。所以,每当你移动贝塞尔节点时,还需要仔细调整它的控制点,以确保曲线保持自然平滑。使用 BSpline 或 Spiro 时,只需将节点移动到你想要的地方,曲线的平滑度会自动处理。

要创建 Spiro 路径,选择任何路径并为其指定Spiro 样条路径效果。没有参数。路径的每个节点根据节点类型(12.5.5)成为 Spiro 路径的一个点,如图 13-37 所示:

平滑节点

具有两条共线贝塞尔控制点的节点是 Spiro 路径上的平滑点。源路径上贝塞尔控制点的长度和方向会被忽略,只要它们保持共线(即节点是平滑的)。按 Shift-S 可将选定节点的控制点对齐,使其平滑。

半平滑节点

具有一条贝塞尔控制点与另一侧直线段共线的节点,在 Spiro 路径上表现得完全相同:它们位于直线与曲线之间,并强制它们平滑连接而不形成尖点。如果节点的一侧有直线段,第一次按 Shift-S 会使其变为半平滑。

尖点节点

源路径上的节点成为 Spiro 路径的拐角点。它们像弹性杆上的自由铰链一样,可以在任意角度弯曲。在两个拐角点之间,Spiro 路径始终是直线。要使节点成为尖点,按两次 Shift-C(第一次 Shift-C 只改变节点的类型,第二次实际上会收回控制点)。

图 13-37:在 Spiro 路径中玩弄节点类型

Spiro 样条的最大问题是某些点配置不稳定,导致出现狂野的环路和螺旋,而不是平滑的曲线(图 13-38)。不过,合理的点序列通常没有问题;你只需要避免节点间方向的剧烈变化,以防止这种不稳定性。

图 13-38:具有五个节点的发散 Spiro 路径

在使用节点工具编辑 Spiro 路径时,源路径的红色高亮可能会成为干扰;你可以通过控制栏上的切换按钮关闭它。

13.3.8 路径工具

这一类别包括对路径进行一些有用的调整,这些调整手动执行会非常耗时。

13.3.8.1 拐角(圆角/斜角)

圆角是设计和技术制图中非常常见的操作。矩形有方便的控制柄用于圆角处理(11.2.2),但普通路径并没有这个优势。当然,你可以手动圆化路径的尖角,但这是一项繁琐的任务,而且使得路径后续的编辑或变换更加困难。幸运的是,Inkscape 有一个路径效果,能够为你完成所有繁重的工作,同时保留原始路径的灵活性。它甚至比矩形圆角处理更好,因为它允许不同的圆角半径应用于不同的角,并且支持不同的圆角样式!

倒圆角意味着用弧线将角部圆化,而倒角意味着用直线段切割角部。为了增加趣味性,倒圆角和倒角都可以反转——即,围绕切角的对角线翻转。倒角可以是多步骤的——即,由多个直线段组成(显然,只有在多步骤倒角中,反转才会产生效果)。

你可以通过节点工具中的屏幕上的控制柄调整任意节点(不一定是尖角)的倒角/倒圆角大小,如图 13-39 所示。你还可以在参数面板中更改半径值;默认情况下,这个值(以及任何其他参数变化,如角类型)会应用于路径的所有节点,但如果启用了“仅更改所选节点”,则可以限制为仅对选定的节点应用。半径可以是绝对单位,也可以是相邻段长度的百分比。

图 13-39:角部(倒圆角/倒角)效果

13.3.8.2 节点

该效果通过将路径分割成子路径,来在路径(或一组路径)自交的地方创建间隙。图 13-40 展示了如何将带有自交的笔画路径转变为凯尔特结。

图 13-40:对一组包含自交路径的两条路径应用“节点”效果

它不一定是单一的自交路径。记住,你可以将任何路径效果应用于路径组——在使用“节点”效果时,这将强制所有路径在与组内所有其他路径交点处创建间隙。

该效果的间隙长度数值参数指定每个间隙的宽度,如果勾选框关闭,则以笔画宽度为单位,或以文档单位为单位。如果你将此效果应用于一个包含不同笔画宽度路径的组,"组:反向" 参数确保当路径 A 创建一个跨越路径 B 的间隙时,它会以路径 B(而不是路径 A)的宽度作为计算间隙宽度的基准。

在画布上,你可以单独控制每个交点。在节点工具中,请注意其中一个自交点有一个菱形的把手和一个在一侧打开的蓝色圆形指示器。点击该把手,指示器会翻到另一侧,现在在交点的另一条线上创建了间隙。再次点击它,你会关闭交点,去除任何间隙(指示器现在是实心圆形)。继续点击把手,会循环切换该交点的这三种状态。要控制另一个交点,只需拖动把手并将其放置到你需要的交点上。

13.3.9 子路径操作

一些效果专注于原始路径的子路径,并对它们做出各种有趣的操作,如连接或插值。

13.3.9.1 缝线子路径

那个出乎意料有用的缝线子路径效果仅适用于具有两个或更多子路径的路径(12.1.1)。它将源路径替换为一个连接子路径上等间距点的路径格网,路径数参数控制这些连接路径的密度。通过这个效果,你可以创建各种各样的头发、毛发、格栅、莫尔条纹或“电力场”,正如图 13-41 所示。

图 13-41:缝合子路径

如果一条路径有三个或更多子路径,每对子路径都会得到自己的连接格网(图 13-42)。这意味着随着你增加原始路径中子路径的数量,连接线的数量会爆炸式增长——因此不要在具有太多子路径的路径上使用此效果,否则 Inkscape 可能会卡住。

图 13-42:缝合三个或更多子路径

连接线不一定是直线——这只是默认设置。你可以使用缝线路径链接参数将任何现有的开放路径粘贴或链接作为缝线的模板,或者你也可以用节点工具编辑该模板。宽度缩放参数会在垂直于其起止方向的方向上缩放缝线路径(值为 1 时,给出其自然宽度)。相对于长度的宽度缩放参数使每条缝线的宽度取决于该缝线的长度,如图 13-43 所示。

图 13-43:调整弯曲缝线路径的宽度

最后,一组随机化(方差)参数使你能够打乱缝线的附着点,既可以沿路径(间距)打乱,也可以垂直于路径(边缘)打乱,分别应用于每条缝线的起始和结束部分,正如图 13-44 所示。

图 13-44:随机化缝线子路径

13.3.9.2 插值子路径

这个效果是“缝合子路径”(Stitch Sub-Paths)的自然补充。它不是直接从一个子路径绘制线条到另一个子路径,而是绘制多个插值子路径,位于原始路径的子路径之间。就像缝合子路径一样,你可以通过节点编辑或链接到一个路径来引导插值步骤的定位,正如在图 13-45 中所示。

图 13-45:插值子路径效果

为了获得最佳效果,子路径应该足够相似,理想情况下拥有相同数量的节点;否则,插值可能会产生难以理解的丑陋尖点。

13.3.10 布尔运算

你已经熟悉了路径上的布尔运算(12.2)。它们是一个重要工具,但也有一个大问题:它们是破坏性的。一旦你将两个路径联合起来,它们就不再是可分离的对象,因此你不能复制或克隆其中一个以供重用,也不能分别对它们进行节点编辑。原始对象的某些部分(在联合的情况下,就是路径重叠的区域)将永远丢失。再次说明,路径效果是一个自然的解决方案。

应用于一个路径的布尔运算路径效果会存储到另一个路径的链接,并使第一个路径看起来像是与链接路径进行布尔运算(联合、切割、除法、交集、差集或对称差集)的结果。第二个(链接的)路径不会被销毁,而是被隐藏(4.1),除非你取消勾选“隐藏链接路径”参数;然而,你可以通过效果参数面板中的“选择原始路径”按钮轻松选择该路径进行编辑。

例如,要制作图 13-46 中显示的“an”字母组合,我将布尔运算效果应用于“n”路径,然后选择“a”路径,复制它,再次选择“n”路径,并将其粘贴到效果的操作数路径参数中。原始的“a”路径仍然存在于文档中,但被隐藏了。

图 13-46:布尔运算效果

当我选择字母组合时,边界框会框住整个联合路径,但节点工具只能编辑“n”路径(如红色轮廓和高亮显示的节点所示);要编辑“a”路径,我需要点击效果中的“选择原始路径”按钮。请注意,这两个字母都是使用 Spiro 样条曲线(13.3.7.2)制作的,因此布尔运算效果叠加在了 Spiro 效果之上。

13.3.11 偏移

你已经看过常规的偏移命令(12.4),它们可以扩展(outset)或收缩(inset)路径,在每个点上垂直于路径方向。与普通的布尔运算一样,这些命令是破坏性的——一旦你偏移了一个路径,原始路径就会丢失。Inkscape 现在提供了一种非破坏性的方法来实现相同的效果。

偏移路径效果在节点工具中会显示路径上的一个单独的圆形控制点。您可以将该控制点拖动到路径上任何方便的地方;对于偏移而言,重要的是它与原始路径上最近点的距离。您还可以通过“偏移”参数以数值形式指定偏移量。

此外,您可以选择连接方式和斜接限制(请参见 9.2)。外凸路径类似于您通过给原始路径添加描边所得到的效果,因此这些参数使您可以访问这个假想描边的属性。特别地,通过将连接方式设置为斜接,您可以确保原始路径的尖锐角在外凸路径中保持尖锐,如 图 13-47 所示。

图 13-47:偏移路径效果

出于历史原因,Inkscape 还有几个路径偏移的实现,同样是可交互并可在画布上调整,但不是通过路径效果(它们是在路径效果发明之前添加到程序中的)。这些实现是路径菜单中的动态偏移和链接偏移命令,以及它们的快捷键(分别是 Ctrl-J 和 Ctrl-Alt-J)。动态偏移与偏移路径效果非常相似,而链接偏移可以通过将偏移效果应用于克隆原始效果(13.3.5.1)来模拟。我认为没有理由再使用这些过时的实现,因为现在有一种路径效果可以做同样的事情,且效果更好(特别是,路径效果可以偏移一个未闭合的路径而无需将其闭合)。

13.3.12 Power Clip 和 Power Mask

与布尔运算不同,普通的 SVG 剪切和遮罩(18.3)本身就是非破坏性的:您总是可以通过移除剪切或遮罩来恢复原始对象。那么,为什么要将这些功能重新实现为路径效果呢?

事实上,Power clip 和 Power mask 路径效果并没有什么特别的“强大”之处。它们的创建目的只有一个:能够创建一个反转的剪切或遮罩,揭示普通剪切或遮罩隐藏的内容,反之亦然。因此,它们甚至不能通过路径效果对话框进行分配;相反,您需要前往菜单,选择 对象 ▶ 剪切 ▶ 设置反向 (LPE)对象 ▶ 遮罩 ▶ 设置反向 (LPE)。之后,您可以在路径效果对话框中查看该效果的参数,其中包括用于启用或禁用该效果的复选框,以及切换反转的选项。

13.3.13 虚线描边

在标准 SVG 的虚线描边(9.4)中,究竟还能改进什么呢?事实证明,很多。

在 SVG 中,虚线模式是以描边宽度为单位指定的,但它与路径本身——其形状或大小——并没有任何协调。当处理一个简单的对称形状(例如矩形)时,如果虚线不能在角落处对称地连接,或者两条对称相等的边的虚线不同步,就会显得很烦人。虚线描边路径效果解决了所有这些问题。

在此效果中,你可以精确地告诉 Inkscape 你希望路径中有多少个破折号,而不是它们的长度。这样,即使你缩放或改变笔画宽度,破折号也始终与形状保持同步。如果启用“使用段”参数,你将在每个段落中获得指定数量的破折号——即在路径的每两个节点之间;如果段落长度不相等,破折号的长度也会不同。启用均匀破折号选项以修复此问题:现在,整个路径的破折号将具有与其最短段落相同的长度。

破折号之间的间隙由孔因子参数控制,范围从−1(所有间隙,无破折号)到 1(所有破折号,无间隙)。默认值为零,使间隙与破折号长度相同。

默认启用的半开始/结束参数使每个段落的开始和结束处都有一个半宽度的破折号,这样段落边界的组合破折号与其他地方的长度相同。当此参数关闭时,你将在每个段落的节点之间看到双倍长度的破折号(图 13-48)。

图 13-48:虚线笔画路径效果

此效果的最大缺点是,由于它通过独立的子路径模拟破折号,整个路径不能填充,因为 SVG 无法填充路径的子路径之间的区域。一个解决方案是使用“克隆原始路径”(13.3.5.1)来克隆没有效果的路径,并对该克隆路径应用所需的填充。

13.3.14 辅助效果

边界框和显示控制柄效果在你需要为路径创建持久的可视化效果时非常有用——例如,当你为类似本书的插图创建图形时。边界框效果将一个路径(其路径数据将被丢弃)转换为另一个(链接的)路径的动态更新矩形边界框。显示控制柄效果在路径上添加模拟节点和节点控制柄的子路径,就像它们在节点工具中显示的那样。

尺寸标尺效果将任何路径(不一定是直线)转换为带有细刻度和粗刻度的标尺,并可以调整大小和间距。测量效果是一个复杂的引擎,用于在路径的段落上创建测量;这与测量工具的功能部分重叠(6.9.6),但在特定任务上更为强大——提供大量颜色、尺寸、精度和标签格式的选项,如图 13-49 所示。

图 13-49:显示控制柄、边界框和测量段效果的示例

13.3.15 几何构造

最后一组路径效果将帮助你进行一些简单的交互式几何构造(图 13-50)。在路径效果对话框中,它们当前被标记为“实验性”,并且默认情况下是隐藏的。

图 13-50:几何构造扩展

通过三个点画圆

使用“钢笔”工具,点击三次创建一个三点路径,赋予此效果后,Inkscape 会创建一个通过这三点的圆。圆形永远不会被裁剪——即使当三条线在同一条直线上时它可能是无限的(在实际操作中,将点放置在同一条线上会导致效果不正常)。此路径效果没有参数。

通过中心和半径的圆形

路径的第一个节点给定了圆心,最后一个节点设置了半径。此路径效果没有参数。

平行

此效果创建一条通过锚点的线,这条线与连接路径起始节点和结束节点的线平行。您可以通过节点工具中的菱形句柄或通过平行路径效果的偏移参数移动锚点。要改变平行线相对于锚点的左右距离,请使用左长度右长度参数。

当您创建平行线时,原始路径——该路径与新线平行——会变得不可见:平行线现在成为该对象的可见路径,原始节点只能在节点工具中进行编辑。如果您需要始终自动平行的两条可见直线,请创建两条线,并将第二条线设置为第一条线的克隆原始(13.3.5.1),但选择不带 LPE选项。然后,选择第一条线,使用此工具将其转变为自己的平行线。

垂直平分线

这个效果类似于平行效果,不过它不是创建一条平行线,而是创建一条与给定段垂直并通过其中心的线。如果您需要两条线自动互相垂直,请在其中一条线上的路径效果中创建垂直平分线,然后打开路径效果对话框,添加克隆原始效果,并将其移动到垂直平分线效果之前。最后,选择第二条线对象,复制它,并粘贴到克隆原始链接参数中。

角平分线

这个效果类似于“垂直平分线”,但它平分的是由三节点路径创建的角度。只需将此路径效果赋给一个包含三节点的路径。

镜像对称

请参见 13.3.5.3 了解镜像对称效果的描述。

从点创建椭圆

此效果会根据原始路径中的点数进行调整。对于两个或三个点,它会创建一个圆形;对于五个点,它会创建一个恰好通过这五个点的椭圆。对于其他任意数量的点,效果无法完全精确,但它会尽力而为,创建一个近似的椭圆,尽量减少与所有点的偏差(图 13-51)。

可选地,您可以为椭圆添加框架或坐标轴。如果将“方法”参数设置为“强制圆形”,该效果将始终创建一个圆,无论是精确的还是近似的。

图 13-51:从点创建椭圆效果

13.4 路径扩展

在扩展 ▶ 从路径生成、扩展 ▶ 修改路径和扩展 ▶ 可视化路径子菜单中,Inkscape 提供了许多与路径相关的扩展(第十九章)。多年来,许多扩展已经重新实现为路径效果——具有画布上可编辑性、更好的与其他程序的集成,并且通常具有更丰富的选项。然而,Inkscape 仍然包含大部分已废弃的扩展。

其中一个原因是,作为一次性操作,扩展不会向文档引入任何非 SVG 属性,因此不像路径效果可能面临的兼容性问题那样容易出现问题(13.1)。扩展对于好奇的 Inkscape 用户来说,也更容易学习、实验并朝着新的方向发展。最后,这些扩展中有一些仍然具有路径效果中没有的独特功能或选项。

13.4.1 从路径生成子菜单

13.4.1.1 内凹/外凸光晕

该扩展向选定路径添加了指定数量的内凹或外凸路径(步骤),它们之间有一个宽度,每个进一步偏移的路径具有较低的透明度(图 13-52)。

图 13-52:光晕扩展可以被认为是“穷人的高斯模糊”。

13.4.1.2 拉伸,运动

这些扩展通过以给定角度和给定距离拉伸选定路径来创建一个原始的 3D 效果。结果是两个对象的组合,一个是原始路径,另一个是其拉伸裙带,您可以对其进行不同的样式处理。一个类似的拉伸路径效果目前标记为实验性(图 13-53)。

图 13-53:拉伸扩展

13.4.1.3 插值

该扩展创建两个路径之间的插值或混合——当您将一个路径转换为另一个路径时,形成一组平滑的过渡步骤。您可以指定插值步骤的数量和指数,如果与默认的 0 不同,指数会将混合向一个端点偏移,如图 13-54 所示。

图 13-54:插值扩展

这与插值子路径效果(13.3.9)类似。然而,与路径效果不同的是,此扩展具有插值样式选项,可用中间颜色绘制中间步骤。

该扩展通过生成中间步骤作为一组路径;“复制端路径”选项还会将原始路径的副本添加到该组中。由于插值始终连接两个路径的起点和终点,您可能需要反转其中一个路径(路径 ▶ 反转),以便获得所需的结果。

13.4.1.4 沿路径图案

这与同名的路径效果(13.3.2)类似,实际上,这是在路径效果被发明之前创建的该功能的第一个版本。与路径效果相比,扩展有一个优势:它可以使用一组对象(每个对象都有自己的样式)作为模式;而路径效果中,你只能使用单一模式的路径。要使用该扩展,选择模式路径或组和骨架路径(模式必须位于骨架之上,遵循 z 顺序),然后应用命令;其选项与相应路径效果的选项类似。

13.4.1.5 Voronoi 图和 Voronoi 图案

Voronoi 图(像素追踪器也使用它,18.5.2.6)是一种将平面镶嵌成多边形的方式,使得每个多边形上的每个点离其自身多边形的中心比离其他多边形的中心更近(如图 13-55 所示)。

图 13-55:来自选定 3D 盒子的 Voronoi 图(左)和作为圆形图案的 Voronoi 图(右)

这些扩展中的第一个通过从所有选定对象的中心生成镶嵌图案;第二个则创建一个随机的 Voronoi 图案,并将其作为填充分配给选定的对象(你随后也可以将其用于其他对象,详细信息请参见 10.8)。

13.4.2 修改路径子菜单

13.4.2.1 添加节点

这个有用的扩展可以在不改变路径形状的情况下创建额外的节点。你可以指定相邻节点之间的最大允许距离,或者指定每个线段将被分割成的段数。图 9-11 展示了此扩展的应用。

13.4.2.2 扁平化贝塞尔曲线和拉直线段

扁平化贝塞尔曲线扩展通过一系列直线段近似选定路径中的每条贝塞尔曲线;较高的平滑度值会导致更粗略的近似,使用更少的线段。拉直线段仅通过给定百分比缩短所有贝塞尔控制柄,因此将该值设置为 100%会将每条贝塞尔曲线转化为一条直线段,如图 13-56 所示。

图 13-56:扁平化贝塞尔曲线和拉直线段扩展

13.4.2.3 抖动节点

此扩展通过随机方向和随机距离位移所有节点来随机化选定的路径,位移的距离受限于可分别为 X 和 Y 设置的最大位移参数(例如,将 X 轴的最大位移设置为 0 将仅在垂直方向上抖动节点)。此外,你可以单独为节点本身和它们的贝塞尔控制柄启用抖动,就像图 13-57 所示。

图 13-57:抖动节点扩展

位移参数的分布决定了不同位移值的概率,如图 13-58 所示。通过将默认的均匀分布切换为帕累托分布,可以使较小的位移比较大的位移更可能发生(就像生活中一样,一个城市人口非常庞大的概率是非常小的)。高斯分布的峰值较为平缓,概率在峰值周围缓慢下降,但远离峰值时下降较快。对数正态分布看起来像帕累托分布,但其极端值更为极端,可能会远远超出最大位移范围。

图 13-58:Jitter 节点中的概率分布:仅水平位移,范围相同。

13.4.2.4 Fractalize

这也是一种随机化路径的方法。它会将原始路径中的所有贝塞尔曲线展平,然后在现有节点之间创建新的节点,并使这些新节点移动,同时保持原始节点不变。Subdivisions 参数决定每个段落被细分的次数(例如,10 次细分将一个两节点路径转变为一个拥有 1,025 个节点的路径,因为 2¹⁰ + 1 = 1025)。Smoothness 决定新节点的移动范围;较低的平滑度会产生较粗糙的路径。这种效果非常适合用于创建幻想地图中的海岸线(图 13-59)。

图 13-59:Fractalize 扩展

13.4.2.5 网格

该子菜单中的两个扩展将网格渐变(10.7)转换为路径并进行反向操作,考虑到 Inkscape 当前编辑网格节点的工具相对较差,这可能是一个救命稻草(10.7.3)。

13.4.2.6 像素捕捉

使用此扩展将所有选定路径中的所有节点对齐到像素网格边界,从而在以 96 dpi 导出作品时最大程度减少抗锯齿效果 (18.6.1.2)。

13.4.2.7 橡胶拉伸和旋涡

这些扩展会扭曲选定的路径,如图 13-60 所示。它们最适用于包含多个节点的路径,因为它们仅移动现有节点,而不创建新节点。旋涡扩展在启动时会围绕 Inkscape 中视图的中心进行操作;要将视图中心放置在选择的几何中心位置,请按 3 或选择 视图 ▶ 放大 ▶ 选择区域 (3.11)。

图 13-60:橡胶拉伸(左)和旋涡(右)扩展

13.4.3 可视化路径子菜单

13.4.3.1 数字节点

该功能将路径替换为一组点,每个点标记原始路径的一个节点,并用一个顺序号(文本对象)表示。你可以调整这些点的大小和数字的字体大小。

13.4.3.2 绘制控制柄

该扩展可视化所选路径的贝塞尔控制柄,类似于显示控制柄路径效果(13.3.14)。对于每个选定的路径,它会创建一个新路径,其中每个控制柄都是一个子路径。

13.4.3.3 尺寸与测量路径

尺寸扩展在选定对象(不一定是路径)周围创建一个框架和尺寸线;使用测量路径扩展可以向其添加实际的长度测量值。这与测量效果所做的类似(13.3.14)。

第十四章:绘图

从历史上看,矢量编辑器曾被称为矢量绘图—或者简而言之就是绘图—应用程序。而位图编辑器则有时被称为绘画程序。绘图和绘画之间的对比,源自传统媒介(纸张与画布),这一对比延续到了数字领域。尽管现在矢量程序已经用于更高层次的任务,例如排版和布局,甚至可能更为常用,但绘图仍然是这种工具最基本的使用场景。

的确,矢量绘图永远无法像位图那样具备自然主义和“绘画感”;即使是最好的矢量艺术,也会有那种可辨认的平滑、计算机生成的外观。然而,通常这并不是问题—它甚至可能是一个优势。此外,矢量编辑器拥有位图编辑器无法比拟的优点:它能够将每一笔作为一个独立的对象处理,这些对象永远不会合并或“平坦化”成其他对象(除非你告诉它这样做)。事实证明,这种无限的可调整性在制作好的手绘作品时,有时比模仿粉彩笔触或湿画水彩的能力更为重要。

Inkscape 提供了多个绘图工具供你选择,具体取决于你希望创作的艺术类型(图 14-1)。如果你需要直线几何或具有精确节点位置的样条路径,可以使用钢笔工具(14.1.1)。对于更为自由手绘的路径,可以使用铅笔工具(14.1.2),它会进行适当的平滑处理。对于复杂、自然主义的压力敏感填充笔触,模仿各种物理效果,如颤动或惯性,可以使用书法笔(14.2)。如果你需要在多个复杂笔触之间进行类似卡通的填充,Inkscape 提供了油漆桶工具(14.3)。

图 14-1:Inkscape 绘图工具一览

还有许多其他工具值得在本章中提到。你可以使用喷雾工具(4.7)来字面上用对象的副本或克隆绘制图形。调整工具对于艺术创作至关重要,无论你是用它来调整你的笔触(6.10),应用颜色(8.9),还是进行自由手绘路径的推移(12.6)。你可以使用橡皮擦工具(14.4)擦除绘图的部分内容。最后,Inkscape 还拥有一个专门的连接器工具用于绘制图表(14.5)。

本章如果不提到你可以轻松地旋转 Inkscape 的画布及其所有内容,使用 Ctrl-Shift-滚轮(3.13),就显得不完整了。你还可以通过视图 ▶ 画布方向子菜单中的命令进行翻转(镜像)画布。对于艺术家来说,能够将绘图调整到最方便的角度进行描绘,确实是一个很大的帮助。

14.1 钢笔和铅笔工具

传统上,钢笔与写字和草图绘制相关,铅笔则与艺术素描和绘画相关。在 Inkscape 中,铅笔和钢笔工具都是用来创建路径的。不同之处在于,当你希望精确控制单个节点的位置时使用钢笔工具,而铅笔工具则用于自由手绘,Inkscape 会自动处理节点和其他细节。像所有比喻一样,这个比喻是有些随意的,但它已经深入人心。

在本节中,我首先介绍钢笔和铅笔的基本操作,然后探讨这些工具共有的高级功能——绘图模式和笔画形状,它们共同使用路径效果(第十三章)。

14.1.1 钢笔工具

使用钢笔工具,通过点击画布来创建单独的节点,这与节点工具(12.5)相似,只不过它是针对创建新节点进行优化,而不是编辑现有节点。

切换到铅笔工具(Shift-F6 或 B),确保它处于默认的贝塞尔模式(控制栏上最左边的按钮),然后点击画布。你已经创建了新路径的第一个节点。只需移动鼠标(不点击)即可移动一个红色线段,显示如果你在当前位置创建下一个节点,路径将如何延展。

持续点击以添加更多节点。要完成路径,可以双击(这会添加一个节点并完成路径),或者右键点击,或按下 Enter 键(这两种方法都会完成路径,并取消红色线段,而不再添加任何节点)。直到此时,整个路径才会作为对象真正创建;你之前看到的只是一个虚拟的框架。完成路径的另一种方式是闭合它;如果你在路径的第一个节点上精确创建下一个节点(该节点会被一个方形锚点标记),路径就会闭合并完成。

如果你点击并拖动,而不是仅仅点击,你就创建了一个平滑的贝塞尔节点(图 14-2);当你拖动时,末端带有圆形控制柄的蓝色直线就是单个控制柄(用于起始节点)或两个对称控制柄(用于中间节点,12.1.4)。一旦你松开鼠标按钮,节点的控制柄就会固定(但路径仍在创建中)。

图 14-2:钢笔:已设置第一个节点,准备设置第二个节点

在你创建第二个节点之后,到目前为止定义的两个节点之间的路径部分变为绿色,最后创建的节点到下一个节点之间又会出现一个红色线段(图 14-3)。你可以无限制地重复这一操作——继续点击并拖动(以创建平滑的对称节点),或者仅点击(以创建尖角节点);在每一步中,你已布置的路径会变为绿色,而你即将创建的最后一段路径是红色的。

图 14-3:钢笔:已设置两个节点,准备设置第三个节点

要随时取消创建路径,请按下 Escape 键或直接切换到另一个工具。

14.1.1.1 节点类型

如你所见,点击并拖动会创建一个平滑的节点,并带有两个对称的控制手柄(除非这是路径的第一个节点,且只有一个控制手柄)。简单的点击会创建一个没有控制手柄的尖角节点。你还可以通过不共线的控制手柄来创建尖角节点;为此,点击并拖动,但当相对的控制手柄到达你想要的位置时,按住 Shift 键继续拖动。这会固定远端控制手柄,并允许你独立移动近端控制手柄,正如 图 14-4 所示。

图 14-4:使用钢笔创建尖角节点

你还可以在拖动控制手柄时按住 Ctrl 键,将其对齐到 15 度的增量(参见 6.3;你可以在首选项 ▶ 行为 ▶ 步骤中选择其他对齐值)。在创建节点之间移动鼠标时按住 Ctrl 键也会使最后创建的节点和鼠标点之间的方向对齐;这是一种轻松创建严格水平或垂直线条的方法,如 图 14-5 所示。

图 14-5:钢笔:使用 Ctrl 键对齐

14.1.1.2 返回

你可以随时在路径创建过程中后退。要取消最后添加的绿色线段,按一次 Backspace 或 Delete,或者多次按它来移除多个线段。移除最后剩余的节点将取消整个路径。

在第一次尝试时,通常不容易精确点击到你想要节点出现的位置。Inkscape 允许你在不最终确定路径的情况下,使用箭头键移动最后创建的节点(即绿色线段的末端),并且可以使用与其他工具相同的方便修饰符:按住 Alt 键移动 1 个屏幕像素,按住 Shift 键移动 10 倍距离(6.5.1)。

14.1.1.3 继续路径

当你使用钢笔工具时,任何单一选中的路径都会显示它的端节点(如果有的话,即如果它是开放的),这些端节点是小方形的锚点。(这对于你刚刚用该工具创建的任何路径都是如此——在最终确定后,它仍然是选中的。)这些锚点允许你继续添加到选中的路径(通过在锚点处放置第一个节点),或者关闭路径(通过从一个锚点画到另一个锚点)。

你也可以向选中的路径添加一个新的子路径(12.1.1)。为此,只需按住 Shift 同时 点击以创建第一个节点。之后,像平常一样创建并最终确定路径;你的路径将作为子路径添加到选中的路径中。选中路径的所有开放子路径会显示锚点,这意味着你可以关闭它们或将它们连接起来(图 14-6)。

图 14-6:钢笔:添加或关闭子路径

14.1.2 铅笔工具

铅笔工具(F6 或 P)类似于钢笔工具。主要区别在于,使用铅笔工具时,你不需要担心单独的节点或控制手柄;你只需手绘一条线,Inkscape 会用路径来逼近它。

14.1.2.1 平滑

当你使用铅笔工具绘制时,生成的路径总是比你鼠标拖动的实际轨迹更平滑。要更改应用的平滑程度,请使用工具控制条中的平滑部分。较小的平滑值会生成更精确、节点丰富的近似路径;相反,较大的值会创建更简化、节点较少的通用路径(图 14-7)。在平滑值最大为 100 时,大多数鼠标拖动将只在两个节点之间创建一个贝塞尔曲线段。

图 14-7:在不同平滑级别下的铅笔笔画

在数字平滑值旁边,有一个名为 LPE 基于交互式平滑的切换按钮,用于控制平滑功能的工作方式。当此按钮未按下时,启用旧方法,其中平滑操作在路径完成时以指定级别一次性应用,未平滑的原始路径会被丢弃。这样,平滑仅应用于铅笔工具中新创建的路径,并且之后无法更改。

当此按钮按下(现在是默认设置)时,源路径首先以最低平滑级别存储,然后应用简化路径效果(13.3.4.4)。这种平滑方法是完全可逆的(你可以通过移除路径效果来恢复原状)并且是可调的(你可以通过路径效果对话框中的效果参数或简单地在铅笔工具控制条中调整平滑值来改变平滑量,当选择了带有简化效果的路径时)。如果你喜欢新方法的交互性,但不希望文档中有路径效果,可以使用压平按钮去除效果并以当前平滑级别生成纯路径。

这种方法理论上很棒,但其实现存在一些问题。我发现,如果你想要最小的平滑效果,应该将值设置为 1(最大值为 100),而不是零。此外,在较低的平滑值下,简化路径效果有时会产生比原始路径更多的节点,而不是更少。

14.1.2.2 压力敏感度

曾经,在 Inkscape 中唯一使用平板笔压力信号的工具是书法笔(14.2)。随着时间的推移,Tweak(6.10,8.9,12.6)、橡皮擦(14.4)、喷雾(4.7)工具相继加入。现在,铅笔工具也可以使用压力敏感输入设备创建具有可变笔画宽度的路径。它通过 Power stroke 路径效果(13.3.1.1)实现这一点。

通过点击控制栏上的切换按钮启用压力感应绘图。此时,形状控制(14.1.5)消失了(因为压力控制的笔画不能有预定义的形状),而绘图模式按钮(14.1.4)被禁用。取而代之的是你会看到最小和最大宽度的数值控制(它们对应于笔的最小和最大压力),以及一个用于选择笔画端点类型的下拉框。这些控制仅适用于新创建的笔画;如果你想更改现有笔画的宽度或端点,可以通过其 Power stroke 路径效果进行更改(13.3.1.1)。

启用压力感应绘图会留下红色圆圈的轨迹;它们的大小表示每个点的压力,间距由笔的移动速度决定。一旦抬起笔,会创建一条带有 Power stroke 的路径,该路径近似(并进行了一些平滑处理)在绘制过程中记录的压力数据,如图 14-8 所示。

图 14-8:使用压力敏感平板笔绘制铅笔图

14.1.2.3 继续路径

与钢笔工具类似,在铅笔工具中,任何选择的路径都会在所有子路径的开头节点显示锚点。你可以通过从一个锚点画到另一个锚点来继续、关闭和连接子路径,也可以通过按住 Shift 键开始绘制来将新的子路径添加到选定的形状中。

14.1.2.4 使用 Alt 进行草图绘制

在铅笔工具中使用 Alt 绘制可以启用草图。在释放 Alt 之前进行的任何拖动都会被平均,而那个单一的平均路径只有在你释放 Alt 后才会被创建。你可以将其视为对草图路径效果的反向操作(13.3.4.1)。草图功能使你在绘图时能够“摸索前进”——寻找最佳线条,而不会创建一堆不确定的、需要丢弃的线条。

在铅笔工具的首选项页面上,默认启用的“平均所有草图”设置会对你按住 Alt 键时所做的所有草图描绘进行加权平均。如果你关闭它,工具将会在最新的笔画和之前的平均值之间进行平均,从而使你的最新笔画权重更大。

14.1.3 样式

像所有物体创建工具一样,钢笔和铅笔工具可以使用最后设置的样式或它们自己的工具样式(11.1.2)。默认情况下,它们使用自己的样式,初始设置为无填充,1 像素黑色描边。这是因为通常情况下,最后设置的样式是填充且没有描边,而在使用这些工具绘制时,你可能希望结果有描边,但不一定需要填充。请参考图 11-2 查看如何更改工具样式。像往常一样,下一次你创建路径时将使用的样式会显示在控制栏的右端(如图 11-1 所示)。

14.1.4 绘图模式

钢笔工具和铅笔工具都有许多模式,除了默认的贝塞尔模式,这些模式允许你使用其他类型的样条线或段落来创建路径。这些模式对应于这些工具控制栏上的“模式”按钮(图 14-9)。第一个按钮是默认模式,用于创建由直线和贝塞尔曲线组成的常规 SVG 路径。

图 14-9:钢笔工具的模式(铅笔工具没有最后两个模式)

第二种模式创建Spiro 路径——即应用了 Spiro 曲线路径效果的路径(13.3.7.2)。在此模式下,钢笔工具的简单点击会创建一个平滑节点,而 Shift+点击则会创建一个尖点节点;无法创建半平滑节点(12.5.5)。

如你所见,铅笔工具(14.1.2.1)首先对你手绘的笔划进行一些平滑处理,默认情况下使用简化路径效果。然后,它会在简化的基础上应用 Spiro 曲线效果。由于在(默认)低值的平滑设置下,简化路径通常会产生比原路径更多的节点,结果可能看起来与 Spiro 曲线差别不大——因为简化产生的额外节点使得 Spiro 曲线跟踪路径时异常紧密。如果你对此感到困惑,可以从路径的效果堆栈中移除简化效果。

第三个按钮创建BSpline 路径——即应用了 BSpline 路径效果的路径(13.3.7.1)。在此模式下,钢笔工具的简单点击会创建一个平滑的曲线节点,而 Shift+点击则会创建一个尖点节点。

另外两种模式(仅限钢笔工具)是常规模式的限制。直线模式禁用了平滑节点的创建:即使你拖动,最终也会得到一个没有控制柄的尖点节点。平行轴模式额外限制了路径中每个段落必须与第一段所创建的段落平行或垂直;此外,每个段落还必须与前一个段落垂直。例如,如果你通过按 Ctrl 键将第一段限制为垂直,那么接下来的段落将是水平的,再然后是垂直的,再接着是水平的,依此类推。这个技巧或许看起来不算什么,但这种绘图模式的真正实用性在于它可以在倾斜的坐标系中绘制:只需在正确的角度绘制第一段,然后继续在这个旋转后的世界中绘制。

在直线和平行轴模式下,如果你在没有创建路径的情况下按 Ctrl+点击,你会创建一个单一的——一个小圆形(11.4)。这在几何和技术绘图中非常方便。你可以在钢笔工具的首选项中设置 Ctrl+点击点的大小,单位为笔划宽度(双击工具箱中的工具图标以访问其首选项对话框);默认值为三个笔划宽度。如果使用 Shift+Ctrl,点的大小将是默认大小的两倍(图 14-10)。

图 14-10:钢笔:螺旋线、B 样条、直线、平行线和单个点

14.1.5 笔画形状

钢笔和铅笔工具的形状下拉菜单让你可以选择你所创建路径的笔画形状。旁边的比例值可以调整形状笔画的宽度(以相对单位表示)。在铅笔工具中,只有在你没有启用压力敏感度时(14.1.2.2),这些控制项才会显示出来。

单独来看,SVG 不支持有形状的笔画;在 SVG 中,笔画始终是恒定宽度的条带(第九章)。所有其他的笔画形状都通过 Inkscape 的路径效果来模拟(第十三章)。这就是为什么在此列表中,默认的“无”和其他笔画形状之间存在行为差异的原因(图 14-11)。

图 14-11:使用钢笔工具的有形状笔画

选择“无”时,你将得到一个基础的 SVG 路径,带有一个普通的、恒定宽度的笔画。以下是该工具在其他形状选项中的作用:

  • 两个三角形:Triangle in 减小路径末端的宽度至零,而 Triangle out 增加路径末端的宽度。这些是使用“强力笔画”路径效果创建的(13.3.1.1)。要调整宽度,请使用钢笔或铅笔的比例控制或在节点工具中拖动屏幕上的紫色把手。

  • 椭圆:使用“路径上的图案”效果,将一个直径为 10 像素的圆应用到你的路径上(13.3.2)。要调整宽度,请使用钢笔或铅笔的比例控制或在节点工具中使用屏幕上的把手(在末端节点处垂直)。

  • 从剪贴板:任何你复制到剪贴板的路径都会作为图案应用到你绘制的路径上,使用“路径上的图案”路径效果(13.3.2)。要调整宽度,请使用钢笔或铅笔的比例控制或在节点工具中使用屏幕上的把手(在末端节点处垂直)。要编辑笔画形状,请使用节点工具中的显示下一个可编辑路径效果参数按钮(12.5.1)。

    例如,如果你创建一行文本并将其转换为单个路径,复制它,然后在铅笔工具中选择此选项,每条笔画将由这行文本绘制(适当弯曲和拉伸)。

  • 从剪贴板弯曲:任何你复制到剪贴板的路径都会作为骨架应用到你绘制的路径上,使用弯曲路径效果(13.3.2.2)。例如,如果你创建一个弧线并复制它,在铅笔工具中选择此选项后,每个你创建的自由手绘将被弯曲,以适应这个弧线,覆盖其自身的形状。

  • 最后应用:你上次使用该工具时的形状会再次被使用。为什么这很有用?你可以创建一个画笔形状,将其复制,使用“从剪贴板”将其应用到钢笔或铅笔的笔画上,然后切换到“最后应用”并继续使用此画笔,这样剪贴板就可以用于其他内容了。

你创建的路径可能会有填充,可能没有填充,这取决于工具使用的样式(14.1.3)。使用 Power stroke 时,路径内部不能有填充,因为该工具会自动将笔画样式应用于填充,并丢弃原始的笔画样式。然而,使用沿路径图案时,你可以在沿路径拉伸的图案内有填充。使用 Bend 时,你可以同时拥有填充和笔画,像默认的 None 样式一样。

创建笔画形状的路径效果会叠加在笔或铅笔工具添加的其他效果之上,包括 Spiro 样条曲线或 BSpline(适用于笔和铅笔)以及简化(仅限铅笔)。例如,如果你用椭圆形绘制 Spiro 路径,然后切换到节点工具并调整 Spiro 节点,整个椭圆形状会沿着 Spiro 样条曲线弯曲和卷曲。在该路径的路径效果编辑器对话框中,你会发现 Spiro 样条曲线和沿路径图案效果叠加在一起。要将带有任何路径效果的路径转换为常规路径,请使用对象转路径命令(Shift-Ctrl-C)。

图 14-12 展示了用样条曲线和/或笔画形状创建的铅笔路径示例。

图 14-12:铅笔工具的形状笔画

14.2 书法笔工具

Inkscape这个名字非常贴切:程序中最复杂的绘图工具——书法笔,确实感觉像墨水。正如其名所示,这个工具最初是为书法设计的——也就是漂亮的手工字母。然而,随着时间的推移,它变得更加多功能,现在广泛用于一般艺术素描、绘画和勾线。

切换到书法笔(Ctrl-F6 或 C),然后在画布上拖动。Inkscape 将创建一个填充路径,其宽度和形状取决于笔画的角度、拖动的速度以及笔的压力(如果你使用的是压力感应平板)。结果可能类似于压力感应模式下的铅笔工具(14.1.2.2),但书法笔提供了更多选项和行为细节。该工具的结果始终是一个普通的填充路径,没有任何路径效果。

14.2.1 宽度

工具控制栏上最重要的设置是宽度,指定笔画的宽度(更准确地说,是其最大宽度;其他因素也可能影响宽度,但它永远不会超过你在这里设置的值),如图 14-13 所示。你可以在使用书法笔工具时,随时通过←和→键调整宽度值。

图 14-13:书法笔:变化的宽度(压力灵敏度关闭)

除了绝对单位(像素、毫米等),你还可以用相对单位(%)设置工具的宽度,这样宽度就相对于文档窗口的大小,而不是相对于文档中的任何对象或测量值。换句话说,如果你缩小视图,笔划的绝对宽度会变大,但对你来说,看起来宽度保持不变。值为 1 时始终是细线,值为 100 时始终是约 2 厘米宽的笔划(以屏幕测量为准)。

这种方法刚开始可能会显得有些奇怪,但它的优点是你始终可以保持工具的相同手感,无论你的缩放级别如何,从而实现直观的工作流程。首先,缩小视图并铺设绘图的主要粗笔触;然后,放大以添加越来越细的细节——这一切都不需要来回调整宽度。

14.2.1.1 压力敏感性

如果你的输入设备是压力敏感的平板,Inkscape 可以利用压力信息来改变笔划的宽度:轻轻按压时画出细线,用力按压时画出较宽的笔触(见图 14-14)。

图 14-14:书法笔:带或不带压力敏感性的绘制(宽度相同)

要启用压力敏感性,点击宽度控制旁边的切换按钮。没有压力敏感性时,工具会假定始终施加最大压力进行绘制。

14.2.1.2 背景跟踪

另一种可能影响书法笔宽度的因素——如果你启用了该功能——是背景颜色的深浅:在白色背景上绘制时,笔刷最细;在黑色背景上绘制时,笔刷最粗。当你使用引导跟踪(见 14.2.7)在现有绘图或位图上进行描绘,并希望通过笔划宽度平滑变化来实现阴影效果时,这一点尤其有用,如图 14-15 所示。

图 14-15:书法笔:按宽度跟踪背景

要启用背景跟踪,点击压力敏感性切换按钮后的下一个切换按钮。你可以将此设置与压力敏感性结合使用,尽管通常在进行背景跟踪时关闭压力敏感性更为合理。

14.2.1.3 按速度细化

最后,绘图的速度——你拖动鼠标或笔的速度——也可能影响笔划的宽度。这由“细化”值控制,取值范围从 -100 到 100(见图 14-16)。正值使笔划在速度加快时变细;负值则使笔划变粗。如果将此参数设置为 0,则禁用速度细化功能。

图 14-16:书法笔:按速度细化(压力敏感性关闭)

由于笔划运动通常在拖动的中间部分较快,因此结果是笔划的两端宽度固定,而中间部分则有“呼吸感”——对于该参数的正值,中间部分更细。压力敏感度通常会产生相反的效果,因为笔划中部的压力通常比两端更大。这两个因素的相互作用赋予了工具自然的手感。

现实中的毛毡笔或铅笔,通常在快速移动时会留下较细的痕迹;该参数的默认值设置为 10,以模拟这种行为。然而,你也可以将其调至–100 或 100,这会产生一种奇特的“爆炸”或“塌陷”效果,完全不同于现实世界中的任何效果!

14.2.2 角度

角度(Angle)和 Fixation 参数将书法笔视为可以以不同角度持有的平头书法笔(见图 14-17)。Angle 设置笔尖相对于水平线的角度:0 表示水平,+90 表示逆时针旋转至垂直位置,–90 表示顺时针旋转。你也可以通过按↑(增加)或↓(减少)箭头键来更改该值。

图 14-17:书法笔:角度和 Fixation

设置一个非零的 Fixation 角度对于制作书法字体最为有用。对于大多数书法风格,角度应设置在 30 到 60 度之间。

Fixation(范围从 0 到 100)控制角度的严格程度。当 Fixation 达到最大值时,笔尖总是以设定角度旋转,无论你的笔划方向如何——这样,与笔尖角度平行的绘制总会产生极细的线条,而与其垂直绘制则产生最大宽度。Fixation 为零时,笔的方向总是与移动方向垂直,这使得角度无关紧要,产生类似于圆头笔或圆刷的效果。Fixation 的中间值使笔划受角度和移动方向的双重影响,比例不同。

14.2.3 Caps

默认情况下,书法笔的笔划末端是平直的。这对于书法作品来说最为合适,但在其他情况下,你可能希望笔尖呈现更圆润的外观。将 Caps 参数调至 0.5 左右,末端会略微膨胀;调至 1.3 时,末端大致为圆形;调至 5 时,末端则会变得较长且突出,如图 14-18 所示。

图 14-18:书法笔:笔划的末端

14.2.4 颤动、摇摆和质量

你目前看到的书法笔工具虽然有用,但可能略显乏味。是时候加入一些乐趣了!最后三个参数——颤动(Tremor)、摇摆(Wiggle)和质量(Mass)(都在 0 到 100 的范围内)——以一些不常见的方式修改工具的行为。

即使使用带有压力感应的绘图板,书法笔的笔触也常常显得过于平滑和计算机化。增加震动可以为笔触增加小范围的干扰,使其看起来更自然——粗糙、颤抖,甚至是斑驳的。震动的频率是时间性的,而非空间性的,这意味着如果你绘制得更快,粗糙感会沿着笔画拉伸,从而看起来更平滑。

晃动参数也会扰动笔画,但幅度较大,使笔画呈现波浪或环形的波动图案,有时会偏离光标的实际位置,尤其在急转弯时(见图 14-19)。

图 14-19:书法笔:震动(左)和晃动(右)的效果

质量使得画笔跟不上光标的移动,好像被惯性减速,从而平滑了急转角并缩短了笔的快速移动。震动和晃动的默认设置为 0,但质量有一个小的非零默认值(100 分之 2),使得书法笔感觉轻盈且响应灵敏,但并非完全没有重量。

14.2.5 书法预设

书法笔是 Inkscape 中设置选项最丰富的工具之一。当然,每次想要从平滑的马克笔切换到晃动的画笔时,调节多个滑块和按钮是非常耗时的。预设是解决这个问题的一个方法:你可以通过选择工具栏左端下拉菜单中的一个预设,一次性设置多个参数。程序自带了几个预设:

蘸水笔

是一种模仿软毛书法笔的画笔:平滑(无震动或晃动),压力感应,角度固定为 30 度,无圆角笔尖。

马克笔

是一种简单的、常规宽度的毡尖马克笔:平滑,无压力感应,无速度稀释,无角度固定,圆形笔尖。

画笔

与马克笔相比,增加了压力感应、负稀释(当移动速度较快时,笔画变宽)和一些晃动。

晃动

顾名思义,具有较大的晃动和一些震动,呈现出特有的“脏”效果。

斑驳

是一种非常宽的画笔,具有高震动和高负稀释,可以产生一系列“斑点”,这些斑点通过细长的条纹连接起来(见图 14-16,右)。

追踪

与马克笔类似,但启用了背景追踪功能(见 14.2.1.2)。

要使用当前参数添加新预设,请点击预设列表旁边的按钮,并为你的预设提供一个名称。

14.2.6 添加与减去

如果在开始绘制之前选择了一个路径,按住 Shift 键并松开鼠标按钮或抬起笔时,你刚刚创建的笔画添加到选定的路径中,通过路径合并操作形成新的单一路径(见 12.2)。

类似地,按住 Alt 键将 减去(通过差异操作)新画笔路径与选定路径的交集。这使得快速“修补”或“雕刻”任何路径变得容易。橡皮擦工具的切割模式(14.4)具有相同的功能,因此你也可以在单独的工具中使用此功能,而无需按住 Alt 键。

14.2.7 跟踪指南路径

按住 Ctrl 键绘制书法笔时,激活 指南追踪 功能,这使得你的笔始终与所选的 指南路径 保持一定的距离滑动,从而让你能够沿着该路径进行描绘或围绕它进行描绘。

这个功能的灵感来源于传统的线雕刻技术,长期以来,这种技术是复制逼真阴影的唯一实用方式;大约一个世纪前,线雕刻几乎完全被自动半色调屏幕所取代。刻画—用许多平行的直线或曲线(宽度不同)填充空间以表示逐渐的阴影—是一项非常劳动密集的过程。Inkscape 的指南追踪功能,以及背景追踪(14.2.1.2)和微调工具(12.6),让这种古老艺术的痛苦与无聊消失了。虽然你仍然需要敏锐的眼光和大量的细致,但有了 Inkscape,你可以在合理的时间内,完全用矢量创建看起来真实的线雕刻作品。

近似画线网格的一种方法是使用路径插值(例如,使用插值子路径效果,13.3.9.2),但这种方法不太灵活,产生的输出明显是计算机生成的,缺乏“人类触感”。另一方面,手动刻画则既繁琐又几乎不可能做到均匀。指南追踪功能让你能够快速而均匀地画线,而且不会过于完美,你可以对整个过程进行相当的手动控制。

操作步骤如下。首先,选择你将要跟踪的 指南路径。它可以是另一条书法笔画、任何路径或形状,甚至是文本对象的字母。切换到书法笔工具,在开始绘制之前按下 Ctrl 键。你会看到一个灰色的 跟踪圆圈,它会集中在鼠标指针附近,并触及所选指南路径的最近点。(如果没有选择指南路径,状态栏会提示你选择路径。)

现在,移动鼠标靠近指南路径,使得跟踪圆圈的半径与所需的刻画图案间距相等,然后开始沿着指南路径绘制。只要开始绘制,圆圈的半径就会锁定,圆圈会变为绿色。此时,圆圈沿着指南路径滑动—而实际的笔画是由跟踪圆圈的中心绘制的,不是由你的鼠标指针绘制的。结果,你会创建一个平滑的笔画,它与指南路径平行,并且始终保持相同的距离(图 14-20)。

图 14-20:书法笔:跟踪指南路径

当笔画准备好后,释放鼠标按钮(或抬起平板笔)。但是,暂时不要松开 Ctrl 键,因为只要按住它,工具就会记住你开始绘制时设置的 Hatch 间距。由于你刚刚创建了一个新的笔画,因此该笔画对象被选中,而不是之前选中的对象——这意味着它现在成为新的引导路径。接下来,沿着第一笔画绘制第二笔,再沿着第二笔画绘制第三笔,以此类推。最终,你可以填充你想要的区域,形成均匀的 Hatch,如图 14-21 所示。

图 14-21:书法笔:创建均匀的 Hatch

对引导路径的附着并不是绝对的。如果你的鼠标指针远离引导路径,你将能够将其撕离(轨迹圆圈会从绿色变为红色),并远离——但不会完全自由:笔会保持一定的惯性,沿着引导路径的方向继续移动。这是故意设计的;例如,它允许你继续绘制笔画超出引导路径的末端,从而覆盖比初始引导路径更大的区域。由于惯性的存在,这种撕离通常比较平滑,但无法完全抑制抖动。如果抖动和意外的撕离仍然困扰你,可以尝试增加质量参数(14.2.4)。

跟踪引导路径还允许通过根据你的绘制行为逐渐调整跟踪距离来获得一些反馈。如果你始终试图绘制得比当前的跟踪距离更近或更远,跟踪距离会稍微增加或减少,从而使得 Hatch 图案的间距稍微变窄或变宽。

如果你不小心取消了上次创建的笔画(例如,通过撤销一个错误的笔画),你可以通过按 Shift-Tab 重新选择它,而无需离开书法笔工具(5.11)。你可以将引导跟踪与添加或删除结合使用;按 Shift-Ctrl 可以将新笔画添加到选中的引导路径中,按 Alt-Ctrl 可以将其从引导路径中删除。

跟踪功能是为了平滑的雕刻图案设计的,因此它无法在转弯较急或不均匀的引导路径上工作(例如,高颤抖的书法笔画,14.2.4)。由于跟踪是沿着笔画的边缘进行的,因此宽度变化的笔画(例如,跟踪背景时,14.2.1.2)会导致随着绘制过程的进行,Hatch 图案逐渐弯曲。最后,你只能跟踪路径;如果你有一个想要覆盖的位图,你必须先在每个 Hatch 区域手动创建第一笔画,然后才能将其作为引导路径进行跟踪(图 14-22)。

图 14-22:获取一个位图(上图),使用书法笔工具在其上进行 Hatch,然后使用 Tweak 工具调整生成的 Hatch(下图)。

使用带有引导跟踪的调整工具和书法笔是很方便的。描绘的阴影很少完美:松散的杂乱末端、错误的倾斜角度或弯曲度、不正确的笔触宽度(过深或过浅的阴影)是最常见的问题。使用调整工具,你可以修正这些问题,避免重新描绘阴影。使用收缩/扩展模式像橡皮擦一样清理松散的末端,同时调整笔触宽度;推拉模式可以弯曲或塑造阴影。借助这些强大的工具,使用照片作为参考,你可以创建复杂且看起来真实的阴影效果。

14.3 油漆桶工具

“油漆桶”或“区域填充”工具的概念你可能在位图编辑器中见过。在 Inkscape 中,油漆桶工具的工作方式正如你所期望的那样:点击任何被四周边界围起来的区域,它就会用颜色填充该区域。然而,作为一个矢量工具,Inkscape 的油漆桶会创建一个新的路径,填充你点击的区域,如图 14-23 所示。

图 14-23:油漆桶填充一个有边界的区域

另一方面,Inkscape 的油漆桶工具是感知性的,而非几何性的。这意味着,在寻找你点击点的边界时,它会识别任何可见的颜色不均匀性作为边界。因此,填充会在渐变、模糊和位图中的颜色边界处停止,但它会忽略任何完全(或几乎)透明的路径或其他因某种原因与背景没有明显区别的对象。

例如,你可以扫描一张铅笔素描,将位图导入 Inkscape(18.1),并通过填充所有有边界的区域来快速“描摹”它。这种便捷的交互式方式使得传统的位图描摹(位图追踪对话框,18.5.2)在许多情况下变得不再必要。

在内部,该工具通过对可见画布的屏幕分辨率渲染执行位图区域填充,然后将结果填充路径追踪为矢量路径。该工具使用的渲染位图的分辨率与当前的缩放级别相关;你越是放大一个区域,填充的分辨率就越高。如果油漆桶填充的结果过于不精确,或者有圆角,或者没有进入应该填充的小缝隙——只需撤销操作,放大(但要确保整个填充区域可见),然后从同一点重新填充。相反,如果填充从小缝隙溢出,缩小视图使缝隙不那么明显,再次填充(或者调整自动关闭缝隙的参数,14.3.5)。

14.3.1 填充技巧

要填充一个有限区域,切换到油漆桶工具(F7 或 U),然后点击区域内。如果按 Shift 键点击,结果路径将与选中的路径联合(12.2);例如,如果你的第一次尝试没有填充完整的区域,只需按 Shift 键点击剩余的角落来完成,如 图 14-24 所示。

图 14-24:向现有路径添加油漆桶填充

如果你点击并拖动(你的拖动路径会通过红线显示),你将从你经过的每一个点开始填充。从每个点开始,填充会扩展到颜色相似的邻近区域。换句话说,这就像是用这个工具在拖动路径的每个点上点击并结合结果。通过这种方式,你可以轻松填充由渐变或模糊占据的区域——只需从最暗到最亮的点拖动你想填充的区域(图 14-25)。

图 14-25:单击一次,只有渐变的窄条被填充;拖动跨越一个区域以填充整个渐变。

Alt 点击并拖动类似于简单的拖动,区别在于从拖动路径中的每个点开始,填充会扩展到与起始点(即你开始拖动的点)颜色相似的邻近区域(如果有的话),而不是你正在拖动的点。这使你能够通过从一个区域开始拖动并使用 Alt 键拖动穿越所有其他区域,填充一系列相似颜色但分开的区域(例如,漫画中的多个单元格)。

14.3.2 按通道填充

在寻找停止的颜色边界时,油漆桶工具默认会查看画布上你看到的相同颜色。然而,你可以将其视野限制为特定的颜色通道。除了默认的可见颜色,填充下拉菜单允许你选择任何三个 RGB 通道(红色、绿色、蓝色)、任何 HSL 通道(色相、饱和度、亮度)或 Alpha 通道(透明度)。

例如,如果选择红色通道,即使是最锐利的绿色/蓝色边界也无法阻止填充。选择 Alpha 通道会让工具忽略所有颜色,仅查看透明度变化的位置;例如,如果你有一个复杂的、多色的、但完全不透明的物体在透明背景上,点击这个物体的 Alpha 模式会填充到整个物体的轮廓。

14.3.3 阈值

阈值参数的范围从 0 到 100,控制一个点的颜色与初始点击点相比,必须有多大差异才能停止填充的传播。零容差意味着只有严格相同颜色的区域会被填充;容差越大,填充区域也会越大,且填充越容易泄漏到相邻的颜色区域。默认值为 5。

14.3.4 扩展与收缩

通过“增长/缩小”参数,你可以控制应用到创建的填充路径的内缩或外扩量。这与 Outset 和 Inset 路径命令(12.4)的工作原理非常相似,只是它是在每次填充后自动执行的。

正的增长/缩小值会使填充路径比它所代表的填充位图区域更大;这通常有助于消除填充与边界之间的抗锯齿空隙。负值则会使路径变小,确保填充与边界之间的宽度恒定。

14.3.5 填补空隙

通过“填补空隙”参数,你可以让油漆桶工具忽略区域边界中的任何空隙,这些空隙通常会导致填充溢出到不希望填充的区域。自动填补空隙有四个级别:

  • 小(最多关闭 2 个屏幕像素大小的空隙)

  • 中(最多关闭 4 个屏幕像素大小的空隙)

  • 大(最多关闭 6 个屏幕像素大小的空隙)

将此参数设置为非“无”值会显著减慢工具的速度,特别是在填充大区域时。

14.3.6 样式

和所有创建对象的工具一样,油漆桶工具可以使用它所创建的对象的最后设置样式(11.1.2)(这是默认值),或者它可以使用自己的固定样式。你可以在工具的首选项页面切换这两种模式(双击工具图标进入)。与其他工具一样,控制栏最右侧的样式样本显示将用于下一个填充的样式。要更改最后设置的颜色而不影响任何对象,只需取消选择所有对象(Esc)并点击调色板上的颜色。

在油漆桶工具中,按住 Ctrl 并点击具有特殊功能。按住 Ctrl 时,工具不会填充区域,而是对你点击的现有对象进行即时样式更改(无需选择该对象):它只是简单地将该对象的填充颜色更改为工具当前的填充颜色。同样,按住 Shift-Ctrl 并点击则将该对象的描边更改为工具当前的描边颜色(如果没有设置描边,则 Shift-Ctrl 点击的行为与 Ctrl 点击相同)。例如,你可以使用此功能重新着色你之前创建的一些填充对象,而无需先选择它们,并且无需离开油漆桶工具。

14.4 橡皮擦工具

正如其名字所示,这个工具是为了快速方便地擦除内容。Inkscape 的橡皮擦工具(Shift-E)实现了三种不同的模式,由控制栏上的三个切换按钮表示(图 14-26)。

图 14-26:橡皮擦工具

删除模式

在此模式下,你可以在对象上拖动(留下红色轨迹),松开后,工具会删除你拖动路径所触及的对象(参见 5.8)。此模式没有其他选项。

剪切模式

在此模式下,橡皮擦绘制一条路径,就像书法笔一样,然后使用差异布尔操作(12.2)将其从下面的其他路径或形状中减去。此模式中的选项类似于书法笔的选项,包括宽度(14.2.1),细化(14.2.1.3),端点(14.2.3),甚至震动和质量(14.2.4)。最后一个切换按钮强制工具将每个被切割的路径拆分成不连贯的部分(12.1.1)。

剪切模式

此模式与剪切模式类似,但不同之处在于,工具会对你绘制的对象进行剪切(18.3),而不是减去它们。这是一种更好的方法,因为首先,剪切操作是非破坏性的(你始终可以使用“对象 ▶ 剪切 ▶ 释放”恢复原始对象),其次,剪切不仅适用于路径,也适用于位图等其他对象。SVG 中的对象只能拥有单一的剪切路径,但该工具足够智能,当你剪切一个已经被剪切的对象时,能够按预期工作:它会将新的剪切路径添加到当前的剪切路径中。

14.5 连接器工具

绘图应用程序,其中最著名的是 Microsoft Visio,是一种非常流行的软件类别,与矢量图形有很大的重叠。Inkscape 的连接器工具扩展了该领域的功能——尽管不足以替代 Visio,但足够用于小型绘图项目。

基本上,图表是一个矢量图形,其中对象通过不同类型的线连接——用于说明工作流顺序、链接、调用、分类或其他类型的关系。至关重要的是,程序能够识别哪些内容与哪些内容相连,并且每当你移动连接的对象时,连接线会自动更新。这正是连接器工具所做的工作。

要尝试该功能,在矩形工具中绘制几个矩形。你还可以创建文本标签,并将每个标签与其矩形分组。然后切换到连接器工具(O)。当你将鼠标悬停在其中一个对象上时,你会看到其中央有一个白色方形控件。抓住它,向另一个矩形拖动,并将其放置在另一个矩形的中央控件上。这将创建一条连接矩形边缘的直线,沿着连接它们中心的线(图 14-27)。现在,移动矩形(在选择器中),你会看到连接线实时更新。

图 14-27:连接器工具

连接器是常规的 SVG 路径,你可以根据需要对其进行样式设置——例如,给它们添加箭头标记(9.5)。你也可以像编辑路径一样编辑它们的节点,但实际上不应这样做。只要其中一个连接的对象移动,其连接器会自动更新,丢弃你对它们做的任何节点编辑。

当你移动对象时,你自然会希望避免连接线与已连接的(或任何其他)对象交叉的情况。连接器工具也可以为你完成这一点。工具控制栏中的前两个按钮将启用和禁用当前选定对象的 避免属性。如果某个对象具有此属性,连接线将被引导到避免与其交叉或接触的方式。如果你选择了图表中的所有块,并通过一次点击为它们启用此属性,你将拥有更多的自由来移动元素而不会让图表变得难以阅读。你可以通过间距参数调整对象和连接器之间的间距(见 图 14-28)。

图 14-28:连接器工具:启用块的避免属性

连接器工具还可以生成另一种风格的连接器:直角,由垂直和水平段组成, optionally 带有圆角,如 图 14-29 所示。

图 14-29:连接器工具:直角连接器

你可以单独更改每个连接器的曲率半径(点击连接器工具中的连接器进行选择)。此选项可以与图表块的避免属性结合使用。

第十五章:文本

正如你在矢量编辑器中所期待的,任何你添加到 Inkscape 绘图中的文本,无论你对其应用了什么样的样式、滤镜或变换,都始终可以作为文本随时进行编辑。创建和编辑文本对象是文本工具的功能,允许你输入或删除单词,将文本手动或自动分列,应用样式于文本段落,调整字距和行距等。

Inkscape 并不与文字处理软件或桌面出版软件竞争;它在处理大量文本时并不特别方便。Inkscape 没有结构化格式化工具,如自动标题或样式库。相反,作为一个视觉设计工具,Inkscape 在大多数情况下,能够让你对每个字形、单词和段落进行完全而精确的控制,同时不牺牲文本的可编辑性。

15.1 基本编辑

如果你有一个现有的文本对象,选择它并切换到文本工具(F8 或 T)。这会将文本编辑光标(一个闪烁的垂直线)放置在文本对象的末尾。此时,你可以点击文本中的任何位置来放置光标,或者用箭头键移动光标。或者,在选择工具中,双击一个文本对象——这会切换工具,选择对象,并同时将光标放置到你点击的位置。

单击或双击文本对象仅当你的鼠标光标为“I”形状并且文本周围出现蓝色框架时才可能,这表示你正在点击一个可编辑的文本对象(图 15-1)。

图 15-1:通过点击放置文本编辑光标

在 Inkscape 中,输入和编辑文本的方式与文字处理软件类似。使用 Delete 或 Backspace 删除字符(包括换行符);按 Enter 键开始新的一行。你可以使用箭头键移动文本光标(按住 Ctrl 键可按单词跳转),使用 Home 和 End 键(按住 Ctrl 键可移动到文本对象的开始或结束),以及使用 Page Up 和 Page Down 键。画布会在必要时自动滚动,以确保文本光标始终可见。

如果因为某种原因,在画布上编辑文本不方便,可以打开文本和字体对话框(15.3.2),然后在文本标签下,在标准文本区域编辑所选文本对象。不幸的是,点击“应用”会丢失你可能已经应用到文本中某些部分的格式设置(15.3.1),但如果你只是打开对话框查看文本或将其复制到剪贴板而没有进行任何更改,这样是完全安全的。

15.1.1 选择

你可以通过拖动覆盖某些字符来选择文本对象中的内容(与点击一样,必须从字符的主体开始,而不是空白区域),或者通过使用 Shift+箭头键移动文本编辑光标来选择文本(图 15-2)。这种文本选择,以绿色蓝色矩形叠加显示,不应与程序范围内的对象选择(第五章)混淆;文本选择是文本工具独有的,允许你在选定的文本对象内进行样式设置、字符间距调整或删除操作。在使用文本工具编辑文本时,按 Ctrl-A 选择的不是所有对象,而是该文本对象内的所有文本。

图 15-2:使用文本工具进行文本选择

使用 Ctrl-C(或 Ctrl-X 剪切)复制文本选择,再使用 Ctrl-V 粘贴到光标位置,是移动文本的简单方法——无论是在同一文本对象内,在同一文档的多个文本对象之间,跨文档之间,甚至在 Inkscape 和其他应用程序之间。例如,你可以在文字处理器中复制一段文本,并将其插入到 Inkscape 的文本对象中。Inkscape 中的复制/粘贴操作永远不会传递格式,仅传递文本内容。

15.2 文本对象的类型

如何创建一个新文本对象?这取决于你想创建的对象类型。Inkscape 中的文本对象可以属于不同类型,这些类型大致相似,但在能力和行为的细节上有所不同。

15.2.1 常规文本

要创建常规文本对象,切换到文本工具(F8),点击画布(不是现有的文本对象!)以放置文本光标,然后开始输入。(如果你拖动而不是点击,将创建一个文本嵌入形状对象,15.2.2)。按 Enter 键开始新的一行。

一旦你输入至少一个字符,新文本对象将被添加到文档中。此时,你可以切换到任何其他工具处理新创建的对象,就像处理其他对象一样——例如,使用选择工具进行变换(图 15-3),通过点击调色板颜色来为其着色(这可以在任何工具中完成),或使用渐变工具在其上绘制渐变。

图 15-3:文本工具和选择工具中的文本对象状态栏描述

15.2.1.1 常规文本中的换行

在常规文本对象中,默认情况下没有自动换行;你需要按 Enter 键来开始新的一行。如果你不这样做,继续输入的话,行的长度将没有限制。

要在常规文本对象中启用自动换行,请注意文本右端的菱形句柄。(左侧较小的方形标记是基准线原点标记,无法拖动。)一旦句柄被移离默认位置,文本将显示两条垂直引导线,定义了文本流入的列(这些引导线仅在文本工具中可见)。您可以通过拖动句柄来调整宽度。任何超过列宽的文本行都会自动换行,如图 15-4 所示。

图 15-4:常规文本对象中长行换行

在从右至左的文本中(15.4.1),基准线原点标记在右侧,列宽句柄在左侧,您只能调整列左侧的引导线。对于垂直文本,引导线是水平的;您可以通过移动下部引导线来重新排列文本。

常规文本可以左对齐、居中或右对齐(15.4.2),但即使文本已自动换行到列中,仍然无法进行完全对齐。如果您需要一个完全对齐的文本列,可以使用形状中的文本(15.2.2)。

如果列的宽度比文本中最长的单词还要窄,Inkscape 就面临着如何处理无法适应的单词的问题。Inkscape 不知道如何正确断开单词(因为单词断开规则取决于语言,而 Inkscape 不知道文本的语言);它尝试做的一件事是断开带连字符的单词(在连字符处断开)。最终,Inkscape 会放弃并截断文本—从第一个无法适应的单词开始,所有后续内容都会被隐藏;这种被截断的文本对象会显示红色列引导线,而不是蓝色的。要修复被截断的文本对象,可以加宽列,减少字体大小,或编辑文本以确保所有单词都能适应。

15.2.2 形状中的文本

如您所见,常规文本对象可能具有,也可能没有特定的列宽,这取决于是否拖动了菱形句柄。相比之下,形状中的文本总是具有自己的内在宽度和高度——更一般地说,它是一个框架——并且会自动换行以填充其框架。在这种文本对象中输入时,按下 Enter 键会开始一个新段落。如果文本过长而无法完全适应框架,形状中的文本可能会被截断(请参阅 15.2.1.1)。

15.2.2.1 内部框架

创建形状中的文本的最简单方法是使用文本工具在画布上拖动(而非点击)。这会创建一个矩形框架,就像使用矩形工具拖动一样(图 15-5)。松开鼠标后,您可以输入或粘贴文本,当文本到达框架边缘时,它会自动换行。您还可以拖动右下角的句柄来调整框架大小,文本会自动重新流动以适应新的大小。

图 15-5:带有内部框架的形状中的文本

文本在单词边界处换行;不支持自动连字符。如果文本超出了框架的大小,额外的文本(从一个单词边界开始)会被截断——隐藏但不会丢失;如果你减小字体大小或删除一些文本,尾部会移动并变得可见。

这种类型的文本对象被称为具有内部框架:其矩形框架是对象本身的一部分,而不是一个独立的对象。例如,当你变换文本时,它与其框架一起整体变换。

15.2.2.2 外部框架

代替自己的内部矩形框架,文本对象可以链接到任何外部路径作为其框架。为此,选择两个对象——任意文本(常规文本或形状内文本)和一个路径——然后选择文本 ▶ 流入框架,如图 15-6 所示。

图 15-6:具有外部框架的文本对象

这个命令不会删除或隐藏框架对象;文本和框架保持分开,文本被称为与其框架链接,就像克隆与原始对象是链接的(第十六章)。编辑框架对象的形状会迫使链接的文本重新流动到更改后的形状中,但样式化框架(例如,通过使其完全透明来隐藏它)不会影响文本。

你可以单独移动或变换链接的文本,而不影响框架,但移动或变换框架会影响文本(参见 16.2 中的变换克隆补偿模式)。选择一个链接的文本对象并按 Shift-D 键,会选择其框架,就像在克隆及其原始对象之间一样(参见 16.4)。

要去掉框架,请使用文本菜单中的取消流动命令。此命令会删除文本形状的内部框架(或断开与外部框架的链接),并将其转换为常规文本对象。每个段落变为一行。

15.2.3 流动文本

如果你打开一个在旧版本 Inkscape 中创建的文件,你可能会发现另一种文本对象,它看起来和行为几乎与文本在形状内相同,但在状态栏描述中被称为流动文本。这种类型的对象(在 SVG 中由非标准的svg:flowRoot元素及其子元素表示)曾长期以来是 Inkscape 中唯一创建自动换行文本的方式。这种流动文本在 Inkscape 以外的地方从未得到支持,尽管你仍然可以在旧版本的 Inkscape 文件中查看和编辑流动文本对象,但最好通过“文本 ▶ 转换为文本”命令将它们转换为常规的换行文本对象。

15.2.4 路径上的文本

除了使用路径作为框架(参见 15.2.2.2),Inkscape 中的单行文本对象可以链接到路径,使用它作为引导来弯曲文本的基线。只需选择文本和路径,然后选择文本 ▶ 放置到路径上,如图 15-7 所示。

图 15-7:将文本放置到路径上

这个连接是实时的——文本和路径都可以编辑,改变路径的形状会使文本跟随新的形状。如果文本长度超过路径,它的末尾会被隐藏(但仍然存在:如果你删除文本的开头部分,末尾部分会向内移动并变得可见)。如果路径由多个子路径组成(12.1.1),文本会从一个子路径的字符边界继续到下一个子路径(但不是单词边界)。

路径是否有描边或填充并不重要;对文本来说,唯一重要的是路径的几何形状。路径方向也很重要:如果你想将文本放置在路径的另一侧并反向排列,选择路径 ▶ 反转,如图 15-8 所示。

图 15-8:路径方向会影响路径上的文本。

你可以通过使引导路径完全透明,或者去除其填充和描边来轻松隐藏引导路径。转换路径(例如,移动路径)会影响其链接的路径文本;然而,你可以缩放、旋转或将文本对象移离路径,它会保持这个独立的变换而不会破坏链接。

一个以上的文本对象可以链接到同一路径。使用文本 ▶ 从路径中移除将路径上的文本转换为普通的线性文本,切断其与路径的连接。

15.3 文本样式

在许多方面,文本对象与其他类型的对象没有什么不同:你可以整体转换和样式化文本对象(选择填充或描边、调整透明度、应用滤镜),而无需进入文本工具(当然,编辑文本的能力也不会丧失)。然而,只有文本工具允许你更改特定于文本的样式属性(例如字体家族和字体大小),以及对文本对象内的文本段(片段)应用样式。

你可以更改文本样式的两个地方是文本工具的控制栏(画布上方)和文本与字体对话框(Shift-Ctrl-T)。前者更快捷方便,而后者提供了更多选项。

15.3.1 非文本样式属性

当你在文本工具中选中一个文本段落时,大多数(但不是所有)改变样式的命令和样式报告 UI 元素都会应用到该段文本,而不是整个文本对象。例如,你可以通过选中它并点击调色板中的颜色样本,使用填充和描边对话框(8.2)或颜色手势(8.7)来轻松更改文本段落的颜色,如图 15-9 所示。同样,你也可以为该段落添加或去除描边,或者调整其透明度。然而,模糊或其他滤镜无法应用到文本段落;如果你尝试这样做,整个文本对象将被模糊或滤镜化。

将渐变或图案填充应用到文本跨度是可能的,但操作较为复杂。你需要创建一个包含所需渐变或图案的单独对象,复制它(Ctrl-C),然后选择文本工具中的文本跨度,最后粘贴样式(Shift-Ctrl-V)到文本跨度上。不幸的是,你不能再使用渐变工具中的控制柄来编辑这种渐变。

图 15-9:为文本跨度设置样式

一般来说,粘贴样式技巧在为文本跨度(text spans)设置样式时非常有用——它允许你在对象和文本部分之间传递样式(不仅包括颜色,还包括字体、大小、字间距等)。要从文本跨度复制样式,你甚至不需要选择它;只需将文本编辑光标放在跨度内的任何位置,然后按 Ctrl-C。

15.3.2 字体和变体

Inkscape 允许你使用操作系统中安装的任何轮廓字体(TrueType、OpenType、Type 1)。你还可以通过将字体放入 Inkscape 数据文件夹下的 inkscape/fonts 文件夹中来提供额外的字体,只有 Inkscape 能够使用这些字体。你可以在首选项的系统页面中查找这个文件夹。此外,你还可以通过在首选项、工具▶文本页面中的“附加字体目录”中列出其他字体文件夹,指示 Inkscape 查找这些目录。

一个包含所有字体家族(不是单独的字体)的列表会从文本工具的控制栏打开;每个字体家族都有图形样本,你可以通过滚动列表来选择一个家族。如果你知道所需字体的名称,可以点击文本框(或者按 Alt-X)并开始输入;一个下拉列表会显示可能的匹配项(图 15-10)。

图 15-10:在文本工具中选择字体家族和样式

大多数字体在同一家族内包含多种变体(样式);除了斜体/倾斜体和不同粗细的变化(轻体、中体、粗体、重体等),它们还可能包含宽度轴上的变化(紧凑或拉伸)。在控制栏上,所选字体家族的样式列表位于字体家族下拉框的右侧。编辑时,Ctrl-I 和 Ctrl-B 快捷键会尝试将所选文本切换为当前字体的斜体或倾斜体(如果可能,保持相同的粗细)或粗体样式。

在文本和字体对话框中(Shift-Ctrl-T,图 15-11),也可以找到相同的字体家族和样式列表。在这里,你不仅能看到一个小的通用样本,还能看到在所选字体和字体大小下的文本对象预览。选择对话框中的样式后,点击应用,更改才会生效。

图 15-11:文本和字体对话框

15.3.2.1 可变字体

可变字体并不像传统字体那样提供不同的样式作为独立的字体文件,而是具有一个或多个设计轴,允许你平滑地调整某些字体参数——最常见的是字重或字宽。这是 OpenType 字体的一个特性(OpenType 是 TrueType 的继任者);许多免费字体,包括 Google Fonts 上的字体(fonts.google.com/)都采用了这一特性。Inkscape 在其“文本和字体”对话框中支持可变字体:当选择可变字体时,其设计轴(或多个设计轴)会以滑块(或多个滑块)的形式显示在字体样本上,实时反映可变参数的值。

15.3.3 字体大小

在许多情况下,你甚至不需要以数字形式设置字体大小;你可以使用选择工具(6.2)或键盘快捷键来缩放整个文本对象。否则,可以使用控制栏上的字体大小控件(带单位选择器)或在“文本和字体”对话框中使用(该对话框始终使用 px 单位)。这两种字体大小控件都会在显示字体大小时考虑到这个缩放;例如,如果你将文本对象设置为 12 px 字体大小,但随后将其放大两倍,你会看到其字体大小显示为 24 px。

15.4 文本布局

15.4.1 写作模式和方向

不是所有语言都像英语那样从左到右、从上到下书写。有些语言是从右到左书写的(例如,希伯来语),而有些语言则偏好垂直放置字形(例如,日语)。

控制语言特定文本参数的三个下拉开关(位于文本工具控制栏的最右端)中,第一个开关将文本切换为垂直模式(从上到下)。对于垂直文本,它还控制块进度(此处的块指段落或段落内的行),可以设置为从右到左或从左到右。这给该开关提供了三种选择:水平文本、具有从右到左块进度的垂直文本,以及具有从左到右块进度的垂直文本。

第二个开关控制垂直文本中单个字形的方向。这区分了那些通常只出现在水平文本中的字符(例如西方语言中的字符)和那些在垂直文本中常见的字符(例如日文字符)。三种选项——混合、竖直和横向——如图 15-12 所示。

图 15-12:文本方向、块进度和字形方向选项

三个按钮中的最后一个设置文本的内联书写方向(从左到右或从右到左)。通常,右到左的文本(如希伯来语)在不触及此选项的情况下也能正常显示;它并不会真正反转字符串中字符的顺序,而是标记文本为右到左,同时反转对齐方式并改变光标移动和选择键的工作方式。

15.4.2 对齐

每个文本对象都有特定的对齐方式:左对齐(默认)、右对齐居中,你可以在文本工具的控制栏中通过下拉菜单选择它(图 15-13)。例如,在编辑左对齐文本时,按 Enter 会将光标水平移动到下一行的起始位置,而你输入的文本会在此对齐边缘的右侧扩展,并随着光标一起移动。相反,在右对齐文本中,按 Enter 会将光标移至前一行的结束位置,而你输入的文本会向左移动,光标保持在原位。

图 15-13:文本对齐和排版

对于图形中的文本,还有一个额外的对齐选项:两端对齐,它会扩展每行中的空格,使文本列的两端对齐。

15.4.3 下标与上标

要将部分文本转为上标,选择该部分文本并点击控制栏上的上标按钮 (x^y) 。例如,输入 1.496 × 1011,然后选择最后两个字符并将其转为上标,以科学记数法表示地球到太阳的距离:1.496 × 10¹¹。另一个按钮用于生成下标;如果你希望将上标和下标同时应用于同一字符,如T²[2n + 1],你可能需要应用一些水平字距调整(15.4.4),以使其看起来更好。

15.4.4 字距调整

在使用文本时,Inkscape 让你自由地移动每个字符并调整字母之间的间距。

将光标放在字符前并按 Alt-→。光标右侧的整行文本将在当前缩放级别下向右移动 1 个屏幕像素;按 Shift-Alt 时,箭头键会移动 10 倍于 Alt 的距离(参考 6.5.1)。这是调整两个字符之间的字距间隔的交互方式;你也可以通过控制栏中的水平字距值(以 px 为单位)以数值方式进行调整。

你可以将任意一对字符的间距调得更近或更远,以实现文本行的最佳平衡和视觉节奏。你还可以调整空格的间距,将单词拉近或分开,视需要而定。为了直观地查看你添加的字距调整,只需选择文本(Ctrl-A)。每当两个字母被手动调整得更紧密时,它们的选择矩形将重叠,你会看到一条更深的带状区域;相反,字距扩展的字符对则会在选择覆盖层之间留下空隙(图 15-14)。这条深色带或空隙的宽度正好对应你在该位置添加的字距调整量。

图 15-14:调整字符串中的字距间隔

通过放大缩放,你可以进行更精细的字距调整。但不要过度放大;始终缩小查看你的间隔在整个文本行中的效果。

水平字距调整对于路径上的文本尤其有用。正如图 15-7 所示,字母在凹曲线处往往太紧凑,而在凸曲线上则分得太开。通过手动字距调整,可以轻松抵消这种效果,使字符沿曲线均匀分布。

许多字体包含内建的字距调整指令;例如,一种字体可能指定,当 Ya 相邻时,它们的字距为字体大小的 0.03。Inkscape 会遵守这些自动字距调整指令。然而,如果你尝试手动调整这对字符的字距,你将禁用自动字距调整。这就是为什么首次按 Alt-← 来将 Ya 拉近时,可能会意外地让这两个字母拉得更远。别担心,只需继续按 Alt-←,直到达到你需要的间隔。

你也可以通过按 Alt-↑ 和 Alt-↓ 或通过另一个控制条小部件来垂直调整字符间距。水平和垂直字距的组合使你能够在文本字符串中自由地定位单个字母,正如图 15-15 所示。

图 15-15:组合水平和垂直字距调整

如果你选择了一个或多个字符(通过鼠标拖动或按住 Shift+箭头键),字距快捷键将通过在所选文本前后插入两个相反的字距,来有效地将选定部分相对于其余文本移动,正如图 15-16 所示。

图 15-16:通过字距快捷键移动选择内容

最后,你可以通过按 Alt-[ 或 Alt-] 来旋转文本对象中的任何字符,当光标位于该字符之前时(参见图 15-17)。

图 15-17:旋转字符

这种旋转是围绕字符的基线原点进行的——即字符在基线(大多数没有扩展部分字母的底部线,如 im)上的最左侧点。所选文本对象中第一个字符的基线原点会在画布上显示为一个小方块,出现在选择工具和文本工具中。

15.4.5 字母、单词和行间距

如果你想要让文本中的所有字符——而不仅仅是某一对字符——更加紧密或更加分开呢?这种调整叫做字母间距(在其他软件中,它可能被称为字距调整)。选择全部或部分文本,然后按 Alt-> 来拉开字符间距,或者按 Alt-< 将它们拉得更近(这些与选择工具中缩放对象的快捷键相同),或者在文本工具的控制条中修改字母之间的间距值(参见图 15-18)。

图 15-18:将字母间距拉开(上)或紧缩它们(下)

理想的字母间距取决于文本的最终显示大小。通常,较小的字体需要更多的空隙,而较大的文本应更加紧凑。

同样,你可以调整单词之间的间距——即更改空格字符的默认宽度。例如,如果你在控制条的“单词之间的间距”字段中输入 10,则所选文本中的每个空格将比默认宽 10 像素。

要调整文本对象中行之间的间距,按 Ctrl-Alt->或 Ctrl-Alt-<。在控制条上,基线之间的间距值可以用相对单位(行或%,指的是字体的大小)表示,也可以用绝对单位如英寸表示(见图 15-19)。例如,在 20 像素字体下,行间距设置为 1.2 行时,邻近的基线之间将有 24 像素的间距。更改行间距会影响整个文本对象,无论是否选择了任何文本。

图 15-19:调整行间距

15.4.6 连字

一些字体除了单一字符外,还有连字——对于某些字符对(或三字符组、更多字符)的组合字形。默认情况下,Inkscape 使用字体中定义的连字。例如,Alef 字体有一个“fi”连字,如图 15-20 所示。

图 15-20:Inkscape 中的连字

然而,具有单一字形表示两个或更多字符会导致 Inkscape 在你用箭头键移动光标时出现异常:你仍然需要两次按键才能通过“fi”连字(因为它是两个字符),但由于 Inkscape 无法将光标放置在连字中,视觉上的光标在某次按键时不会移动。你需要在按下→之前想象一个“虚拟”光标位于“f”和“i”之间,但视觉光标不会移动。

这提供了一种去除不需要的连字的方法。当“虚拟”光标位于连字中时,按一次 Alt-←或 Alt-→。Inkscape 将插入一个字间距符号,从而打破连字。

要查看某种字体支持哪些类型的连字,请打开文本与字体对话框(Shift-Ctrl-T)。在所选字体的“特性”标签页中,你将看到某些连字类别旁有勾选标记:常用(包括“fi”,“fl”及其他一些),任选(如某些装饰性字体中的“sp”,“st”,“rt”等),历史(主要是带有老式“长 s”字母的连字),以及上下文(这些连字仅在某些特定情境下使用)。

15.4.7 特殊字符

有时,你可能需要输入一个键盘上没有的字符。在“Unicode 字符”对话框中(来自“文本”菜单),你可以查找并插入任何可用于 Inkscape 的字体中的 Unicode 字符。

Unicode 是一种全球标准,涵盖了所有现存的和大多数历史字母表,以及大量其他特殊字符。Unicode 字符的丰富性可以按 脚本(例如,通用、塞尔维亚字母或片假名)进行分类,并且可以更狭义地按 范围(例如,通用标点符号、塞尔维亚字母补充、或片假名音标扩展)进行细分。查找极为复杂的 Unicode 标准的最佳地点是 unicode.org/

如果你在 Unicode 字符对话框中将脚本和范围选择器设置为全部,窗口会显示所选字体中的所有字符(图 15-21)。双击你需要的字符,将其放入左下角的编辑框中,然后点击 附加 将其添加到当前文本对象中。

图 15-21:Unicode 字符对话框

在底部,Unicode 字符对话框会显示你在表格中选择的字符的十六进制 Unicode 编号(例如,版权符号字符的编号是 00A9)。如果你知道该编号,你可以直接插入该字符,而无需打开对话框。只需在编辑文本对象时按 Ctrl-U,输入编号(查看状态栏获取反馈),然后按 Enter。字符会被插入到文本光标处。

以下是一些常用的特殊字符:

名称 字符 十六进制编号
长破折号 2014
短破折号 2013
左双引号 201C
右双引号 201D
左单引号 2018
右单引号 2019
左双引号 « 00AB
右双引号 » 00BB
省略号 2026
乘号 × 00D7
版权符号 © 00A9
注册商标符号 ® 00AE
商标符号 2122
圆点符号 2022

15.5 将文本转换为路径

对于 Inkscape 的所有文本编辑功能,有时你需要将文本转换为路径——例如,编辑单个字母的形状,使用文本裁剪某些内容(这需要路径),或者将 SVG 文档发送给没有你所使用字体的人。命令路径 路径 ▶ 对象转路径(Shift-Ctrl-C)会像在形状上操作一样作用于文本对象(13.1)。

然而,与形状不同,文本对象并非单一路径,而是一个路径组,每个路径代表原始文本中的一个字形(字符)。这使得 Inkscape 能够完全保留文本的外观,包括应用于文本中各个跨度的任何样式。现在,你可以通过在选择器中按住 Ctrl 点击或在节点工具中简单点击来选择任何单独的字母。如果你确实需要整个文本对象的单一路径,可以选择 路径 ▶ 对象转路径,然后使用 路径 ▶ 合并(Ctrl-K)将所有字符合并为一个具有统一样式的单一路径对象。

15.6 拼写检查

Inkscape 内置的拼写检查器可以同时使用最多三个词典。要设置它,请转到 拼写检查 页面,在 首选项 对话框中(图 15-22)。

图 15-22:在首选项中设置 Inkscape 拼写检查器

例如,您可以将法语作为主要语言,但添加英语和俄语作为第二和第三语言。这样,您可以检查这三种语言中的任何一种或它们的混合拼写,只有在所有三种语言中都缺少的单词才会被标记为拼写错误。如果您只需要一种语言,请将第二和第三选项设置为

许多语言有多个词典。例如,英语(en)有美国(en_US)、英国(en_GB)、加拿大(en_CA)和澳大利亚(en_AU)变体;英国变体还根据首选动词后缀(en_GB-ise 或 en_GB-ize)进一步分为子变体,等等。

一旦通过 Ctrl-Alt-K 调用拼写检查器(或通过文本 ▶ 检查拼写),它会依次检查文档中所有可见的文本对象(无需选择),从上到下,从左到右。当发现拼写错误的单词时,Inkscape 会在单词周围显示一个红框,并在对话框中列出建议,如图 15-23 所示。

图 15-23:拼写检查文档

拼写错误的对象被选中;如果您正在使用文本工具,编辑光标将放置在拼写错误的单词的开头。接下来,您可以做以下操作:

  • 选择列出的建议并 接受 它。

  • 忽略一次:下次遇到这个词时,拼写检查器将再次标记它。

  • 忽略这个词 在本次会话的其余部分:在此检查期间,任何其他出现的该词都会被忽略,但下次运行拼写检查器时,它会再次标记该词。

  • 将该词添加到一个活动词典中,这样它将不会在本次或后续会话中被标记为拼写错误。

此外,由于对话框不会锁定 Inkscape 窗口,您可以像平常一样使用文本工具编辑该词。一旦将其编辑为可接受的内容,拼写检查器将自动关闭红框并继续检查文档。

您可以随时通过点击 停止(或直接关闭 检查拼写 对话框)来停止拼写检查。通过再次点击 开始 来重新启动已停止的检查。

15.7 文本扩展

在“扩展”▶“文本”中有许多扩展工具非常有用,用于处理文本。它们包括:

  • 一组大小写转换扩展可以将选定的文本对象转换为大写、小写、句子首字母大写、标题大小写(每个单词的首字母大写)、反转大小写(将小写转为大写,反之亦然)或随机大小写。所有这些扩展仅在选定的对象上起作用。

  • 一个简单的替换字体扩展可以在文档中搜索并替换特定字体,或者用一个单一的字体替换所有字体,或者仅列出文档中使用的字体。

  • 拆分文本会将选中的文本对象拆分成行、单词或单个字符,并将它们作为独立的文本对象添加到文档中(不幸的是,它不会保留单词和字符的位置)。

15.8 创建字体

创建新字体并非面向普通用户。你需要掌握的大量术语令人望而却步。不过,拥有一个自己创作的原创字体,并可以在任何地方使用,确实是很有诱惑力的。最棒的是,你也可以在 Inkscape 中(大部分功能)完成这项工作!

Inkscape 的字体编辑功能基于 SVG 1.1,其中包括将自定义字体直接存储在 SVG 文档中的规定,并可以用于文本。不幸的是,SVG 2.0 中删除了这部分标准,因为它未能在浏览器中获得广泛支持。不过,Inkscape 仍然支持创建带有嵌入 SVG 字体的 SVG 1.1 文件,你可以使用开源字体编辑器 FontForge (fontforge.org/) 将这样的 SVG 文件转换为标准的字体格式,例如 OpenType。你可能不希望通过这种方式制作具备高级功能的商业字体,但对于一些简单的字体,例如模仿你手写字的字母字体,这是完全可行的。

我不会详细描述这个功能,因为字体创作的整个过程完全可以写成一本书。下面是一个高层次的概述,应该能帮助你入门。

你可以从任何空白文档开始,但有一个方便的排版画布模板(文件 ▶ 从模板新建),提供了一个 1024x1024 像素的正方形,并在定义拉丁字母的水平位置上添加了水平参考线:基线、小写字母的升部和降部,以及大写字母的高度。每个字母的形状都应在单独的图层中创建;每个字母必须是一个单独的路径。

然后,打开文本 ▶ SVG 字体编辑器对话框。点击新建按钮创建一个新字体。接着,转到字形标签,并通过点击添加字形开始添加字形;字形名称可以是描述性的(例如,“小写字母 a”),但匹配字符串必须包含此字形将使用的确切字符(也就是说,小写字母 a 的匹配字符串就是“a”)。在高级列中,输入该字符在字符串中的占位距离(即它的宽度加上一些默认间距)。

最后,你需要将已制作的字母形状路径复制到字体的字形中(图 15-24)。确保在画布上选择了路径,并在列表中选择了相应的字形,然后点击从选择中获取曲线按钮。以后,如果你在其图层中编辑了字形的形状,你需要重新进行这一步复制,以更新字体。要预览你的字形在一个字符串中的效果,可以在预览文本中输入一些内容,并在预览窗格中查看结果。你还可以通过进入对话框的字距调整选项卡,为特定字形对指定自动字距。

图 15-24:创建字体:在图层中绘制字符,然后在文档中创建新字体,并将每个路径复制到字形中。

当你的字形准备好后,保存 SVG 文件并在 FontForge 中打开以进行检查。如果看起来不错,可以通过 FontForge 中的文件 ▶ 生成字体将其保存为 OpenType 格式。然后,你可以将生成的.otf 文件安装到操作系统中,供任何程序使用。如果你需要更改字体的一些参数,通常可以在 FontForge 中进行修改;然而,如果你想在 Inkscape 中编辑字形,你需要返回原始 SVG 文件,编辑其层中的路径,并确保将每个更改后的字形路径复制到字体中(从选择中获取曲线)。

第十六章:彩色插图

图 1:一个包含 280 个对象(主要是路径)的复杂矢量图示例(第 4 页)

图 2:通过 RGB 滑块编辑填充和描边颜色(第 146 页)

图 3:通过 CMYK 滑块编辑填充和描边颜色(第 146 页)

图 4:通过 HSL 滑块和颜色轮编辑填充和描边颜色(第 147 页)

图 5:Inkscape 默认的颜色调色板位于窗口底部;此处显示了无需滚动即可查看所有颜色。您可以选择 Inkscape 附带的约 20 种调色板,或者创建自己的调色板(第 147 页)

图 6:在 HSL 空间中使用颜色手势调整填充或描边颜色(第 151 页)

图 7:线性渐变中的中间停止点(第 184 页)

图 8:通过渐变创建半透明玻璃效果(第 187 页)

图 9:美味的梨(见正文中标记节点的注释)(第 194 页)

图 10:用渐变网格修复蒙娜丽莎(第 194 页)

图 11:用 Tweak 工具的颜色绘制模式和宽画笔绘制的 3D 方块组成(第 212 页)

图 12:彩虹图案(第 349 页)

图 13:处理选定值,将亮度映射到大小(第 350 页)

图 14:在描摹时应用所选并处理的值(第 350 页)

图 15:将混合模式应用于覆盖位图的彩色矩形。所有前景矩形的透明度为 100%,除非另有指示(第 357 页)

图 16:多次扫描描摹:12 种颜色(第 389 页)

图 17:玫瑰(第 451 页)

图 18:修饰过的照片处理(第 462 页)

第十七章:克隆与符号

克隆的概念——一个与原始对象链接的副本,当原始对象变化时,克隆会自动更新——自然地源自于图形的矢量思维方式。从某种意义上说,克隆并不是一个真实的对象——而是一个命令:“在这里显示一个对象的副本。” 文档保存的是这个命令,而不是一个实际的对象。只有当 SVG 应用程序(如 Inkscape)显示文档时,实际对象才会在内存中创建,而不是命令。

使用克隆有艺术性和技术性的原因。仅仅编辑一个对象时,看着多个对象实时变化是一种令人兴奋的体验,激发了许多创意的可能性。另一方面,使用克隆代替复制可以让 SVG 文档更小、更快加载。地图符号、重复设计元素如项目符号或图标、各种对称设计或图案——所有这些都可以通过克隆自然实现。很少有其他矢量编辑器像 Inkscape 一样,能如此直接、轻松地创建实时链接的对象副本。

16.1 创建克隆

要克隆一个或多个对象,只需选择它们并按下 Alt-D(或编辑 ▶ 克隆 ▶ 创建克隆)。此操作的可见结果与复制(Ctrl-D)完全相同:会创建并放置在原始对象上方的(每个)选定对象的副本。如果你需要将多个对象整体克隆,可以将它们组合在一起并克隆该组。

克隆是一个链接的对象副本,如图 16-1 所示。这个链接的构成是什么?

最重要的是,克隆复制了原始对象的内容。如果它是路径的克隆(第十二章)或形状的克隆(第十一章),它会完全复制原始对象的形式,并且当你在节点工具或形状工具中编辑原始对象时,它会自动更新。如果它是文本对象的克隆,它会有相同的文本内容,并且当你用文本工具编辑原始对象时,它也会实时更新。最后,如果你克隆一个组,你可以进入该组(5.10)来添加、删除或编辑组内的对象——而组的克隆会立即更新。另一方面,由于克隆没有自己的内容,所以你不能编辑它的内容——只要它是克隆,就不能对其进行节点编辑、文本编辑或取消分组操作。

图 16-1:克隆是一个与对象链接的副本。

那么变换呢?如果你缩放、旋转或倾斜原始对象,所有它的克隆都会做同样的操作(图 16-2)。然而,如果你只是移动原始对象,默认情况下克隆不会移动(尽管这个行为可以改变,见下文)。当然,如果你同时选择原始对象和它的克隆,你可以一起对它们进行变换——移动、缩放、旋转或倾斜。

图 16-2:克隆会响应原始对象的变换,除了移动。

你还可以完全独立地移动、缩放、旋转或倾斜克隆。克隆自身的变换是在其继承自原始对象的变换之上应用的。例如,如果你将克隆在垂直方向上挤压,然后旋转原始对象,克隆将同时旋转并被挤压——但是,垂直挤压将应用于旋转后的形状之后,从而导致变形,如图 16-3 所示。

图 16-3:克隆的自身变换是在它继承自原始对象的变换之上应用的。

原始对象的样式也会传递给它的克隆。如果你为原始对象涂上不同的填充或描边颜色,所有的克隆将立即采用相同的颜色。相反,如果你试图改变克隆的颜色,它将拒绝改变,保持原始状态。(再次强调,这个规则也有例外,稍后你将看到。)

这张表总结了你可以和不能对克隆及其原始对象进行的各种操作,以及这些变动是如何相互影响的:

移动 缩放、旋转、倾斜 节点或形状编辑 样式

| 应用到原始对象 | 影响克隆

(默认) | 影响克隆 | 影响克隆 | 影响克隆 |

应用到克隆 是可能的 在原始对象的变换上进行变换是可能的 是不可能的 是不可能的(除非在原始对象中取消设置)

16.2 变换克隆

正如你所看到的,克隆可以以任何方式进行变换,而这种变换会应用在它继承自原始对象的变换之上。你可以使用任何变换方法——用鼠标拖动、通过快捷键进行变换(6.5)、对齐、分布和捕捉等,这些方法对克隆的作用与对常规对象完全相同。

另一方面,原始对象的变换会根据其对克隆的影响,被分为两类:简单的移动和其他所有变换。对于“其他所有变换”(缩放、旋转和倾斜),这些变换会传递给所有克隆。而简单的移动则会被视为不同的操作。

默认情况下,Inkscape 尝试将克隆隔离,这样当原始对象被移动时,克隆会保持在原地。实际上,这是通过将克隆向相反方向移动来补偿原始对象的移动来实现的。这种方式非常直观,并且通常很方便;例如,你可以将一个由大量克隆组成的大型图案的原始对象移动而不打乱图案。你还可以同时选择原始对象及其克隆并将它们一起移动,它们会按预期行为表现——即,它们会并行移动,即使克隆本身有自己的变换。

用户可以修改这种补偿行为。偏好设置对话框的行为 ▶ 克隆页面(图 16-4)包含以下选项:

  • 平行移动强制所有克隆体(包括那些已旋转或缩放的克隆体)始终与原始对象平行移动,仿佛它们始终与原始对象一起被选中(即使实际上并非如此)。

  • 保持不动(这是默认设置)强制那些未被选中的克隆体保持不动(但已被选中的克隆体按正常方式移动)。

  • 根据变换移动会关闭任何克隆体的移动补偿。此时,每个克隆体,无论是否被选中,都将根据其原始对象继承的变换进行移动,不进行任何补偿。当复杂的变换生效时,最终的行为可能会显得混乱——但从 SVG 的角度来看,这是最不干扰的选项,因为克隆体的继承变换并没有受到任何干扰。

图 16-4:设置克隆体的移动补偿

此外,变换克隆体时不会尊重选择器控制栏上的影响按钮(6.11):它总是表现得像所有这些按钮都已被按下。你不能以某种方式缩放克隆体,从而使其笔画宽度保持不变或渐变不受影响——因为你变换的实际上是原始对象的图像,而该图像无法与原始对象相比,拥有不同的笔画宽度或渐变位置。

16.3 克隆体的样式设置

我之前提到过,克隆体继承其原始对象的样式:一个红色矩形的克隆体将是红色的。然而,针对这一限制,有几个例外和解决方法。

首先,透明度(8.3)和模糊(17.1)不受此限制:你可以轻松地将克隆体模糊或使其半透明。这是因为这些属性是累积的——也就是说,如果你先模糊某个对象,再模糊它的父对象,这两个模糊效果会相加,最终效果会比单独的任何一个模糊效果更模糊。这也意味着,如果你的原始对象已经被模糊或具有小于 100%的透明度,你可以使它的克隆体变得更加模糊或更加透明,但不能变得不那么模糊或透明。

同样适用于滤镜效果(第十七章;实际上,模糊只是众多滤镜之一)。你可以对克隆体应用任何滤镜,它会叠加在原始对象的滤镜之上。例如,你可以通过应用颜色偏移滤镜将红色矩形的克隆体变为绿色或灰色。

但是,普通的填充或笔画颜色呢?你可以在克隆体中更改它们——但前提是原始对象配合。也就是说,你想在克隆体中更改的任何样式属性,必须在原始对象中取消设置。取消设置(8.2)与设置为none不同:一个属性被取消设置时,它只是未被指定,这使得克隆体的属性可以生效,如图 16-5 所示。

图 16-5:如果原始对象未设置油漆,克隆体可以被涂绘。

Inkscape 在填充和描边对话框中有一个特殊按钮,并且在选定的样式指示器中(8.6)也有一个命令,用于取消对象的填充或描边属性。取消描边的对象只是没有可见的描边,但如果取消其填充,它会显示为黑色。如果你想取消其他样式属性,请使用选择器和 CSS对话框(8.1)来移除你希望覆盖的克隆属性。

如果原始对象是一个组,你可以仅在该组中的某些成员中取消填充或描边,其他成员保持有色。然后,如果你克隆该组并对克隆进行着色,只有那些取消属性的对象会呈现该颜色,而其他对象将保持原样。

16.4 链接克隆

复制(4.5)或复制并粘贴一个克隆,会得到另一个相同原始对象的克隆。(你可以复制并将克隆粘贴到另一个文档中,但必须连同其原始对象一起粘贴;如果你只尝试粘贴一个克隆,它将变成孤立并不可见。)复制一个现有克隆通常很方便,因为这个副本也会获得第一个克隆的变换和样式(如果有的话)。当然,你也可以通过再次克隆原始对象来获得另一个克隆。

没有什么能阻止你克隆一个克隆对象本身。结果对象——一个克隆的克隆——仍然会显示其最终原始对象的内容,但与原始对象的链接不再是直接的:它现在是原始对象的孙代克隆,而不是子代克隆。这样的孙代克隆首先会继承原始对象的变换和样式,然后继承其父克隆的变换和样式,最后再在其上应用自己的变换和样式。这样的克隆链(可以有任意长度)很少有用;几乎所有情况下,都可以使用同一原始对象的多个克隆,如图 16-6 所示。

图 16-6:使用同一对象的多个克隆,而不是克隆的克隆。

要判断你选择的对象是否是克隆对象——如果是,它是哪个对象的克隆——请查看状态栏。它会描述你选择的对象,例如,克隆自:组或克隆自:克隆自:路径。如果你想知道哪个对象是选定克隆的父对象,请按 Shift-D:Inkscape 会从克隆绘制一条虚线到其原始对象(那条线会在一秒钟后消失),并选中原始对象,如图 16-7 所示。

图 16-7:按 Shift-D 查找克隆的原始对象。

16.5 取消链接和重新链接克隆

克隆与原始对象之间的实时链接是其主要特性——毕竟,这就是我们使用克隆的原因。这个链接在复杂设计中方便了很多任务;例如,你可以在网站模型中使用克隆来做相同的按钮或项目符号,然后通过更改它们的共同原始对象一次性更改所有这些元素。然而,有时这个链接会成为障碍。如果你想独立编辑一个克隆,你需要取消链接该克隆。

选择一个克隆(或克隆的克隆)并按 Shift-Alt-D(或选择编辑 ▶ 克隆 ▶ 取消链接克隆)。从视觉上看,没什么变化,但该对象不再是克隆——它现在是原始对象的副本,所有附加的变换和样式都被保留,但现在独立且完全可编辑。你可以一次取消多个克隆的链接。

如果你删除了克隆的原始对象,会发生什么?默认情况下,它的克隆会自动取消链接——也就是变成被删除对象的副本。然而,你可以在首选项对话框的同一行为 ▶ 克隆页面中,强制克隆在其原始对象删除时也消失(图 16-8)。

图 16-8:当原始对象被删除时设置克隆的行为

当你重新链接一个克隆时,它仍然是克隆,但其原始对象会发生变化。操作步骤如下。假设你有一个对象 A 的克隆 C,但你希望它成为对象 B 的克隆。选择 B 并将其复制到剪贴板(Ctrl-C),然后选择克隆 C 并点击编辑 ▶ 克隆 ▶ 重新链接到已复制的。之后,C 将成为 B 的克隆——根据 B 的内容,C 可能会改变形状、样式、位置、变换,或者这些的组合,如图 16-9 所示。

图 16-9:将克隆重新链接到不同的原始对象

手动重新链接是一个很少需要的操作。更有用的是在复制时自动重新链接。假设你有一个复杂的对象小组,其中一些是其他对象的克隆——例如,一个 3D 风格的图形按钮,其中阴影是主形状的模糊克隆。现在,假设你选择了整个小组并进行复制。会发生什么?

在该小组内,每个常规对象会复制为常规对象,每个克隆会复制为克隆。然而,克隆仍会与源组中的原始对象保持连接——这很可能不是你想要的!更自然的方式是,在复制的小组中,阴影应该是在同一小组中的形状的克隆,而不是远离的其他小组的克隆。为了确保这一点,在同一行为 ▶ 克隆页面中,勾选复制原始对象+克隆/链接偏移:重新链接复制的克隆。现在,复制之后,你将拥有两个独立的按钮,每个按钮都有自己可编辑的形状,并且阴影与该形状相关联(图 16-10)。

图 16-10:在复制时自动重新链接克隆

16.6 克隆的平铺

强大的“创建铺设克隆”对话框(编辑 ▶ 克隆 ▶ 创建铺设克隆)是一个一次性创建多个克隆的工具,可以将克隆排列成各种空间和颜色模式,从完全规则到完全随机都有。作为附加功能,你还可以让克隆的图案追踪下面的图像。

16.6.1 图案大小与边界框

第一步是选择你要克隆的对象。我建议使用一个组合体;即使你只有一个对象,也可以将其组合起来(Ctrl-G)。这样,你稍后可以向原始组合中添加更多对象,克隆将会反映出这些变化。将原始对象放置在你希望填充图案的区域的左上角。

创建铺设克隆对话框中,首先指定铺设的大小(图 16-11)。你可以指定图案中的行数和列数;或者,如果你有一个特定的区域要填充,你可以输入或粘贴该区域的宽度和高度。请注意,图案太大(克隆数量超过几千个)可能会显著降低 Inkscape 的性能。

图 16-11:设置图案的大小

一旦你设置了下面所描述的所有其他参数(或者直接信任默认设置),点击创建按钮。图案会出现在画布上,但你仍然选中原始对象。删除按钮会删除任何先前已铺设的克隆对象。请注意,创建操作会首先执行删除操作——也就是说,当你点击创建时,任何现有的铺设克隆(但不包括通过 Alt-D 创建的常规克隆)都会被删除,并由新的图案替换。

“取消聚集”按钮的功能与对齐和分布对话框中的同名按钮完全相同(7.5.2),不同之处在于,它会移动选定对象的所有铺设克隆,而不是所有选定对象,如图 16-12 所示。取消聚集特别适用于使随机化图案更均匀,而不会使其变得规则化。“重置”按钮会将所有对话框参数恢复为默认值。

图 16-12:取消聚集一个随机化图案

“使用已保存的图案大小和位置”复选框在第一次创建图案时没有效果。然而,如果你修改了要铺设的对象并重新创建图案,通常 Inkscape 会使用修改后的对象大小,这可能导致图案的整体大小和瓷砖的对齐发生变化。为了让 Inkscape 即使在对象大小发生变化时,也使用上次创建图案时的相同瓷砖大小,可以勾选此复选框。例如,你可以从一个矩形创建一个图案,微调所有参数,然后放大原始矩形并重新创建图案,同时勾选此复选框。这会给你和上次完全相同的图案,但瓷砖会更大并互相重叠。

所有拼贴图案都包括一个精确(除非随机化)覆盖原始物体的克隆。这意味着如果你丢失了原始选择,只需点击原始位置将选择覆盖的克隆,而不是原始物体。使用 Alt-click(5.9)或选择任何克隆并按 Shift-D 跳转到原始物体。

16.6.2 对称性

对话框中的第一个标签标题为对称性。它包含一个对称性组列表,从中选择一个用于你的图案。每个对称性组是将克隆转换为图案的特定方式。这些组的数量恰好是 17,因为已经证明任何平面上的规则图案都可以分类为这 17 种类型;详细信息和示例请参阅 Wikipedia 上的“墙纸群”文章。以下是对称性类型的简要概述:

P1

这是最简单的对称性:图案瓷砖仅仅在矩形网格中重复,而没有任何旋转或翻转(图 16-13)。

图 16-13:基本对称性:P1

P2、PM、PG、CM、PMM、PMG、PGG 和 CMM

这些对称性使用 180 度旋转以及垂直和水平翻转的各种组合(图 16-14)。然而,所有这些对称性都使用与 P1 相同的矩形网格布局,其中每个网格单元的宽度和高度与原始物体相同。

图 16-14:带有翻转和 180 度旋转的对称性

P4、P4M 和 P4G

这些对称性涉及 90 度旋转,因此产生基于正方形的图案。P4M 对称性导致矩形瓷砖的部分重叠;通过它,你可以使用三角形瓷砖避免重叠并填充平面,如 图 16-15 所示。

图 16-15:带有 90 度旋转的对称性

P3、P31M 和 P3M1

这些对称性涉及 120 度旋转,因此呈现出大致三角形的外观(图 16-16)。同样,P31M 创建了更密集的图案,瓷砖部分重叠,因此你可以使用“派切”形状来填充平面,避免重叠。

图 16-16:带有 120 度旋转的对称性

P6 和 P6M

这些对称性将瓷砖旋转 60 度,形成类似雪花的六角形图案(图 16-17)。其中,P6M 再次重叠瓷砖,需要使用“派切”形状填充平面而不产生重叠。

图 16-17:带有 60 度旋转的对称性

对于重叠瓷砖的“密集”图案(P4M、P31M、P6M),尝试创建图案后缩小原图。这将使图案更加稀疏,并且其特征逻辑会更容易理解。

在处理镶嵌图案(一种在没有间隙或重叠的情况下完全填充平面的图案)时,即使你理解所选择的对称方式,单独创建所需的图块形状也会非常困难。相反,你可以从任何随机形状开始,使用所需的对称性来创建图案,然后对原始路径进行节点编辑,观察图案的克隆如何重复其变化。通过这种方式,你可以轻松地制作出一个令人惊讶的复杂镶嵌图案(请参阅 25.2 了解示例)。

16.6.3 平移、缩放和旋转

对话框中的接下来的三个标签允许你指定要应用于图案平铺的附加变换——即在选择的对称群体所创建的平移、旋转和翻转之上的变换(图 16-18)。

图 16-18:平移、缩放和旋转标签

你可以为每行和每列单独指定所有这些附加变换组件,并且每个值可以包括一定程度的随机性。你可以指定,例如,“使每行的图块高度增加 20%,使每列的图块旋转 5 度,并使旋转角度随机变化 10%。”所有平移、缩放和随机化的值都以原始物体的尺寸百分比来衡量。

图 16-19 展示了平移的应用方式。

图 16-19:为每行和每列指定平移(PG 对称性)

负向平移也是可能的。当然,为了让所有克隆重叠到原始图形上,你需要为每列指定平移 X: –100%和平移 Y: –100%。如果将其与每行的旋转结合使用,就容易制作出花朵或时钟面盘,如图 16-20 所示。

图 16-20:为每行和每列指定缩放和旋转

如图 16-21 所示,你可以使值交替变化(例如,每隔一行缩放克隆)。Cumulate 复选框会强制平移或缩放值累积。例如,通常每列的平移 10 像素意味着每列相对于前一列平移 10 像素;如果你选中 Cumulate,则相同的值会使每一列比其前一列平移 10 像素——即第二列与第一列相距 10 像素,第三列与第二列相距 20 像素,依此类推。

图 16-21:交替变换

在计算复杂对称图形的变换值时,什么被认为是“行”和“列”?Inkscape 通过对称的克隆簇(3、4、6 或 12 个克隆,取决于对称性)绘制复杂图案,横向地从一个簇到下一个簇。换句话说,属于同一个簇的克隆被视为在同一行中,但位于不同列中。这意味着,按行值会改变簇的行数,或者在每个簇中均匀缩放克隆,而按列值则会独立影响每个克隆——结果是簇失去了其对称性,正如图 16-22 所示。

图 16-22:变换复杂对称性

如果你想在两个维度上间隔对称簇,只需创建一个包含所选对称性的单一簇,将其分组,并使用简单的 P1 对称性平铺该组,可能会进行交替偏移。

16.6.4 模糊度和不透明度

这个对话框标签看起来和功能非常类似于变换标签;在这里,你可以按行或按列调整图案中克隆的模糊度和不透明度,并可选择进行交替或随机化(见图 16-23)。记住,你只能使克隆的模糊度或不透明度比原始图形更多,而不能更少。

图 16-23:在图案中变化模糊度和不透明度

16.6.5 颜色

如你在 16.3 中所见,如果你想用克隆的自身颜色进行绘制,必须先取消原始图形中对应的属性。一旦你为要更改的绘制部分(填充、描边或两者)完成了此操作,创建平铺克隆对话框将允许你创建各种颜色模式。

对话框的颜色标签看起来与之前看到的标签相似(见图 16-24)。在这里,你可以在 HSL 模型中按行或按列变化克隆颜色的三个组成部分——色调、饱和度和明度(见 8.4.3),并且可以交替或随机化这些变化。你还需要指定所有这些变化将从哪个初始颜色开始;只需点击颜色样本并使用颜色选择器对话框即可。记住,原始图形必须取消填充或描边,否则此标签将不起作用!

图 16-24:为颜色标签设置初始颜色

例如,通过从红色开始,并且每行和每列将色调变化 5%,你将得到一个倾斜的彩虹(见颜色插图中的图 12)。

16.6.6 跟踪

创建平铺克隆对话框的最后一个标签(见图 16-25)是不同的。在这里,你可以使图案跟踪它所构建之上的任何图像——也就是说,使每个克隆的某些方面取决于其下方的内容。你正在跟踪的背景图像可以是导入的位图(如照片)或任何矢量图形;跟踪器选择值时,选择什么样式无关紧要。

图 16-25:追踪标签

该标签包含三个主要区域,分别对应追踪算法的三个主要步骤。首先,在每个克隆的当前位置选择一个值;其次,对该值进行一些可选处理;最后,将结果应用到克隆的某个方面。通过勾选在瓷砖下追踪图形复选框来启用该标签的控制。

对于输入值,您可以选择颜色、透明度或 RGB 或 HSL 模型中任何单一组件的值。为每个克隆所选的值将在克隆的边界框将要覆盖的整个矩形区域内平均。所有这些选项都会产生一个范围从 0 到 1 的单一数值,除了颜色,它会选择颜色的三个组件作为复合值。

处理该值的可能方式包括:

伽马校正

正伽马会将所选值向上移动;负伽马则会将其向下移动。

按给定百分比进行随机化

该值将具有给定大小的随机成分:0%的随机化意味着值与所选值完全相同,100%的随机化意味着它是完全随机的,完全不依赖于所选值。

反转

将高值转为低值,反之亦然。

如果选择了颜色,则该处理将独立应用于每个组件(参见颜色插图中的图 13)。

最终,所得的值可以应用于克隆的存在概率(0 表示克隆在该位置不存在,1 表示存在,介于两者之间的值使其以给定的概率出现);颜色(如果选择了背景色,则可以直接重用,否则将单一值转换为灰度色);大小(从 0 时的消失到 1 时的完全大小);或透明度(较小的值使克隆更加透明)。您可以同时启用多个选项;例如,您可以选择亮度,反转它,并将其同时应用于克隆的透明度和大小(参见颜色插图中的图 14)。

16.7 符号对话框

您可以将符号看作是组织在库中的克隆,用于重复使用。Inkscape 的对象▶符号对话框(Shift-Ctrl-Y)让您可以访问 Inkscape 自带的多个常见图形符号集。您还可以使用它来创建和管理您自己的自定义符号集合。

Inkscape 的预打包符号集应该能让您了解哪些类型的对象适合组织成库:

AIGA(美国平面艺术协会)

城市标识,主要用于机场:到达、海关、美发店——非常容易识别,也非常具有 1970 年代的风格。

美国国家公园服务地图符号

营地、导游小道、邮局——在风格上与 AIGA 符号相似。

流程图形状

流程图中的常规模块,如存储、提取、合并、显示等。

逻辑图符号

与门、或门、非门及其相关符号。

文字气泡

用于漫画中的各种形状的文字气泡。

要在文档中插入符号,只需将其从对话框拖动到画布上。你得到的对象表现得像是某个对象的克隆,但状态栏描述为符号;然而,如果你想编辑这个对象,你可以像编辑克隆一样执行编辑▶克隆▶取消链接克隆操作。(如果你只想移动、缩放或旋转符号,则无需取消链接它。)

符号对话框中的搜索字段允许你根据符号描述中的某个词语或短语来查找符号。搜索将在当前选中的符号集内进行,或者如果你选择符号集:所有符号集,将在所有符号集中进行。

如果你将对话框切换到当前文档(图 16-26),你会看到它已经包含了你从标准库中添加的所有符号(如果有的话)。在这里,你还可以将自己的对象添加为符号:选择一个对象并点击左下角的添加符号按钮。一旦新符号添加到列表中,原始对象可以被删除并用符号的副本替换。你的新符号将以你创建时的相同大小和样式插入。

要从文档中删除一个符号,选择列表中的符号并使用删除符号按钮;之后,符号的实际副本将被放置在画布上,所有该符号的实例将被转换为该可见对象的克隆。

图 16-26:符号对话框管理当前文档中的符号

如果你想在文档之间共享自定义符号库,你需要做的就是将包含符号的 SVG 文档放入 Inkscape 的符号文件夹中(进入首选项系统页面,并点击打开,位于用户符号旁边)。之后,你的符号集将出现在符号集列表中(以你的 SVG 文件名命名)。

第十八章:滤镜

Inkscape 滤镜是一种将复杂的位图处理算法应用于绘图对象的方式。忠实于矢量精神,滤镜是非破坏性的:你可以随时更改任何滤镜的参数,且原始的矢量对象仍然可以完全编辑。滤镜的应用示例包括模糊、锐化、色彩调整、添加纹理、各种失真、类似 3D 的效果(如斜角)等。此外,你还可以将多个滤镜组合成任意复杂的滤镜堆栈

SVG 滤镜(如 SVG 标准定义并由 Inkscape 实现)非常强大;关于它们的使用和功能,可以写一本书。不幸的是,它们也可能相当技术性,尤其是当你尝试自己组合滤镜堆栈时。在本章中,我首先介绍一些简单的滤镜使用方法,如模糊(17.1)和混合模式(17.2)。然后,我更一般性地描述如何管理对象上的滤镜(17.3),并概述 Inkscape 附带的预设滤镜库(17.4)。最后,对于那些需要更多功能并且不怕更技术性内容的用户,我会介绍滤镜编辑器对话框(17.5),在这里你可以从标准滤镜原语创建自己的滤镜堆栈。

17.1 模糊

正确地说,高斯模糊(以德国数学家卡尔·弗里德里希·高斯命名)是一种平滑地溶解物体的效果,就像你通过失焦镜头观看它一样。这是 Inkscape 支持的 14 种滤镜原语之一,但在所有这些原语中,模糊是最容易访问的。对于任何选定的对象,你可以通过填充和描边对话框底部的滑块来应用模糊,如图 17-1 所示。

图 17-1:填充和描边对话框中的模糊滑块

在图层对话框中可以找到相同的配对透明度和模糊滑块(4.9.4),它们作用于整个选定的图层。

简单的模糊极大地扩展了 Inkscape 的功能。模糊在物理世界中无处不在——不清晰的阴影、光晕或任何失焦或运动中的物体——因此在绘制任何现实主义作品时它都是必不可少的。它也不是你能轻易通过常规矢量形状或渐变来模仿的。因此,Inkscape 将模糊视为物体的基本属性,类似于透明度和混合模式(17.2)。

模糊滑块控制从 0 到 100 百分比范围内的模糊量;1%的模糊几乎不会改变物体的外观,而 100%的模糊会将任何物体变成没有形状的云雾。从技术上讲,100%的模糊使模糊半径等于物体大小的一半,但比例并不均匀:从 0 到 10%的模糊半径增加比从 90 到 100%的增加要小得多,因为在比例较低的部分你需要更精细的控制。

将模糊设置为百分比可以确保它对任何大小的物体都能产生相同的效果:一个被模糊 10%的大物体,其绝对模糊量(模糊半径)较大,但看起来与一个同样被模糊 10%的小物体成比例。如果你希望在不同大小的物体上得到相同的模糊半径,你需要使用不同的模糊百分比,正如图 17-2 所示。

图 17-2:模糊量(A 和 B 中相同)与模糊半径(A 和 C 中相同)

对物体进行模糊会扩大其边界框,但仅在使用视觉边界框类型时才会发生这种情况(这是默认设置,4.3)。例如,如果你想导出一个模糊物体而不裁剪模糊效果,你不能使用物体的几何边界框作为导出区域(18.6)。

你可以把每个模糊物体看作处于自己独立的完全透明的图层中,因此它永远不会“拖动”任何相邻的未模糊物体。由于该每个物体的图层是透明的,模糊物体的边缘变得部分透明。然而,你可以模糊一个组合,在这种情况下,组合中的成员会一起被模糊,仿佛它们被放置在一个单一的图层中作为整体进行模糊。

在图 17-3 中,左侧是两个相邻的矩形,它们之间没有间隙且没有模糊。在中间,每个矩形分别被模糊了 20%;正如你所看到的,条纹背景透过物体间的模糊间隙显现出来。然而,在右侧,相同的矩形被组合在一起,然后整个组合被模糊了 20%;现在没有间隙——模糊只在边缘增加了透明度,但无法揭示遮挡在不透明组合中心的部分。

图 17-3:模糊单独物体与模糊组合物体的对比

组合还允许你对同一物体应用多个模糊层。例如,你可以先对物体本身进行模糊,然后将它组合起来(甚至可能与自身组合,形成一个由单一物体组成的组合),再对该组合进行模糊。自然地,通过模糊组合,你可以使物体看起来比之前模糊,但不能更少模糊。(同样,正如你在 16.3 中看到的,你可以使克隆比原始物体模糊得更多,但不会更少。)

图 17-4:模糊与羽化的对比

17.1.1 模糊与变换

当你对一个模糊的物体进行变换时,会发生什么?

移动一个模糊的对象时,整个对象会一起移动,不会影响模糊效果。比例(均匀)缩放同样会整体缩放对象,包括模糊半径,因此模糊百分比(在填充和描边对话框中)不会改变。

非均匀缩放更有趣。例如,如果你将一个模糊的对象在垂直方向上压缩,它的模糊效果也会随之压缩,并变得不均匀——此时,对象在水平方向上的模糊程度大于垂直方向。这样的非均匀模糊可以近似现实世界中的运动模糊——即物体在快速运动下拍摄的照片效果(在本例中是水平运动)。因此,如果你想对一个没有压缩的对象应用非均匀模糊,可以先将它在相反方向上拉伸,模糊它,然后再将其压缩回原形(此方法仅适用于路径和位图),如图 17-5 所示。

图 17-5:运动模糊,逐步实现

你也可以通过在“滤镜 ▶ 模糊 ▶ 模糊...”可调滤镜对话框中设置不同的水平和垂直模糊值来创建非均匀运动模糊,但这里描述的拉伸/压缩方法通常更为简单。

要在一个组或文本对象上创建运动模糊(即不是路径或位图),请使用这个技巧。拉伸该对象,然后将其与自身分组(Ctrl-G,4.8),对该组应用模糊效果,再将其压缩回原形。分组步骤确保最终得到的对象具有正确的比例,同时压缩的transform属性也会影响模糊效果。

许多其他滤镜在变换时的行为也适用类似的说明。例如,压缩和/或旋转对象可以创建纹理滤镜的透视失真变体(17.4),并应用于 3D 场景中的墙壁和地板(第二十二章)。当然,通过拉伸和压缩对象来变换滤镜不如在画布上拖动手柄那样方便,但它是可行的。

17.1.2 模糊调整

调整工具的模糊模式会使选中的对象在画笔下的模糊程度增加(默认)或减少(按住 Shift 键时)。模糊的量取决于力度、笔压(如果你使用的是平板笔)、对象与画笔中心的距离以及你施加画笔的时间长度。

17.2 混合模式 [1.1]

选择混合模式会影响对象颜色与其下方背景对象颜色的混合(混合)方式。像模糊一样,混合模式可以在“图层”和“填充和描边”对话框中轻松访问——你可以在这些地方分别为图层和单个对象更改混合模式。

总共有 16 种混合模式,其中包括默认情况下所有对象都具有的 Normal 模式。每种混合模式基本上是一个公式,计算堆叠在一起的两个或多个对象中每一点的可见颜色。在默认的 Normal 模式中,只有在前景对象的不透明度低于 100% 时,背景对象的颜色才会被考虑进去。然而,在所有其他模式中,即使前景完全不透明,背景也可能以某种方式透过(具体取决于模式和顶部对象的颜色)。

你可能已经熟悉了位图图形编辑器中混合模式的工作方式,比如 GIMP 或 Adobe Photoshop,它们让你可以改变每一层绘图如何与下方的层叠合。在 Inkscape 中,混合模式也经常用于调整导入的位图外观,使用不同的模式和有色“镜头”,以此方式它们变得不可或缺——你无法通过普通模式的有色透明效果达到同样的效果。你可以使用外部位图编辑器调整位图的颜色(Inkscape 甚至会重新读取由外部程序更改的链接图像,18.2.1),或者使用预定义的合成滤镜,如 Sepia(褐色调)。然而,在大多数情况下,更简单且更灵活的方法是将纯色或渐变覆盖层放在图像上,改变该覆盖对象的混合模式,并调整其不透明度来控制效果的强度。

我不会用所有模式的细节和公式把你搞晕;相反,我会尝试有意义地分组和对比各种模式,并给出一些实用的技巧,帮助你实现常见的有用效果。请参见颜色插图中的图 15,该图展示了将四个有色覆盖层(蓝色、橙色、黑色和白色)应用到 蒙娜丽莎 上。顶部一行显示了原始位图和两个 Normal 模式的覆盖层:一个是 100% 不透明(完全不透明),另一个是 50% 不透明。所有其他混合模式都显示在 100% 前景不透明度下;如果你降低不透明度,每种模式的效果将以你预期的方式减弱。

Color Dodge、Color Burn、Hard Light 和 Soft Light 形成了两个对比鲜明的组合,其中 Color Dodge 与 Hard Light 有些相似,Color Burn 则与 Soft Light 相似。在这个组合中,左边的两种模式(Color Dodge 和 Hard Light)要么会使背景颜色变亮,要么使前景变得不透明;Color Burn 则会让背景变暗,或使前景变得不透明。最后,Soft Light 对所有四种前景颜色都有意义;在所有模式中,它最类似于部分不透明的 Normal 模式,但事实上它更有用。当 Normal 模式通过渐变背景来混合颜色时,Soft Light 会在不降低饱和度和对比度的情况下给背景上色。

乘法、筛选、变暗和变亮是另外一组四种模式,它们分为两对对立的模式:乘法与变暗相似,筛选与变亮相似。在这里,左边的两种模式(乘法和变暗)如果前景是黑色的,会使背景变暗,直到呈现为黑色;右边的两种模式(筛选和变亮)则会使背景变亮,直到变为白色。这意味着,白色前景在乘法和变暗模式下不会产生任何效果,而黑色前景在筛选和变亮模式下是不可见的。变暗和变亮模式只是选择背景和前景中较暗或较亮的颜色,而乘法和筛选模式则实际将两种颜色进行组合。

覆盖模式是我最喜欢的模式;我常常使用它与一些椭圆渐变镜头散射效果配合,在照片中加深高光(使用白色)和阴影(使用黑色),同时使整体画面看起来更阳光明媚或更阴沉。它也非常适合用来为图像上色,混合前景色而不使背景褪色(类似于柔光模式),但同时强调图像中的高光或阴影(取决于前景颜色是浅色还是深色)。

差异和排除是两种模式,它们不是加法,而是减去前景颜色与背景的差异(使用略有不同的公式)。因此,黑色前景没有任何效果(因为黑色在 RGB 中是“零颜色”),而白色前景则反转背景。其他颜色则会产生各种“有色反转”效果,对于浅色比深色更加戏剧性。

最后一组四个模式——色调、饱和度、颜色和亮度——与所有其他模式不同,因为它们不是作用于背景和前景颜色的 RGB 通道,而是将其转换为 HSL 模型(8.4.3),并以不同方式组合 HSL 通道。

  • 色调模式将前景色调与背景的饱和度和亮度相结合。与所有其他上色方法不同,这种方法完全不使用背景的色调;对于平色覆盖,它通过去色后的背景和前景色调创建一个纯粹的单色图像。

  • 饱和度模式将前景的饱和度应用于背景的色调和亮度。这是一种自然的方式来变化图像的饱和度,从完全去饱和(如果前景的饱和度为零,如白色或黑色)到极度过饱和的颜色(如果前景具有完全饱和的颜色,如亮橙色)。

  • 颜色模式将前景的色调和饱和度与背景的亮度相结合。可以将其视为色调(上色背景)和饱和度(调整背景饱和度)模式的结合。

  • 最后,亮度模式会将前景的亮度(光亮度)与背景的色调和饱和度相结合。如果你的前景是纯色,背景是图像,如颜色插图中的第 15 图,亮度模式会以其自身的颜色渲染图像,但会将所有颜色的亮度平衡到相同的水平。结果通常没有什么用处——甚至难以察觉——因为在图像中,承载大部分视觉信息的是像素的相对亮度,而不是它们的色调或饱和度。

17.3 滤镜管理

应用到对象上的滤镜是其样式的一部分。因此,可以通过复制并粘贴样式(第八章)将一个对象的滤镜复制到另一个对象。所选对象的滤镜名称会显示在状态栏中,例如:1 个对象的组合;已滤镜(镜面光)

在 SVG 中,一个对象只能应用单一的滤镜。然而,大多数滤镜由多个滤镜原语堆叠在一起构成,你可以通过将一个滤镜的原语堆叠叠加到另一个滤镜的原语堆叠上,来组合两个或更多的单独滤镜。当你将预设滤镜(17.4)应用于一个已经有滤镜的对象时,Inkscape 会足够智能地为你将它们的原语组合起来,以便你得到两个滤镜的预期合成效果(例如,纹理叠加和阴影)。

如果由于某种原因,滤镜的自动组合无法正常工作,你可以使用以下技巧。首先应用一个滤镜,然后将对象与自身组合(Ctrl-G),再将第二个滤镜应用于该组合。通过重复此操作,你可以按任何顺序对对象应用任意数量的滤镜。你甚至可以通过将滤镜应用于对象两次来加倍使用某个滤镜(尽管在大多数情况下,如果滤镜效果过弱,最好进入滤镜编辑器(17.5)并尝试调整哪些原语的哪些参数来增强效果)。

如果应用的滤镜的尺度不符合你的需求(例如,如果气泡或羽化的边缘对你的对象来说太大或太小),且滤镜本身不允许通过对话框进行调整,你可以使用这个简单的技巧:将对象缩放(放大或缩小)——例如,通过按几次 Ctrl-<或 Ctrl->,然后应用滤镜,再通过相同的倍数将结果缩放回来(或放大)。

要移除应用于所选对象的任何滤镜,请使用滤镜 ▶ 移除滤镜命令。

17.3.1 编辑滤镜区域 [1.1]

正如你在模糊部分(17.1)中看到的,应用滤镜可能会扩展对象的视觉边界框。这对于除了模糊以外的其他需要绘制、散布或将图像移出原始边界框的滤镜也适用。在 SVG 中,任何被滤镜处理的对象都有一个相关的滤镜区域——一个虚拟画布,滤镜可以在上面绘制。正是滤镜区域的大小被 Inkscape 视为被滤镜处理对象的新视觉边界框。

通常,你不需要担心这个问题。当你对对象进行模糊处理或选择预设滤镜(17.4)时,Inkscape 会自动设置滤镜区域的大小,依据每个滤镜的性质(例如,通过模糊半径扩展预滤镜边界框)。大多数情况下,这样的设置效果非常好——但有时,特别是在你组合多个滤镜或复制粘贴滤镜到不同对象时,这个自动设置的滤镜区域可能会导致滤镜外部边缘被裁剪,这时你需要手动修正。

编辑滤镜区域的最简单方法是切换到节点工具(12.5)或任何形状工具(第十一章),然后拖动视觉边界框左上角和右下角的两个小钻石形手柄,如图 17-6 所示。通常,你会扩展滤镜区域以避免裁剪,但如果需要,你也可以使用这种方法裁剪你的滤镜对象(不过在那种情况下,注意任何其他对象,它们可能由于复制或样式粘贴使用了相同的滤镜——这些对象也可能会被裁剪)。

图 17-6:通过节点工具编辑滤镜区域

滤镜区域的交互式编辑无法应用于克隆和符号。你也可以在滤镜编辑器对话框中数值化编辑任何滤镜的区域(17.5.4)。

17.4 预设滤镜

SVG 定义了有限数量的滤镜原语,你可以基于这些原语构建任意复杂的复合滤镜。在深入了解这一点之前,让我们先看看 Inkscape 附带的令人印象深刻的预设复合滤镜集合。

要将预设滤镜应用到选中的对象或多个对象,只需从滤镜菜单的子菜单中选择一个命令。要获得单个预设滤镜(或任何菜单命令)的简要描述,只需将鼠标悬停在菜单中的命令上,并查看状态栏,如图 17-7 所示。

图 17-7:预设滤镜效果

大多数滤镜会立即应用。其他的——即名称末尾带有“...”的滤镜——会显示一个对话框,你可以在其中调整其参数。这样的对话框总是有一个实时预览复选框,你可以打开它,以便在画布上实时查看任何参数变化的结果(但是,这个复选框会锁定画布,因此你无法选择其他对象,甚至不能滚动或缩放)。点击应用会根据当前参数创建滤镜,但不会关闭对话框(这样你可以选择另一个对象来应用);点击关闭则会取消对话框和预览(无需撤销)。

图 17-8 显示了一个相当复杂的可调效果示例,其对话框包含多个数字参数和一个颜色选择器。

图 17-8:可调预设滤镜的对话框

我不会在这里描述所有的预设滤镜——它们实在太多了(并且每个 Inkscape 版本都会增加更多滤镜)。不过,我会描述滤镜菜单的每个子菜单,并简要说明每个子菜单中最显著的滤镜(通常是可调的滤镜)。

17.4.1 倾斜子菜单

倾斜子菜单提供了许多关于倾斜(伪 3D 凸起边缘)主题的变化,如图 17-9 所示。在这里,你会找到不透明和半透明的材质,光泽和哑光表面,多个光源照亮的倾斜效果,有无阴影,中心有凹陷或边缘有凸起等等。大多数这些滤镜会保留对象的原始颜色,尽管它们可能会在某些地方使颜色变得更浅或更暗,从而实现 3D 效果。

图 17-9:来自倾斜子菜单的滤镜

该组中的大多数可调滤镜允许你指定倾斜的高度(平滑度)、光源的坐标(高度和方位角),以及高光的亮度和颜色。如果你选择的滤镜不可调,你仍然可以在应用该滤镜后移动光源,打开滤镜编辑器,选择应用于对象的滤镜堆栈中的镜面光或漫反射光原件,并在这里调整高度和方位角参数。

17.4.2 模糊子菜单

模糊子菜单(图 17-10)包括基本的可调模糊效果,你可以分别设置水平和垂直的模糊量。如果你想要一个非水平和非垂直的运动模糊,可以将对象旋转,使其运动方向变为水平,先进行水平模糊处理,然后再旋转回来。

图 17-10:来自模糊子菜单的滤镜

"仅模糊内容"复选框在模糊效果中仅模糊对象的内部(例如,位图中的图像),但不影响其边缘(边缘处透明度降至零)。羽化效果则相反:它模糊对象的透明度蒙版,但不影响其内容。

Apparition 和 Evanescent 将一个褪色模糊的对象副本叠加到正常副本上,使其看起来更加柔和且略显不真实,但不会模糊到无法识别的程度;其中,Apparition 作用于对象的边缘(类似于羽化效果),而 Evanescent 作用于其内容。最后,Out of Focus 尝试比普通模糊更好地模拟现实世界中近视视角下的对象内容。

17.4.3 Bumps 子菜单

Bumps 子菜单(图 17-11)包含添加各种伪 3D 纹理的滤镜,这些纹理突出了图像中的特征。它们类似于你可能在其他软件中看到的“浮雕”效果。

图 17-11:Bumps 子菜单中的滤镜

17.4.4 Color 子菜单

Color 子菜单集合了调整或转换对象颜色的各种方式。这些功能对于导入的位图特别有用,但也可以应用于矢量设计,尤其是可以将它们分组并作为整体进行过滤的复杂设计,而无需单独重新绘制每个对象。

个人而言,我更喜欢使用半透明的覆盖层与混合模式(17.2),因为它们让我可以完全控制要影响图像的哪些部分,但在某些情况下,混合模式并不足以满足需求。尽管如此,这个子菜单包括模拟任何混合模式作为效果的简单混合模式。你还可以:

  • 调整亮度-对比度。

  • 按通道反转。

  • 转换为灰度,控制每个 RGB 通道对结果的贡献程度。

  • 使用 Color Shift 旋转色调。

  • 模拟各种类型的色盲。

  • 渲染一幅使用两种(双色)或三种(三色)颜色的图像。

  • 可调地为图像着色,选择所需的颜色。

  • 使颜色变为荧光色。

  • 提取通道以获取一个 RGB 或 CMY 通道,或相对地推动它们以获得“错位打印”般的复古效果。

17.4.5 Distort 子菜单

Distort 子菜单中的滤镜对对象的内容、透明度蒙版或两者都应用随机失真效果(图 17-12)。其中包括多功能的可调 Roughen,可以设置随机波动的频率和振幅,以及该主题的一些预设变体。

图 17-12:Distort 子菜单中的滤镜

17.4.6 填充和透明度子菜单

填充和透明度子菜单包含几个基本的滤镜:

  • 通道透明度(可调)使对象的某些部分根据 RGB 通道值变为透明(例如,通过设置红色超过某个阈值的区域为透明,形成孔洞效果)。

  • Fast Crop 不会以任何方式改变对象的外观,但会在左上角和右下角添加一个带有 X 形手柄的矩形裁剪框。拖动手柄可以以无破坏的方式裁剪对象。

  • Light Eraser 渲染对象的白色或浅色区域为透明(启用反转复选框时,渲染除浅色区域以外的所有内容为透明)。

  • 填充背景会将对象边界框(加上扩展部分,17.3.1)的透明部分填充为不透明颜色(此滤镜不可调节,若要更改颜色,请使用滤镜编辑器);平坦透明度则将背景填充为白色。

  • 不透明度(可调)阈值设定对象的透明度,使所有模糊或透明渐变的边缘变得清晰。

  • 剪影(可调)将对象中的所有颜色替换为黑色或你选择的其他颜色。

17.4.7 图像效果子菜单

图像效果子菜单包含一些经典的位图处理算法,包括边缘检测(渲染图像的黑白版本,显示原图中的颜色边界)和锐化(通过增加对比度强调颜色边界)。

17.4.8 图像绘画和绘制子菜单

图像绘画和绘制子菜单汇集了模仿各种绘画和绘制技巧及材料的滤镜(见图 17-13)。并非所有这些仿真都令人信服,但许多可以激发灵感。

图 17-13:来自图像绘画和绘制子菜单的滤镜

17.4.9 材料子菜单

材料子菜单的滤镜模仿各种材料,按照对象的颜色着色,并按其不透明度蒙版剪切(见图 17-14)。名称中带有“3D”的滤镜还会在边缘添加斜角效果。

图 17-14:来自材料子菜单的滤镜

17.4.10 形态学子菜单

形态学来源于希腊语,意为“研究形状”;这些滤镜模仿内嵌/外嵌(见 12.4)以及各种类型的填充和描边,如图 17-15 所示。

图 17-15:来自形态学子菜单的滤镜

17.4.11 非现实 3D 着色器子菜单

非现实 3D 着色器用于平面颜色形状,它们类似于斜角效果,但更厚、更深入边缘,并且光与影之间的对比度要高得多(因此称为“非现实”),如图 17-16 所示。

图 17-16:来自非现实 3D 着色器子菜单的滤镜

17.4.12 覆盖层子菜单

覆盖层不会改变对象本身,而是将其作为显示某种纹理的底图,将其作为覆盖层添加到对象的原始颜色上(有时会完全遮掩原色),如图 17-17 所示。该组包括通用可调噪声填充。

图 17-17:来自覆盖层子菜单的滤镜

17.4.13 像素工具子菜单

像素工具有一个滤镜:像素化,它会抑制像素级的抗锯齿效果(见图 1-1)。它不会将矢量形状栅格化——但通过此滤镜,在任何缩放级别下,矢量形状的边缘都能保持非常清晰(通常会显得明显锯齿状)。

17.4.14 突起物和脊子菜单

凸起滤镜是有趣的滤镜,可以为你的形状添加各种扩展效果,比如滴水或火焰。脊脉子菜单的滤镜将一个物体变成沿边缘的狭窄脊状,并以不同方式处理这个脊脉(见图 17-18)。

图 17-18:来自“凸起”和“脊脉”子菜单的滤镜

17.4.15 “散布”和“阴影与辉光”子菜单

“散布”子菜单滤镜将一个物体炸裂成各种形状的碎片——树叶、立方体(看起来更像正方形)、随机喷溅的斑点——并随机散布这些碎片。

“阴影与辉光”子菜单是你寻找通用“投影阴影”滤镜的地方:该可调滤镜让你选择阴影(或辉光)的颜色和不透明度、相对于物体的位移以及模糊半径(见图 17-19)。这个组还包括几个其他的滤镜,实现了内阴影与外阴影、辉光及其组合。

图 17-19:来自“散布”和“阴影与辉光”子菜单的滤镜

17.4.16 纹理子菜单

“纹理”子菜单包含各种自然质感的纹理:皱塑料、果酱涂抹、树皮、横条纹地毯等(见图 17-20)。

图 17-20:来自“纹理”子菜单的滤镜

17.5 滤镜编辑器对话框

Inkscape 自带的预设滤镜不仅本身很有用,还可以作为你自己衍生滤镜的起点。选择一个最接近你想要效果的预设滤镜,然后从它开始调整,通常比从头开始要容易。让我们来看一下图 17-21 中显示的滤镜编辑器对话框(菜单中的“滤镜 ▶ 滤镜编辑器...”)。

图 17-21:滤镜编辑器对话框的主要区域

17.5.1 滤镜列表

对话框的左上角面板列出了文档中定义的所有滤镜;选择其中任何一个即可编辑其结构和参数。如果当前选定的对象已应用某个滤镜,列表中将显示该滤镜的勾选标记——通过设置或移除勾选标记,你可以对任何对象应用或取消应用滤镜。

右键单击一个滤镜,选择选择以选择文档中使用此滤镜的所有对象。当前未被任何对象使用的滤镜仍会保留在列表中;要从文档中移除未使用的滤镜,可以使用文件 ▶ 清理文档命令。

在列表下方,新建按钮用于添加新滤镜。如果你在一个空文档中打开这个对话框,滤镜列表也是空的。点击新建以创建一个新的空滤镜——通常命名为filter1(要重命名,只需双击列表中的名字并直接编辑)。你还可以通过右键点击滤镜并使用弹出菜单命令来复制或删除列表中的滤镜。

现在,创建或选择文档中的某个对象,并选中你的新滤镜的复选框。什么都不会改变——空滤镜不会影响对象的渲染效果。要使滤镜实际发挥作用,你需要向其中添加一些原语。

17.5.2 原语堆栈

滤镜列表右侧区域是主要的滤镜构建板,你可以在这里列出、排列并连接构成滤镜的原语堆栈。直到你向滤镜添加原语之前,这个区域将是空的。

Inkscape 支持的 16 个原语列在“添加效果”按钮旁边的下拉列表中。当你在列表中选择一个原语时,下方会显示简短的描述和插图——阅读这些描述可以大致了解每个原语的作用。所有原语的详细解释超出了本书的范围;有关完整细节,请参考 SVG 规范(w3.org/TR/SVG11/)。

相反,我们来看看创建一个相当复杂的滤镜的逐步过程,它使用了几种不同的原语。我的滤镜叫做“沙漠模糊”;我为玫瑰图像的背景着色设计了它(见图 25-5)。这个滤镜的目的是模仿在粗糙纸张上模糊的水彩笔触。

普通的高斯模糊对我来说不起作用:它太平滑、太明显是计算机生成的、太无聊了。为了实现一个可接受的水彩模仿,我需要同时模拟纸张纹理的小尺度粗糙度和水彩颜料在不同位置流动和粘附形成的大尺度“水渍”。对于这两种不均匀性,我使用了湍流原语,它在给定的尺度上生成随机的分形噪声(见图 17-22)。

图 17-22:两个湍流原语

两个湍流原语是滤镜的前两个组件——堆栈中的两个最顶部框。每个滤镜原语都有一个或多个输入和一个输出;在列表中,输入通过从右侧水平进入原语框的线条表示,输出是从框中垂直向下的线条。你可以通过拖动连接,从原语框右侧的输入三角形开始。

如你所见,一些原语的输出是其他原语的输入。通常,信息从原语堆栈的顶部流向底部,最底层原语的输出就是你在文档窗口中看到的渲染效果。你可以通过拖动来重新排列原语;右键菜单允许你复制或删除某个原语。

右侧垂直堆叠的框是什么?这些是任何原始图形都可以作为输入使用的预定义源。最有用的其中包括 Source Graphic 和 Source Alpha。顾名思义,Source Graphic 提供当前缩放级别下正在被滤镜处理的对象的渲染图像。Source Alpha 则提供原始对象的不透明度(alpha)蒙版的灰度表示;在 Source Graphic 中完全不透明的点(无论颜色如何)将在 Source Alpha 图像中显示为不透明的黑色,而透明的点则会显示为透明的黑色。

17.5.3 原始图形的参数

让我们再次看看堆叠顶部的两个 Turbulence 原始图形。它们都以 Source Alpha 作为输入,并将其结果——随机噪声——传递给其他原始图形。不同之处在于这些滤镜的参数。

当你选择堆栈中的一个滤镜原始图形时,它的参数会显示在对话框的底部窗格中。图 17-23 显示了两个 Turbulence 原始图形的参数。

图 17-23:两个 Turbulence 原始图形的参数

这两个原始图形的类型相同(Fractal Noise,在这种情况下比另一个选项 Turbulence 更合适),但它们在 Base Frequency 和 Octaves 上有所不同。Base Frequency 参数设置湍流的尺度;较高的频率会产生较小、类似沙粒的纹理,而较低的频率则会产生较大的云朵。Octaves 的数量指定算法递归的深度:增加 Octaves 会产生更锐利的不均匀性和更多的小细节;降低该值则会得到更平滑、更模糊的图像。

现在,为了将两个湍流输出合并,我使用了另一种原始图形,名为 Composite,如图 17-24 所示。

图 17-24:Composite 原始图形

它有两个输入,并通过多种方法逐像素地将它们合并。在这里,我使用了 Arithmetic 方法;根据四个系数(K1 到 K4)的数值,如所示,它将大尺度波浪和小尺度波纹合成到一个对比度稍有增加的复合图像中,如图 17-25 所示。

图 17-25:合成两个湍流的结果

到目前为止,我还没有使用滤镜将应用于对象本身的图像——也就是说,我没有使用 Source Graphic。假设那个对象是某种类似宽刷的路径,可能是使用书法笔工具(14.2)创建的。当然,要使一个平面颜色、锐利边缘的路径更像水彩笔触,首先要做的就是模糊它,如图 17-26 所示。

图 17-26:高斯模糊原始图形

高斯模糊的标准差参数类似于你在填充和描边对话框中调整的模糊量(图 17-1),不同之处在于这里它是以绝对的px单位衡量的(A.6),而不是以对象大小的百分比来表示。

如何将模糊笔触与湍流结合?在这里合成模式不起作用。任何一种模式都会导致平滑的模糊与湍流波纹叠加,底层的平滑感并没有消失(试试看)。它看起来不像粗糙纸上的水彩画——更像是通过有斑点的玻璃看到的计算机生成的模糊效果。

想想你在真实纸张上用真正的画笔作画时发生的事情。笔触的模糊是由画笔的柔软度造成的——你在画笔的中部施加的压力比在边缘大。当画笔接触到纸上的凹陷时,压力发生了变化:如果这个纸面较高,它会得到更多的颜料,就像它靠近画笔的最大压力点;如果是凹陷区域,它会得到更少的颜料。换句话说,纸张的粗糙度使得模糊的笔触在绘图平面内发生抖动,就像随机地将笔触的部分横向位移一样。你如何通过滤镜实现这种效果呢?

位移图原语非常适合这个任务。它接受第一个输入并根据第二个输入的指示移动像素。你可以选择第二个输入的哪个通道(红色、绿色、蓝色或 Alpha)来在 X 轴和 Y 轴方向上移动第一个输入,并设置这种位移的规模。在这个例子中,第一个输入是模糊的对象,第二个输入是合成的湍流场,我选择了 Alpha 通道作为两个轴的位移来源(图 17-27)。

图 17-27:位移图原语

作为额外的好处,结果在某些区域看起来更粗糙,在其他区域则更平滑。这是因为在平滑区域,位移图作用于模糊笔触的几乎平坦部分——高频抖动只是在几乎相同颜色的像素间移动,几乎不打扰平滑感。然而,在笔触的边缘,不同颜色的像素被混合并抖动,产生了可见的粗糙感。所有这些还会受到低频噪声的调制,从而产生逼真的水彩模拟效果。

然而,如果你将这个滤镜应用到浅色的笔触上(而不是黑色的,如图 17-27 所示),结果仍然不完美。当你观察真实的粗糙纸张上的水彩笔触时,看到的并不仅仅是颜料的空间分布;你还看到的是粗糙感本身,这看起来像是一个阴影模式。如果没有这些阴影,浅色的笔触即使使用这个滤镜,看起来仍然过于平坦、不自然。幸运的是,这很容易修复;我已经有了高频湍流源,一旦与位移映射模糊合成,它就能很好地作为阴影使用(如图 17-28 所示)。

图 17-28:最终滤镜和最后合成原语的参数,该原语覆盖了阴影效果

到此为止,滤镜看起来相当不错。我可以继续改进它,加入各种拖影、水漏、扩散等效果;然而,由于我的演示图像仅在背景中使用了这个滤镜,所以它已经足够满足需求。

17.5.4 滤镜区域

滤镜编辑器对话框中的第二个标签叫做滤镜常规设置。它包含应用于整个滤镜堆栈的参数,而不是某个单独的原语。目前,你在这里唯一可以更改的就是滤镜区域——即滤镜渲染的区域,单位为应用滤镜的对象边界框的单位。你可以在画布上交互式地编辑这个区域(见 17.3.1),但滤镜编辑器允许你通过数值方式来设置它。

坐标小部件指定区域的左上角,而尺寸指定右下角的坐标。所有值都以预滤镜边界框的单位来衡量。

例如,如果你将坐标设置为 0/0 并将尺寸设置为 1/1,则区域将等于预滤镜的边界框。如果你的滤镜没有超出对象(例如,仅是使用颜色矩阵原语进行颜色变化),那么这样设置是有效的。然而,对于像模糊这种会在边界框外绘制的效果,你需要提供足够的边距以避免裁剪。当你通过“填充和笔触”对话框应用模糊或使用某个预设滤镜时,这些边距会自动为你设置;然而,当你从零开始创建新的滤镜堆栈时,你必须自己处理这些边距。默认值是坐标为 0.1/0.1,尺寸为 1.2/1.2,这意味着对象四周会有 10%的边距,如图 17-29 所示。

图 17-29:指定滤镜区域

如果 Inkscape 使用视觉边界框(这是默认设置,4.3),则过滤器对象的边界框——你在选择它时在选择器中看到的框架——就是放大的过滤区域。除此之外,这意味着,当将选定对象导出为位图时(18.6),Inkscape 会确保位图包含模糊的边缘而不会裁剪掉它们。

17.6 过滤器渲染选项

Inkscape 过滤器的渲染速度多年来有了很大的提升。然而,对于复杂或大面积的过滤器,它仍然可能会成为问题。因此,Inkscape 提供了多个首选项选项来调整过滤器(以及渲染一般)的性能。

首先,你总是可以切换到轮廓模式(3.14),以加快在文档工作时的渲染速度。还有“无过滤器模式”,这与正常模式相同,只是过滤器没有被渲染;如果过滤器是导致你工作慢的主要原因,这可能是最简单的解决方法。

[1.1]

影响渲染速度的选项被集中在首选项对话框的渲染页面上(图 17-30)。你可以设置线程数(同时执行的渲染管道数),默认四个;通常建议将此值设置为你的 CPU 的逻辑处理器数(例如我的情况是八个)。你还可以增加渲染缓存(默认 64MB)并扩大渲染瓦片倍增器(默认 16)。如果你的硬件足够现代且有足够的内存,增加这些值是值得的,看看你能获得多少性能提升。此外,如果你在编辑过程中更新屏幕时注意到卡顿(例如,拖动节点时),尝试将编辑时重绘选项从默认的响应式改为保守模式。

图 17-30:首选项对话框的渲染页面

特别适用于过滤器的选项包括两个单选按钮组:显示用的高斯模糊质量和显示用的过滤器效果质量——这是你搜索最佳速度/质量平衡的地方。第一个组仅影响模糊;默认的“平均质量”看起来几乎完美,且渲染速度较快。在较低质量设置下,会出现明显的缺陷,但渲染速度更快;较高的设置几乎不会带来质量上的改善,但渲染速度明显较慢。

第二组单选按钮适用于所有过滤器(包括模糊)。它同样提供了通过牺牲渲染质量来换取渲染速度提升的选项,但它的速度优势并不显著,因此在这种情况下,“更好质量”选项可能是最佳选择。

17.7 导出过滤器到 PS 和 PDF

PostScript 和 PDF 格式虽然是矢量图形,但不支持类似于 SVG 的滤镜。默认情况下,在导出时,Inkscape 会提供将应用了滤镜的任何对象光栅化(转换为位图)的选项。这可以完全保留滤镜在 Inkscape 中的外观,但可能会显著增加文件大小。在导出选项对话框中,你可以指定位图的分辨率,并且可以关闭光栅化选项,在这种情况下,对象将保持为矢量图形,但会丧失滤镜效果(图 17-31)。

图 17-31:指定保存文档为 PDF 时滤镜的处理方式

在通过命令行导出时(C.4),相应的选项是 --export-dpi 用来指定分辨率,--export-ignore-filters 用来关闭光栅化。

第十九章:位图

大多数矢量图像在其生命周期的开始或结束时(通常是两者)都是位图形式(1.1),Inkscape 的 SVG 文档也不例外。许多矢量绘图,无论是艺术性的还是技术性的,都是通过照片、扫描或其他位图图像的描摹而开发的;而在它们生命周期的另一端,几乎所有的矢量图形都会导出为位图格式,以便在无法直接处理矢量的程序中查看。位图是 Inkscape 中重要的对象类型,处理位图的技巧足够复杂和有趣,值得专门用一章来讲解。

18.1 位图作为对象

如果你有一个位图图像文件,可以通过文件 ▶ 导入命令将其插入到 Inkscape 文档中。你也可以通过文件 ▶ 打开命令将任何位图文件作为独立文档打开。在这种情况下,Inkscape 会自动创建一个新的 SVG 文档,页面大小(3.5.2)与位图的像素大小匹配,并将位图放置到画布上(进入文档根目录——也就是不在任何图层中)。此时,你可以向该文档添加其他对象并保存为 SVG(如果你想得到包含结果的位图,你需要导出它,18.6),或者你也可以将位图对象从该文档复制并粘贴到任何其他文档中。

[1.1]

Inkscape 可以读取多种位图格式,包括所有主流格式(PNG、JPG、TIFF、GIF、BMP),但它尚不能读取相对较新的 WebP 格式,尽管它可以导出 WebP 格式。选择所有位图选项,在导入对话框中只显示支持的位图格式文件。Inkscape 的早期版本在尝试打开大于几千像素的位图时会失败;现在,如果你的计算机有足够的内存,处理几万像素的图像将不会有问题。

无论是打开还是导入,最终在文档中呈现的是一个位图对象(图 18-1)。在大多数方面,这是一个普通的对象,你可以对其进行变换、复制、克隆、应用滤镜等等。在状态栏中,它被描述为图像,并显示其像素大小,例如 640 × 480。位图的像素大小仅仅是它在水平和垂直方向上的像素数量;这与位图对象在画布上的大小不同——你可以在 SVG 中将其缩放到任何尺寸,但位图的固有像素大小始终不变。

图 18-1:文档中的位图对象

18.2 位图导入选项

图 18-2 显示了你在打开或导入位图到 Inkscape 时看到的对话框。

图 18-2:从文件导入位图

18.2.1 链接与嵌入

在处理位图时,您首先面临的选择是是否嵌入位图或链接到它。默认情况下,您导入到 Inkscape 中的任何位图都是链接到文档的——这意味着位图的实际内容始终来自原始位图文件。SVG 文档仅包含该文件的引用——它的文件名和相对于 SVG 文件位置的路径。链接位图对象在状态栏中显示其文件名(如 图 18-1 中的 inkscape.ico)。

这样,SVG 文件的大小得以保持最小,并且多个 SVG 文档可以重用相同的位图文件。这也意味着,您对该链接位图文件在 Inkscape 外部所做的任何更改都会立即反映在 Inkscape 文档中。此外,您可以通过右键点击位图对象并选择“外部编辑”来在 Inkscape 内部使用外部编辑器(如 GIMP 或 Photoshop)编辑链接的图像。

在“偏好设置”的“导入图像”页面(3.1.1)中,您可以取消勾选“自动重新加载图像”选项,以禁用导入位图的更新。您还可以选择通过“外部编辑”(浏览选择可执行文件)来选择使用哪个位图编辑器进行编辑。

链接位图的最大缺点是链接容易被破坏。如果位图文件被删除或相对于 SVG 文档移动到其他位置,结果就不太好,如 图 18-3 所示。

图 18-3:Inkscape 在无法找到链接的位图文件时的显示效果

这是一个常见问题,尤其是当您将艺术作品发送给他人时,却忘记包括链接的图像。

对 Inkscape 来说,重要的是位图的相对位置,因为在 svg:image 对象的 xlink:href 属性中,它存储的是从 SVG 文档位置到图像文件的相对路径。例如,如果位图位于您的 SVG 文档所在文件夹的 images 子文件夹中,您可以将该文件夹及其 images 子文件夹一起移动到不同的位置,而不会有问题。

Inkscape 还可以将图像的绝对路径存储在 sodipodi:absref 属性中;如果该属性存在,当 xlink:href 中的相对链接失效时,Inkscape 会使用它。您可以通过在“偏好设置”的“导入图像”页面中勾选“为链接图像存储绝对路径”选项来启用此功能(默认情况下该选项为禁用)。使用 sodipodi:absref 将在您将 SVG 文档移动到计算机上的其他位置,但留下链接图像时恢复图像;然而,如果您移动了图像,或者尝试在没有关联图像的不同计算机上打开 SVG 文件,这个方法则无效。

为了彻底防止任何链接问题,在位图导入时选择相应的选项将图像嵌入到 SVG 文档中(图 18-2)。此类图像的状态栏描述类似“图像 64 × 64:已嵌入”。嵌入图像被存储在 SVG 文件内部,因此永远不会丢失。缺点是,这会增加 SVG 文件的大小(大约是位图文件大小的 1.4 倍,这可能是一个显著的增加)。另外,嵌入的图像不能在外部位图编辑器中编辑,也不能被多个 SVG 文件共享。

如果你将图像导入为链接图像,但现在希望将其嵌入,使用扩展 ▶ 图像 ▶ 嵌入图像。你可以将此操作应用于选定的位图对象(保持其他对象不变),或者应用于文档中的所有位图对象,如图 18-4 所示。

图 18-4:扩展 ▶ 图像 ▶ 嵌入图像将链接图像嵌入到 SVG 文件中。

使用扩展 ▶ 图像 ▶ 提取图像,你可以逆转这个过程——将选定的嵌入图像或文档中的所有嵌入图像提取为链接文件。你将被要求选择保存提取文件的路径,如图 18-5 所示。

图 18-5:扩展 ▶ 图像 ▶ 提取图像将嵌入的图像转换为链接图像。

18.2.2 导入时的大小

打开或导入图像时,它的大小是多少?

由于其本质,位图没有以英寸或厘米为单位的物理大小。它所拥有的是像素大小——例如,960 × 480 像素。除此之外,一些位图格式会指定建议的分辨率,也叫做 DPI(每英寸点数,这是一个历史术语,意味着与每英寸像素数相同)。例如,如果一个 960 × 480 像素的图像具有 96 dpi 的分辨率,那么它应该显示在 10 × 5 英寸的空间中。对于 Inkscape 这样一个矢量应用程序来说,这不过是一个建议——它将位图的像素视为可以缩放到任意大小的矢量形状。

[1.1]

并非所有位图格式都能指定 DPI,也并非所有图像都有一个有意义的 DPI 值。尽管如此,默认情况下,Inkscape 在可用时会使用图像的 DPI 来计算画布上位图对象的初始大小。否则,它会使用默认的导入分辨率(在“首选项”中的“导入图像”页面上),该分辨率为 96 dpi。在这个分辨率下,每个像素方块的大小恰好是 1×1 px(A.6)。你可以通过启用“覆盖文件分辨率”复选框,强制 Inkscape 对所有导入的图像使用相同的分辨率,而不考虑它们自己的 DPI。

18.2.3 渲染选项 [1.1]

位图由像素组成(1.1),对 Inkscape 来说,它们与平面颜色的矩形没有太大区别,这些矩形在转换图像时会被缩放、旋转或倾斜。如果你放大足够,你甚至可以分辨出这些单独的像素——但这只是勉强可见,因为默认情况下,Inkscape 会尝试平滑它们。如果你不喜欢这个效果,可以在导入图像时通过将图像渲染模式(图 18-2)设置为“块状”(优化速度)来关闭平滑。默认的“无”(自动)和“平滑”(优化质量)当前是相同的,都会在高倍放大时平滑像素,如图 18-6 所示。

图 18-6:图像渲染选项

例如,在处理像素艺术时使用“块状”是合理的,因为每个像素的位置非常重要。当你处理不打算进行放大的大图像时,它也是首选——对于这些图像,个别像素的锯齿状不会被看到,但“块状”选项会导致稍微更快的渲染。

如果你导入了一个或多个设置错误的图像,需要更改它们,可以使用扩展 ▶ 图像 ▶ 设置图像属性扩展。它的“渲染图像为块状”选项可以应用于文档中的所有图像或仅应用于选定的图像。

18.3 剪切和蒙版

通常,你首先想要对导入的位图进行裁剪,去除不必要的边距,只保留图像的一部分。Inkscape 提供了几种方法来实现这一点。

本节中的所有技术展示的是针对位图对象的——因为它们最常用于位图对象——但你也可以将它们应用于任何类型的对象,包括组或图层(正如你记得的,它们只是特殊类型的组)。

18.3.1 剪切

Inkscape 允许任何对象被路径剪切,使得只有该路径内部的部分对象可见。为了确定哪些点在内部,哪些在外部,使用的规则与填充相同(12.1.2)。

从一个位图对象开始,使用任何方便的工具,如矩形工具或铅笔工具,在其上绘制一个剪切路径或形状。然后,选择位图和路径/形状,选择对象 ▶ 剪切 ▶ 设置。剪切路径消失(它现在位于 defs 中,A.4),但底部对象现在被该路径剪切。要编辑剪切路径(通过其节点或形状句柄)而不解除剪切,请单击节点工具控制栏中的相应切换,如图 18-7 所示。

图 18-7:应用剪切到位图对象

随时,你都可以执行对象 ▶ 剪切 ▶ 释放,以去除剪切并将对象及其剪切路径恢复为两个独立的对象。

裁剪路径可以是路径或形状的组,而不是单一的路径或形状。然而,更实用的做法是将组作为裁剪目标,而不是裁剪路径。当你裁剪一个组时,你总是可以进入该组(4.9.1),在其中工作,添加更多对象,移动它们,或者可能用不同的对象替换你原本想要裁剪的对象——这一切都可以在不释放裁剪的情况下完成。这就是为什么我建议,即使你只有一个想要裁剪的位图,也先将其与自己组合成一个组,再裁剪这个组,而不是直接裁剪裸位图。

18.3.2 蒙版

蒙版与裁剪类似。你选择对象和蒙版,然后选择对象 ▶ 蒙版 ▶ 设置来进行蒙版,或对象 ▶ 蒙版 ▶ 释放来移除蒙版。然而,在裁剪中,对象被限制在裁剪路径的内部;裁剪的任何属性,如不透明度、填充颜色、描边或模糊,对裁剪没有影响。裁剪是二元的:在任何时刻,被裁剪的对象要么是可见的,要么是不可见的。而蒙版则是渐变的——它可能使对象部分透明。

记住这个规则:在蒙版中,黑色使被蒙版的对象透明(不可见),而白色使其不透明(可见)。50% 灰色或 50% 不透明的白色使被蒙版的对象半透明,而 50% 不透明的黑色与完全不透明的黑色效果相同(使对象不可见)。任何未被蒙版覆盖的区域,或者蒙版完全透明的地方,都不会在蒙版对象中显示。换句话说,要使对象可见,蒙版必须具有可见的亮度:不透明的白色蒙版提供 100%的可见性,而任何较暗或更透明的部分则会降低可见性。

显然,蒙版在渐变或模糊效果中最为有用。例如,你可以使用线性渐变蒙版将照片条与背景混合,或使用模糊蒙版对照片剪裁的边缘进行羽化处理(图 18-8)。

图 18-8:蒙版位图对象

节点工具有一个按钮用于编辑选中对象的蒙版。然而,作为节点工具,该按钮仅允许你对蒙版的单一路径或形状进行节点编辑——你不能更改其颜色、渐变或模糊效果;对于这些,你需要释放蒙版并在更改后重新设置它。

就像裁剪路径一样,蒙版和被蒙版的对象也可以是组。即使最初只是单一对象的组,使用蒙版也更有意义,因为你可以进入该组并在其中工作,而无需移除蒙版。

18.3.3 位图作为图案

如果你希望导入的位图保持矩形形状,只是想去掉一些边距,你可以通过按下 Alt-I 将其转变为图案(10.8)。这不会改变可见显示,而是将一个矩形位图(为了确保正常工作,必须未旋转或未拉伸)转变为一个矩形对象(11.2),并填充图案来显示该位图。

这种方法很方便,因为你可以同时编辑形状或路径及其位图填充(图 18-9)。如果你通过矩形的两个角手柄调整大小,例如,使用节点或矩形工具(11.2.1),它不会影响填充,这意味着你可以通过将矩形手柄向内移动来裁剪它。同时,你可以使用图案的三个手柄来移动、缩放和旋转图案,具体请参见 10.8.2。(最初,图案手柄与矩形手柄重合;拖动左上角的 X 形手柄可以将它们分开。)

图 18-9:矩形中的位图作为图案

将位图转换为图案矩形后,你可以按下 Shift-Ctrl-C 将其转换为路径,并进行节点编辑,或者将矩形与另一个路径相交(12.2)。变换默认会影响形状/路径及其图案填充;有关如何更改这一点,请参见 6.11。

18.4 修饰和修补

在 Inkscape 中,简单的位图编辑任务,例如隐藏缺陷或抑制不必要的细节,可以使用其向量工具完成,而无需求助于外部位图编辑器。虽然这种方法有限,但它通常非常有用且快速。

假设你需要去除照片中的小瑕疵。首先,放大并在其上绘制一个书法笔画。然后,切换到吸管工具,从照片中选择一个附近的颜色并将其赋给新创建的路径。

在某些情况下,这可能就是你真正需要的——即使如此简单的修补也可能足够融合,直到你缩小视图时它变得“不可见”。然而,更可能的是,修补的边缘至少在某一侧仍然可见。因此,下一步是使用渐变:切换到渐变工具(10.1),绘制一个线性或椭圆渐变,尽量匹配背景中颜色变化的主导方向,并再次使用吸管工具(8.8)选择渐变停靠点的颜色。如果渐变无法使修补完全与背景融合,请查看是否可以通过稍微模糊来帮助,如图 18-10 所示。

图 18-10:用向量修补路径覆盖脸颊上的小瑕疵,通过渐变和模糊处理使其“不可见”

当这些简单的方法不够好时,可以尝试使用新的网格渐变工具(10.7),通过自动为网格节点选择颜色(10.7.5)来创建更复杂或更广泛的补丁。

完成修整后,别忘了将位图对象与所有矢量补丁一起分组,这样整个组就可以作为一个单独的对象进行移动。

18.5 描摹

对于矢量编辑器,两个与位图相关的重要功能是将位图转换为矢量对象(描摹)和反向操作(位图导出)。Inkscape 提供了丰富且强大的工具来进行这些转换,接下来的章节将详细探讨这些工具。

18.5.1 手动描摹

一种描摹位图的方法不涉及任何你不熟悉的工具。只需切换到钢笔工具(14.1.1),放大位图,然后在你想转化为矢量路径的区域周围点击一系列的点(图 18-11)。在尖角处使用点击-释放来创建尖角节点;对于平滑的曲线边缘,在曲线的沿线做一系列短的点击-拖动。根据你想要描摹的具体区域的精确程度,调整点击的密度。双击、按回车键或点击起始节点来完成路径。

图 18-11:使用钢笔手动描摹位图(在默认的贝塞尔模式下)

为了更加平滑,你可以在 Spiro 或 BSpline 模式下描摹(14.1.4);在这些模式下,每次点击都会创建一个平滑的节点,想要创建尖角节点时,可以按住 Shift 键进行点击。另外,在 BSpline 模式下,记住不要点击曲线本身,而是在曲线外侧稍微点击,这样平滑的路径会被刻入你通过点击创建的多边形中。如果你正在描摹没有任何曲线的艺术作品,可以使用直线模式,这样一个不小心的拖动就不会创建不需要的平滑节点。

这种技巧乍一看可能显得乏味且耗时,但一旦掌握了它,你将能够令人惊讶地快速描摹复杂的艺术作品。像任何手动技巧一样,它的主要优点是完全的创造性控制——你决定要描摹哪些部分,忽略哪些部分,如何简化复杂的形状,在哪里偏离位图,在哪里放置每个节点。根据你的技能水平,最终效果可能比自动描摹或完全手工绘制的结果更加令人满意。

18.5.2 位图描摹对话框

Inkscape 的自动位图描摹工具基于独立的 Potrace 开源描摹工具(potrace.sourceforge.net/),功能非常强大。使用它,你可以描摹从简单的黑白标志(只需要少量节点)到复杂的照片(生成数十条彩色路径和成千上万个节点)等各种内容。

跟踪位图对话框(Shift-Alt-B,图 18-12)有两个主要区域:左侧是选项面板,右侧是预览面板。预览面板显示的不是跟踪后的矢量路径(那可能需要耗费时间来创建),而是将输入到跟踪器的位图—包括在选项面板中指定的所有颜色减缩和过滤预处理。更改选项后,要更新预览,请点击更新。请注意,尽管位图可能在文档中被裁剪、遮罩或以其他方式遮挡,但对话框始终显示并且跟踪器始终会跟踪整个位图。

图 18-12:跟踪位图对话框

要执行选定位图对象的实际跟踪,请点击确定。对于大位图,这可能会很慢;请注意状态栏中的进度消息。您可以通过点击停止按钮中断跟踪;点击恢复将重置选项为默认值。

跟踪工具有几种操作模式。这些模式分为单次扫描模式(从图像创建单一路径)和多次扫描模式(创建多个路径并将其组合在一起)。

18.5.2.1 亮度截止

亮度截止是最简单的路径跟踪方法。生成的路径覆盖比您设置的阈值更暗的任何区域。这个跟踪路径虽然是一个单一对象,但可以由多个不重叠的子路径组成(12.1.1)。这是跟踪简单单色形状(如徽标、文本、渐晕等)的最佳模式。

阈值设置为图像完整亮度范围的一个分数(图 18-13)。例如,阈值为 0.6 时,跟踪路径覆盖图像中比 60%亮度暗的区域;勾选反转框会反转阈值,使得路径覆盖图像中最亮的 40%区域。

图 18-13:不同阈值的亮度截止跟踪

自动跟踪模式是另一种亮度截止模式,由不同的跟踪后端 Autotrace 提供支持,而不是其他模式使用的 Potrace 后端。在这种模式下,您不能设置阈值,但默认值可能适合您,正如图 18-14 所示。

图 18-14:不同阈值的亮度截止跟踪

18.5.2.2 跟踪质量

即使您正在跟踪的位图本身就是矢量路径的表现,跟踪也永远无法完全重现该原始路径。将矢量形状转换为位图总会导致信息丢失,而 Inkscape 的跟踪器无法通过任何其他方式恢复这些丢失的信息,只能进行猜测。一般来说,它在这方面表现不错,但在某些情况下,尤其是跟踪低分辨率位图或包含文本的位图时,您可能会对它无法识别某些特征(如弧线、直线、拐角)感到失望,正如图 18-15 所示。

图 18-15:位图追踪中的一些常见质量问题

在这种情况下最好的建议是尽可能获得最高分辨率的位图。从一个关键特征仅有几个像素宽度的位图中获取体面追踪是非常困难的;追踪图像的高分辨率版本通常会带来巨大差异。此外,你可以尝试调整阈值,并在对话框底部尝试不同的选项(这些选项适用于所有模式,包括单次扫描和多次扫描模式):

  • “斑点”选项会删除任何小于指定像素数的颜色块。这会抑制在追踪脏污或抖动的位图时出现的小的多余子路径。

  • 增加“平滑角落”参数使得追踪算法不那么容易识别图像中的尖锐角落。当你从一个高度像素化、低分辨率的位图中追踪一个自然平滑的形状时,这可能很有用,因为你不希望意外的像素尖角在追踪路径中变成尖锐角落。相反,降低此参数适用于追踪没有任何曲线的几何形状。当“平滑角落”为零时,生成的路径几乎完全由直线段构成,这些直线段之间有尖角节点(但角落仍可能被倒角)。

  • “优化路径”参数尝试减少轨迹路径中的节点数,类似于“简化”命令的作用(12.3)。提高这个值会减少节点的数量,但也增加了引入可见失真或丢失形状细节的风险。

18.5.2.3 其他单次扫描模式

边缘检测模式在追踪位图之前应用边缘检测滤镜。因此,追踪路径将包含沿着源位图颜色边界的窄条纹。阈值越低,检测到并追踪的边缘就越多。

颜色量化模式首先将图像量化(划分)为给定数量的区域(颜色),每个区域都有其主导颜色,类似于在位图编辑器中将全彩图像减少为固定调色板。然后,它会追踪每一个这样的区域,这通常会使颜色渐变呈现条纹状,正如图 18-16 所示。

图 18-16:边缘检测和颜色量化模式

自动追踪提供的中心线追踪选项非常有趣。它有点类似于边缘检测,但生成的是描边路径,而不是类似描边的条纹。在没有明确边缘的区域,这种模式会创建一个迷人的几何图案,偏爱对角线,如图 18-17 所示。

图 18-17:中心线追踪(自动追踪)模式

18.5.2.4 多次扫描模式

像单次扫描的颜色量化模式一样,每种多次扫描模式开始时都会将图像量化为给定数量的区域(Scans参数)。接着,它会分别描摹每个区域,为每条描摹路径分配适当的颜色或灰度级别,并将所有路径合并在一起。通过足够多次的扫描,高分辨率位图的结果可能会看起来相当不错——忠实地重现颜色渐变、模糊、自然纹理等。

亮度级别模式最适合灰度图像;它忽略任何色调或饱和度的差异,仅根据亮度将像素分组到区域中(见图 18-18)。颜色模式在进行量化时考虑颜色的各个方面,能够最忠实地重现全彩图像(参见彩色插页中的图 16)。最后,灰度选项与颜色模式相同,只是生成的路径使用近似的灰度色调,而不是原始颜色。

图 18-18:多次扫描:10 个亮度级别

平滑选项在进行量化之前会对图像应用一定程度的模糊;这在复杂的摄影图像中可能产生更好的效果。堆叠扫描选项最好保持开启:它确保每个区域的路径不仅覆盖该区域,还包括其下方所有区域的 z 轴顺序,这意味着扫描之间不会有间隙,如图 18-19 所示。

图 18-19:堆叠扫描与相邻扫描

删除背景选项仅从组中移除最底层的扫描路径。当你正在描摹一张带有单一颜色背景的物体照片,并希望仅保留物体的矢量表示而不包括背景时,这个功能非常有用。

18.5.2.5 使用 SIOX 提取对象

SIOX 代表“简单交互式对象提取”;这是一种帮助你从图像背景中分离前景对象的算法。在 Inkscape 中,它是应用于图像的预处理器,在你勾选更新按钮旁的 SIOX 复选框时,在进行描摹(使用任何模式)之前进行处理。

然而,SIOX 的“交互式”部分表明,它不能完全自动完成任务,而是需要一些帮助。为了让 SIOX 正常工作,你必须选择两个对象:位图和位于其上的一个掩码路径,该路径标识你感兴趣的前景对象。这个掩码路径可以相当粗略,但它必须覆盖整个前景对象,并且周围至少有一些背景。SIOX 扫描的结果通常不完美(在图 18-20 中,猫周围仍需清除一些背景),但这是一个很好的起点,且你可以非常轻松地达到。

图 18-20:使用 SIOX 选项在描摹过程中提取前景对象

18.5.2.6 像素艺术描摹 [1.1]

Inkscape 还有另一个叫做 libdepixelize 的追踪后端,专门用于将低分辨率位图向量化,其中有意义的特征可能小到单个像素,而且几乎没有抗锯齿效果。这类图像,通常被称为 像素艺术,曾是低分辨率时代计算机游戏的常态,然而令人惊讶的是,即使到今天,这仍然是数字艺术中的一种受欢迎的子类别。

Inkscape 并不是创建像素艺术的最佳应用程序,但其 Trace Bitmap 对话框中的 Pixel art 选项卡使其成为将一些旧的(或新的)像素艺术重新利用到矢量设计中的最佳工具之一。这并不意味着简单地将位图的像素重新创建为方形路径;如果你需要那样的效果,只需使用 Blocky 选项 (18.2.3) 导入位图并按原样使用,而不需要跟踪。相反,Inkscape 的像素艺术追踪器会尝试推断并重新创建像素艺术作者所设想的形状——基于他们的像素近似值。尽管听起来似乎不太可能,但结果往往非常令人满意。例如,当两个相同颜色的像素呈对角线相邻时,像素艺术追踪器足够智能,可以推断它们是一个单一特征,并将它们合并在输出中,如图 18-21 所示。

图 18-21:使用像素艺术追踪器

像素艺术追踪器的默认 Voronoi 选项通常是最好的;它创建的多边形分组被称为 Voronoi 拼贴(以 19 世纪的俄罗斯数学家命名)。另一个输出选项,B-splines,则尝试进一步平滑 Voronoi 多边形的形状,但结果通常不如前者整洁。为了做个对比,图 18-21 也展示了常规的 Potrace 颜色追踪器对同一像素艺术图像的处理效果。

Heuristics 部分的选项最好保持默认设置。如果你想了解更多关于像素艺术追踪器使用的算法,以及这些选项可以为你带来什么,建议从inkscape.org/doc/tutorials/tracing-pixelart/tutorial-tracing-pixelart.html中开始,这篇教程是由该功能的作者编写的。

18.6 位图导出

如今,由于网页浏览器对 SVG 的支持,Inkscape 的 SVG 文件常常直接用于网页中。不过,我们仍然生活在一个位图主导的世界里,因此栅格化的质量和位图导出功能对于矢量编辑器来说至关重要。

18.6.1 导出 PNG 图像对话框

使用导出 PNG 图像对话框(Shift-Ctrl-E)可以将你的图形或其中的任何部分以任意分辨率导出为 PNG 文件。对话框的各个区域从上到下允许你进行选择:

  • 你想要导出的画布区域 (18.6.1.1)

  • 位图的像素大小 (18.6.1.2)

  • 导出文件的文件名及其格式 (18.6.1.3)

  • 其他导出选项 (18.6.1.4)

  • 导出格式参数 (18.6.1.5)

18.6.1.1 导出区域

对于你想要导出的区域,窗口顶部有四个主要选项:Page、Drawing、Selection 和 Custom (图 18-22)。

图 18-22:导出 PNG 图像对话框

Page 按钮导出的是 SVG 文档的页面内容,如画布上的框架所示 (2.3),但页面边缘之外的对象会被排除。Drawing 按钮导出的是整个可见图形的边界框(隐藏的图层或对象不计入),它可能比页面要小或大;在导出的位图中,页面框架不可见。当按下 Selection 按钮时,窗口会导出当前选区的边界框(同样,它可以位于页面框架内外——这无关紧要)。

另外,你可以点击 Custom 并输入自定义文档坐标来设定左上角(x0, y0)以及右下角(x1, y1)或导出区域的宽度和高度。你还可以选择这些值的测量单位(默认为 px,A.6)。

导出 PNG 图像对话框不是模态的——也就是说,你可以在它打开时继续在画布上工作。除非你选择了 Custom,否则窗口会响应选区的更改,切换到选区模式,并更新坐标以匹配新选区的边界框。如果没有选择任何内容且你不在 Custom 模式下,窗口默认处于 Drawing 模式。

18.6.1.2 图像大小

对于图像大小,输入宽度和高度的像素值(这里是位图像素,而不是 px 单位),或者调整 dpi 的分辨率值,dpi 代表每英寸的(即像素)数。默认的 96 dpi 分辨率会使一个 SVG px 单位等于渲染位图的一个像素。水平和垂直的 DPI 值始终相同;更改三个可编辑值中的任何一个(宽度、高度、dpi)会自动调整另外两个以匹配。

如果你的图形包含一些以 px 为单位的对象(例如宽度为整数 px 的线条),并且你希望它们精确地导出到位图的像素中,那么仅选择 96 dpi 的分辨率可能不足够。例如,SVG 中的 1×1 px 方块可能会落在导出位图的像素边界之间,因此最终会扩展到四个相邻的像素,而不是一个。

解决此问题的一种方法是对导出的对象应用像素化滤镜(17.4)。另一种方法是在 PNG 导出选项中禁用抗锯齿(18.6.1.5)。这两种方法都能起作用,但你可能会发现单像素的特征在导出时消失或被固定到错误的像素位置。为了正确修复这个问题,你需要做更多工作。启用网格(7.2),并将你的对象对齐到默认的 1 像素大小网格(或者使用像素对齐扩展,13.4.2.6)。确保你的导出区域本身与网格对齐——也就是说,它在 px 中测量时具有整数的 x0 和 y0 坐标。完成这些步骤后,以 96 dpi 导出将为你提供一张完美清晰的图像,没有不必要的抗锯齿效果。

18.6.1.3 导出文件名和格式

对于文件名,你可以手动输入或粘贴完整路径,或点击“另存为”按钮来访问文件系统并选择一个文件夹和文件。如果你已经导出了这个对象或整个页面,Inkscape 将尝试自动填充文件名(18.6.1.4)。如果文件已存在,系统会询问你是否要覆盖它。

[1.1]

长期以来,PNG 是 Inkscape 唯一支持的导出格式。默认情况下,Inkscape 仍然导出为 PNG 格式;PNG 格式保留了 Inkscape 所能提供的最高渲染质量,包括 alpha 透明度、抗锯齿和每通道 8 位的 RGB 颜色。从 1.1 版本开始,你还可以导出为其他一些格式:JPG(有损),WebP(有损或无损)和 TIFF(无损),以及优化的 PNG(有损或无损)。在“另存为”文件名选择器中的 保存类型 列表中选择其中一种格式,或者简单地在文件名后附加相应的扩展名(.jpg、.webp 或 .tiff;无法通过扩展名选择优化的 PNG)。

18.6.1.4 导出提示

当你导出单个选定对象时,导出的文件名和分辨率会被记住并保存在该对象的节点中(因此在完成导出后你可能需要保存文档)。每当你再次选择此对象进行导出时,这些值会自动恢复到导出 PNG 图像对话框中。类似地,导出页面或图形时,文件名和分辨率也会被记住。

这些导出提示对于需要导出多个对象的情况非常省时——例如,将网页图形的多个切片导出为多个位图文件。如果你已经做过一次(并在之后保存了文档),只需在导出 PNG 图像对话框打开的情况下选择对象,你将会看到它们保存的导出文件名显示在文件名字段中。出于同样的原因——为了更方便地逐个导出多个对象——对话框会在你点击“导出”后仍然保持打开状态(尽管文件名字段下方也有一个“完成后关闭”复选框)。

你还可以通过选择所有要导出的对象并勾选“批量导出所有选定对象”复选框来加速这个过程。现在,当你点击“导出”时,Inkscape 会为每个选定的对象创建一个位图文件。如果某个对象已经被导出过(即已经保存了文件名和分辨率信息),则会使用这些值;否则,位图文件的名称将根据对象的 ID 构造(例如,text2402.png,参见 A.9),并且文件将被保存到最后一次保存 SVG 文档的文件夹中。

通常,即使你正在导出选择区域,你实际上导出的是一个区域——选择框,它可能包含其他可见的对象。勾选“隐藏所有非选定项”复选框可确保导出的位图仅包含导出的对象,而所有其他对象,即使它们重叠导出区域,也不会被渲染。

18.6.1.5 导出格式参数 [1.1]

Inkscape 允许你调整导出格式的各种参数。虽然没有预览窗口,但如果你想尝试不同的参数值并立即看到结果,可以使用这个技巧。导出你的对象,然后再将其导入到 Inkscape 中,放置在你正在导出的对象或区域旁边。现在,你可以反复导出到同一个文件,使用不同的选项,每次 Inkscape 会重新加载新导出的文件,立即显示你设置的效果。

18.6.1.5.1 PNG

在对话框的高级部分(默认收起)中,你可以为常规 PNG 导出(非优化 PNG)设置一些格式选项。

  • 使用隔行扫描会创建隔行扫描 PNG 图像,当它用于网页时,在完整传输完图像之前,会先显示一个低分辨率的版本。

  • 位深度控制输出 PNG 中颜色的表示方式。默认值是 RGBA_8,表示 RGB 颜色,Alpha 通道(透明度),每个通道 8 位;这正是 Inkscape 渲染器中颜色的表示方式,因此该选项将程序的光栅化输出存储得非常优化。你可以通过去除 Alpha 通道(RGB_8)或切换到灰度(GrayAlpha_8Gray_8)并调整每个通道的位数,直到 1 位(适用于严格的黑白图像,Gray_1)。你还可以使用每个通道 16 位的全彩图像表示(RGBA_16),但由于渲染器仍然是 8 位的,这并不会实际增加输出中的信息量(例如,如果你在渐变中遇到带状现象,这个选项并不会减少带状现象)。

  • 压缩设置决定 PNG 文件的压缩级别;最佳值取决于文件的内容,所以如果你想获得尽可能小的 PNG 文件,我建议使用外部工具,如 pngcrush 来处理 Inkscape 的 PNG 文件。

  • pHYs dpi 是记录在 PNG 文件中的分辨率值;这个值很少使用,因此将其设置为 0 没有问题。

  • 抗锯齿实际上是 Inkscape 渲染器(称为 Cairo)的一个参数,而不是 PNG 文件的参数。你可以在此处选择关闭所有抗锯齿(CAIRO_ANTIALIASING_NONE 选项),或者通过选择 CAIRO_ANTIALIASING_BEST 来改善默认的 CAIRO_ANTIALIASING_GOOD

18.6.1.5.2 其他格式

对于除常规 PNG 以外的格式,进度条完成后会弹出一个选项对话框——即 Inkscape 渲染位图完成后。

对于 JPG 格式,你可以设置质量(1 到 100,默认值为 90)和渐进选项;在通过慢速连接下载时,渐进 JPG 文件会先显示低分辨率的预览,随后再显示完整的高清图像(这对于大图像更为适用)。WebP 格式具有无损选项,并且可以调整质量和速度的参数。TIFF 格式仅具有质量和速度参数。

对于优化的 PNG 格式,你可以开启交错(类似于 JPG 的渐进选项),并选择进行多少次尝试以实现最佳图像压缩。在“选项”对话框的“有损选项”标签下,你可以启用各种减小图像大小但可能降低质量的选项(如位深、颜色类型、调色板)。

18.6.2 通过命令行导出

在命令行运行 Inkscape 时,也可以使用“导出 PNG 图像”对话框中的所有功能。通过这种方式,Inkscape 可以作为一个无图形界面的实用工具,通过脚本或程序自动化各种 SVG 渲染任务。例如,下面是如何以 600 dpi 导出 id="text2402" 的对象:

$ inkscape document.svg --export-fileid=img/text.png --export-id=text2402 \ --export-dpi=600

通过命令行导出非 PNG 格式的功能从 Inkscape 1.1 起不再有效。有关 Inkscape 命令行开关的完整列表,请参见 附录 C。

18.6.3 图标预览

虽然在“导出 PNG 图像”对话框中没有预览窗格,但如果你使用 Inkscape 创建图标,一种预览你作品在不同图标尺寸下渲染效果的方法是通过图标预览对话框,你可以从“视图”菜单中调用它(图 18-23)。

图 18-23:图标预览对话框

此对话框包含您文档在几个典型图标尺寸下的光栅化预览,从 16×16 到 128×128 像素;在对话框的左侧,其中一个渲染图像会被放大显示,以便你查看你的矢量对象如何转换为实际的像素。点击 选择 复选框,可以将预览从显示整个文档切换为当前选择部分。

18.6.4 创建位图副本

在你从文档中导出某个内容后,你可以导入(18.1)位图文件来检查光栅化效果。如果你需要将该位图包含在文档中而不是作为单独的文件,可以使用 Inkscape 的快捷键:编辑 ▶ 创建位图副本命令。

该命令导出所选对象(不保存文件),并将结果作为嵌入式位图重新导入文档,覆盖在选择区域上。你可以在首选项的“导入图像”页面设置导出的分辨率;默认值为 96 dpi,对于该值,命令还会将导出区域对齐到 1 像素网格,确保创建的位图的像素精确对齐到像素方块的边界,如图 18-24 所示。

图 18-24:与网格对齐的 96-dpi 位图路径副本

你可以使用此命令快速预览艺术作品的光栅化效果(之后,可以删除位图对象)。它还在你使用一些非常慢渲染的过滤器(17.6)时很有用,尤其是当你不想在无过滤器或轮廓模式下工作时;在这种情况下,只需制作过滤后的对象的位图副本,并隐藏那些渲染缓慢的原始对象。

18.7 位图过滤器和扩展

你可以将 Inkscape 的过滤器(第十七章)应用于任何类型的对象,但它们在你有一个无法用标准矢量工具编辑的位图时可能最为有用。我特别推荐混合模式叠加(17.2)和预设过滤器(17.4),它们位于模糊、颜色和图像效果子菜单中。你应该尽可能使用过滤器,因为它们是无破坏性的,并且不会改变你导入的原始位图文件。

然而,有时你确实需要改变位图数据本身。如上所述(18.2.1),对于链接的图像,你可以直接使用你最喜欢的位图编辑器进行编辑,甚至可以从 Inkscape 内部启动该编辑器。然而,这种功能对于嵌入图像来说并不可用。在这种情况下,扩展(第十九章)可以提供帮助;一些常见的位图处理算法已经作为扩展实现。以下是那些最有用的—并且是通过过滤器无法完全实现的—扩展,它们位于扩展▶栅格子菜单中(见图 18-25):

  • 自适应阈值会将每个像素的 RGB 通道的值调整为极端值,取决于该像素是否高于或低于阈值。这个阈值是根据该像素的局部邻域计算得出的(其大小由宽度和高度参数定义)。这是一种有价值的转换,因为它类似于人类感知图像的方式——我们判断一个点是“亮”还是“暗”,是相对于其局部区域,而不是整个图像的平均亮度。

  • 添加噪声可以让你选择多种类型的噪声叠加在图像上;大多数类型看起来或多或少像散布的沙粒。

  • 裁剪是一种减少嵌入图像的 SVG 大小的方法——与裁切不同,它实际上会从边缘移除部分位图数据(你可以指定每一侧裁剪的大小)。

  • 降噪、增强和减少噪点实现了各种噪声降低算法。

  • 抖动随机地将像素散布在位图中,数量指定散布的半径。

  • 均衡化应用直方图均衡化到图像。

  • HSB 调整调整色相(范围从-360 到 360)、饱和度(-200 到 200)和亮度(-200 到 200)。

  • 爆炸、旋转和波动平滑地扭曲图像,或多或少地符合其名称所暗示的效果。波动使用具有给定振幅和波长的水平正弦波。

  • Level 将黑色点以下的像素变黑,将白色点以上的像素变白,并将位于该范围内的像素按完整颜色范围进行缩放。当黑色点大于 0 或白色点小于 100 时,扩展会增加图像的对比度。伽玛校正指定额外的亮度修正(1 表示无变化)。

  • Level(带通道)与 Level 相同,但只针对单一通道。

  • 中值滤波将每个像素涂上其圆形邻域的中值颜色;结果有点类似于模糊处理,但中值滤波能够保留那些颜色差异较大的部分之间的清晰边界。

  • 归一化通过将像素的颜色范围扩展到完整的颜色范围来增加对比度(例如,如果图像没有红色,所有颜色将会倾向于红色,以弥补这一点)。

  • 油画效果类似于中值滤波,但还会以类似画笔笔触的方式融化相似的邻近颜色。

  • 重采样改变位图的像素大小而不进行缩放。重采样向上不会改变图像的外观,但如果你打算应用其他效果并希望其适用于更高分辨率,则可能会很有用。重采样向下会使图像失去细节,但不会改变文档中的尺寸;像裁剪一样,这会减小嵌入位图的 SVG 文档的文件大小。

  • 锐化和反锐化蒙版是经典的图像锐化算法。

图 18-25:来自扩展▶栅格的扩展效果示例

与滤镜不同,扩展会对它们处理的位图进行永久性修改。你可以撤销一个扩展,但不能在应用之后调整其参数。此外,与滤镜不同,这些扩展能作用于位图对象——你不能将位图效果应用于位图的克隆。例如,如果位图是链接的,这些效果将嵌入位图并作用于嵌入的副本,而不是外部链接的原始图像。有关扩展效果的工作技巧,请参考 19.1。

18.8 色彩管理

色彩管理的目的是确保你的艺术作品中的颜色能够在不同的输出设备之间正确转换,通常是从屏幕到打印。不同设备可以再现的颜色范围不同,一些色彩失真是不可避免的。色彩管理让你可以预览、控制,从而尽量减少这些失真。

Inkscape 从来没有声称自己在色彩管理方面是最好的。你可以使用屏幕校样来预览输出颜色,但仅凭 Inkscape,你不能准备一个嵌入色彩配置文件的色彩分离文件进行打印。然而,在大多数情况下,你可以通过使用一些额外的软件来获得所需的结果,正如本节所描述的那样。

另一方面,自从本书的第一版出版以来,色彩管理的重要性确实有所下降。如今,许多图形更多的是从屏幕传输到屏幕,而不是从屏幕传输到纸张。此外,消费级计算机显示器和桌面彩色打印机的质量现在更加统一——大多数桌面打印机会接受并打印与屏幕上显示的 RGB 数据相同的数据,自动进行色彩转换,而无需你做额外的工作。

只有当你打算在高端商业打印机上打印设计时,通常是通过将其发送给印刷服务提供商,你才需要研究 Inkscape 的色彩管理功能。即使那样,如果你要求的话,一些提供商可以为你执行色彩管理。如果你能够充分控制这个过程(例如,能够审阅打印样张),通常这是最好的选择,因为印刷服务人员知道什么对他们的设备最有效。

18.8.1 ICC 色彩配置文件

ICC 色彩配置文件是一个描述输出设备色彩能力的文件。如果你想准备文档以便在特定设备上输出,首先必须获取与该设备及输出介质(例如用于打印的纸张类型)完全对应的 ICC 配置文件。有时,你可以在互联网上找到合适的配置文件(例如,在打印机硬件制造商的网站上),但通常,你需要向将要使用的印刷服务提供商索取。

一旦获取到目标配置文件,你需要将其安装到操作系统中。在 Windows 10 中,安装非常简单,只需右键点击 .icc 文件并选择“安装配置文件”。在 Linux 中,你需要安装gnome-color-managercolord-kde;然后,双击 .icc 文件并点击“导入”。

18.8.2 屏幕校样

由于典型打印机的色彩范围比计算机显示器狭窄,Inkscape 可以通过模拟打印机色彩来预览(校样)打印输出。这被称为屏幕校样软校样。为此,你需要拥有两个 ICC 色彩配置文件:一个是你将要使用的打印机的配置文件,另一个是你屏幕的配置文件。

理想情况下,你应该使用一种叫做色度计的专用硬件设备对显示器进行校准;这种校准会为你的显示器创建一个自定义的 ICC 配置文件。然而,除非你的质量要求非常严格,否则你大概可以使用一个通用的 RGB 配置文件,例如 Windows 自带的那个配置文件。

首选项中,进入输入/输出 ▶ 色彩管理页面。在显示调整部分选择显示配置文件(如果有多个的话)。然后,在校样部分,勾选模拟屏幕输出并选择目标设备的设备配置文件(即你计划用于打印作品的打印机)。设置完成后,可以通过视图 ▶ 色彩管理视图或在 Inkscape 编辑窗口中垂直和水平滚动条之间的小切换按钮来切换色彩管理视图。

对于屏幕和目标设备配置文件,你还可以选择设备渲染意图。在大多数情况下,默认的感知渲染(Perceptual)是最佳选择;如果你希望输出看起来尽可能色彩丰富(例如,当打印简单的商业图形时),可以尝试饱和度(Saturation)。

如果某个屏幕颜色是“色域外”——即在输出设备上无法渲染——你可以通过指定色域外标记颜色使其立即可见。例如,如果你的设计中没有红色,勾选标记色域外颜色并为色域外警告颜色选择红色。然后,每当你在图形中看到红色时,就知道你需要更改该对象的实际颜色(该颜色会显示在状态栏或填充和描边对话框中——红色标记仅在图形中显示),如果你希望打印时不会出现严重的失真。

18.8.3 色彩分离与嵌入

屏幕校样有帮助,但可能不够——你可能需要生成一个已经转换为目标色彩系统的文件。这类文件通常被称为色彩分离文件,因为它们包含了与输出设备墨水对应的分离色彩通道(通常是 CMYK,8.4.2)。这样的文件也可能嵌入了目标色彩配置文件。最常用的格式是 PDF(矢量)和 TIFF(位图);两者都可以包含色彩分离数据并嵌入 ICC 配置文件。

尽管 Inkscape 可以导出 PDF 和 PNG,但它无法进行色彩分离或配置文件嵌入。你需要一些其他软件来完成这项工作,比如 Adobe Photoshop(用于 TIFF)或 Illustrator(用于 PDF);两者都可以直接导入 Inkscape 的 SVG 格式。

你还可以使用开源软件。Scribus 排版程序(scribus.net/)可以导入 SVG 并创建色彩分离的 PDF;从 Inkscape 1.0.1 版本开始,你可以通过 Inkscape 的保存对话框设置 PDF 导出到 Scribus(详细信息请参阅 Inkscape 1.0.1 发布说明)。GIMP 的青色插件(github.com/rodlie/cyan/)可以将 Inkscape 导出的 PNG 位图转换为带有屏幕校样的色彩分离 TIFF,便于完全控制。

第二十章:扩展

大多数长期存在的软件项目都将其成功的很大一部分归功于可扩展性。如果你能吸引并留住外部开发者,他们拥有独特的需求、视角和方法,你的软件产品就能获得防止遗忘的良好保障。Inkscape 的扩展生态系统虽然不大,但它是程序影响力的重要组成部分。Inkscape 1.0 自带了近 200 个扩展,你可以在网上找到更多的扩展。

在本章中,我首先从用户的角度介绍扩展。我将解释扩展的 UI 界面(19.1)并通过示例描述 Inkscape 自带的一些重要扩展(19.2)。接下来,我将转变为开发者的身份;我将解释 Inkscape 扩展的架构(19.3),并引导你完成从零开始创建一个简单扩展的示例(19.4)。由于 Inkscape 是一个开源应用程序,每个人都可以(并且被鼓励)为其贡献;编写扩展可能是解决你独特问题并让你的解决方案对他人有用的最简单方法。

19.1 使用扩展

扩展是你可以运行的代码片段,用来对 Inkscape 文档中选定的对象执行某些操作。在 Inkscape 中,你可以通过扩展子菜单中的命令访问大多数扩展。与路径效果(第十三章)或滤镜(第十七章)不同,扩展是一次性的操作;它通常是破坏性的,修改对象时不会保留原始对象。撤销扩展操作的唯一方法是通过 编辑 ▶ 撤销。

一个典型的扩展有多个参数,你需要在运行扩展之前在对话框中设置这些参数。对话框可能有多个标签页,一些功能最完善的扩展会有一个关于或帮助标签,描述扩展及其使用方法,如图 19-1 所示。

图 19-1:导出图层切片扩展:参数对话框的两个标签页

大多数扩展对话框都有一个实时预览复选框;选中后,它会显示应用当前参数后的文档效果。这样,你可以在不撤销并重新运行扩展的情况下,尝试不同的参数值。要将参数应用为最终值,点击应用;要取消并不运行扩展,点击关闭

当实时预览关闭时,扩展对话框不是模态的,因此你可以平移画布并选择不同的对象;一旦开启实时预览,对话框会锁定 Inkscape 的其余部分,这样你只能更改对话框中的参数并查看其效果。对于一些扩展,更新可能会很慢,尤其是当你的文档很大且复杂时。

“扩展”菜单中的“上一个扩展”命令可以重新运行上一个扩展命令,而无需显示参数对话框。“上一个扩展设置”命令会打开上一个扩展的参数对话框,您可以从中再次运行该扩展。

19.2 Inkscape 扩展指南

许多扩展已经在本书中提到或描述过。在某些(但远不是所有)情况下,某个扩展是实现相同结果的另一种选择,可能是某个更方便或集成的方法;当扩展重复了程序核心中的功能时,通常是因为扩展先于核心功能出现。不过,许多扩展仍然是 Inkscape 工具箱中独特且不可或缺的工具。让我们一起浏览“扩展”菜单,看看有哪些可用功能:

  • “排列”子菜单包含用于 z 轴顺序操作的“重堆叠”(Restack)功能(4.4)和用于解除多层次组合的“深度解除组合”(Deep Ungroup)功能(4.8.1)。

  • 颜色扩展改变所选矢量对象的颜色(但不适用于位图),如 8.10.1 中详细说明。

  • 文档有两个扩展,用于在假设 90 dpi 分辨率的旧版 Inkscape SVG 文档和基于 96 dpi 的新文档之间转换(详细信息请参见 4.2 末尾的注释)。

  • 导出扩展实现了多种导出文档的方法,例如将其发送到绘图仪设备(Plot)或导出网页设计稿的多个切片(Export Layer Slices,这是一种对标准批量导出功能的改进,见 18.6.1.4)。

  • Gcodetools 是一组扩展,用于将文档准备并导出为各种计算机化机床理解的 G 代码语言,您可以利用这些扩展,比如将金属徽章从 Inkscape 设计中切割或雕刻出来。

  • “从路径生成”、“修改路径”和“可视化路径”子菜单提供了多种路径处理扩展,详见路径效果章节(13.4)。

  • “图像”子菜单包含嵌入和提取图像的工具(18.2.1),以及更改图像属性的工具(18.2.3)。

  • JessyInk 扩展将 Javascript 代码片段插入文档中,当在浏览器中查看时,它会将文档转变为互动演示。通过这些代码片段,您可以滚动页面、让对象响应点击、使用过渡效果,甚至插入视频。

  • 光栅(位图处理)扩展在 18.7 中进行了审查。

  • 样式表 ▶ 合并样式到 CSS 是当你有多个对象使用相同样式并且希望将样式存储在一个地方,以便同时更新所有对象时使用的工具。请记得,Inkscape 支持应用共享样式到多个对象的选择器(8.1);此扩展从选定的对象创建这样的选择器,然后将它们的内联样式属性切换为该选择器。

  • 文本扩展在关于文本的章节中已描述(15.7)。

  • Typography 是一组有助于创建 SVG 字体的扩展(15.8)。

  • 网络扩展再次提醒你,Inkscape 的文档可以作为网页使用,因为现代网页浏览器支持 SVG(另见上面的 JessyInk)。Web ▶ JavaScript ▶ 设置属性扩展允许你根据给定事件(通常是点击某个其他元素)改变对象的样式属性。Web ▶ JavaScript ▶ 传输属性则类似,但会将被点击对象的属性复制到另一个对象。你需要先选择两个对象,点击目标对象为第一选项,改变属性的对象为第二选项,然后调用这些扩展。

19.2.1 渲染子菜单

渲染子菜单包含生成全新对象的扩展—这些对象与文档中的任何内容无关。大多数扩展尚未提及,以下是一些显著的扩展:

3D 多面体

创建任何多个三维形状的投影,从立方体到巨大星形十二面体;你可以指定形状的空间角度和面部样式。

条形码

本子菜单中的扩展创建经典的线性条形码(支持的格式包括 EAN8、EAN13、Code39、Code128 等),二维 Datamatrix 条形码,或带有指定文本的方形二维码。

日历

如果你需要的话,此扩展会为你填充页面,生成一个给定年份的完整格式化日历,提供多种布局、样式和本地化选项。

Draw From Triangle,Triangle

类似于几何构造的路径效果(13.3.15),Draw From Triangle 根据通过选定路径的前三个节点定义的三角形,绘制一系列几何形状(如外接圆或垂心)。Triangle 扩展通过任何明确的边和角的组合创建一个三角形。

Function Plotter,Parametric Curves

这两个扩展用于绘制函数图形。Function Plotter 创建单个函数的图形(例如,移动物体的高度随时间的变化),而 Parametric Curves 则绘制一个曲线,其中 X 和 Y 坐标作为独立参数变量(通常称为 t)的函数变化(例如,X 和 Y 可能代表物体随着时间变化的坐标)。

在调用这些扩展之前,绘制或选择一个矩形,定义图形的比例,并使用数字参数来定义 X 和 Y 坐标的范围。勾选“将 X 范围乘以 2*pi”复选框对于三角函数非常方便;例如,0 到 2 的范围将被视为 0 到 2 × π。在函数绘图器中,勾选“使用极坐标”复选框将图形转换为一个圆,其中心位于所选矩形的中心,X 范围映射到角度,Y 范围映射到半径。

“样本”参数设置函数(们)将被采样的总次数;由于每次采样都会产生一个节点,因此这也是生成路径中节点的总数。这个数字越高,图形越精确。样本的最佳数量取决于函数的特性;例如,X 范围内具有n个周期的周期性函数,至少需要每个周期几个样本才能准确再现。

函数是用 Python 编程语言编写的。你可以使用一些内置的数学函数,如sin(x)log(x)sqrt(x);参阅“函数”选项卡以查看完整列表。

在函数绘图器(图 19-2)中,你可以给出绘制函数的一阶导数;导数的值决定了每个节点的贝塞尔手柄的角度。你可以选择让扩展程序数值计算一阶导数,或者取消勾选该复选框并提供导数函数的解析形式,使用相同的 Python 语法和内置函数——例如,sin(x)的一阶导数是cos(x)

图 19-2:函数绘图器示例

齿轮

这两个扩展创建一个圆形齿轮或齿条齿轮,具有给定数量的齿、齿距和接触角。

网格

这一系列扩展用于创建线网格——矩形网格(笛卡尔坐标系,例如图 13-60 中的网格)、等距网格或极坐标网格。线条数量和间距的选项不言而喻;主线和次线使用不同的笔画宽度。线条可以按对数间隔分布。每条线都是一个独立的路径对象。

指导线创建器

这个扩展通过添加指导线将页面划分为任意数量的行和列(7.1)。

L 系统

这个扩展实现了林登迈尔系统——一种简单的图形语言,通过递归可以生成复杂的顺序或树状结构(图 19-3)。

这种语言中的程序由简单的命令构成,例如“向前画一步”或“向左转”。你从一个公理开始,并递归地应用替代规则,受限于 Order 参数。其余参数决定了由基本命令生成的线条的长度和角度;你也可以随机化这些值,以产生更自然的结果。有关公理和规则中识别的命令的完整列表,请参见帮助标签。

图 19-3:L 系统示例

数学 ▶ LaTeX

这个扩展运行pdflatex(需要在你的计算机上安装)将 LaTeX 字符串转换为矢量公式图像,并将其插入到你的文档中。

NiceCharts

这个扩展可以基于文件或字符串中的数据创建条形图、堆叠条形图或饼图。参数决定了图表元素的大小、间距和样式。

随机树

类似于 L 系统,但更为原始,这个扩展绘制了一个随机分支树,其中树干的第一段是初始大小,并且每个后续的分支逐渐变短,直到达到最小大小,绘制停止。初始大小和最小大小之间的差距越大,树就越复杂。

Spirograph

Spirograph 是一个玩具,其中一个小圆圈(持笔)沿着一个更大圆形孔的内边缘滚动。这个扩展实现了相同的思想,你可以用它来生成各种光滑的中央对称曲线。

Wireframe Sphere

这是一个扩展,当你需要一个几何上正确的经纬度网格球体时可以使用。

19.3 扩展架构

本章其余部分更加技术性。如果你有兴趣了解 Inkscape 的扩展是如何实现的,为什么你可能想自己制作一个,以及如何操作,请继续阅读。熟悉编程基础,特别是 Python 语言,会更有帮助。

图 19-4 展示了 Inkscape 扩展架构的概览。

图 19-4:Inkscape 扩展:幕后解析

与 Adobe 产品不同,Inkscape 没有“一级”插件,这些插件会加载到主程序的内存空间中,并具有与 Inkscape 本身相同的访问权限,能够访问文档的树结构和程序的 API。相反,Inkscape 扩展只是一个用 Python 编写的脚本,Inkscape 在当前文档的(临时)保存副本上运行该脚本——然后将脚本的输出重新加载进来,用它替换文档并尽可能恢复对象选择。Inkscape 的扩展运行机制将所有这些保存、处理和重新加载的过程压缩成一个可撤销的操作,用户无需了解细节。更重要的是,当你在扩展对话框中启用实时预览复选框时,每次更改参数都会导致另一个保存-处理-加载周期——如果你再次更改参数或在未点击应用的情况下关闭对话框,这个周期会被自动撤销。

扩展脚本的责任是不要触碰文档中不应该触碰的部分。除了对文档进行保存的临时副本引用外,它还传递了当前选定对象的列表,以及当然,还有用户在扩展对话框中设置的参数。脚本必须加载并解析 SVG 文件,找到其中的选定对象,进行相应操作,并将修改后的文档以序列化 SVG 格式输出(通过标准输出)。

如果这种方法让你觉得笨拙和低效,那是因为它确实是这样的。然而,扩展代码与 Inkscape 核心的这种彻底解耦也有其优点。最大的一点就是为新开发者提供了低门槛。你不需要深入了解 Inkscape 本身就可以开始;你只需要基本的 SVG 熟悉度和了解如何在 Python 中处理文档的 XML 树。现有的 Inkscape 扩展也很容易学习、修改或分叉,原因正是如此。另一个优点是,任何扩展都可以很容易地作为独立脚本重用,你不仅可以在 Inkscape 中运行它,还可以在各种自动化处理场景中使用。

虽然在扩展中无法访问 Inkscape 的内部,但这并不意味着你完全孤立无援。Inkscape 附带了一个名为 inkex 的 Python 库(用于 INKscape EXtensions),扩展脚本应该使用它。它提供了许多繁琐且复杂的任务功能,你的代码中无需处理这些任务,例如解析路径数据(d 属性)、解析样式字符串并计算对象的有效样式(考虑继承和 CSS 选择器)、操作变换矩阵等等。通过 inkex,你可以编写更强大的算法,让它为你处理低级的繁琐工作。

然而,有时即使是 inkex 也不够用。你可能需要做一些只有 Inkscape 本身才能做到的事情——例如,从源文档中创建一个或多个 PNG 导出。为此,你需要运行 Inkscape 本身——通过命令行调用,可能是多次调用一个 第二份 Inkscape 副本。在旧版本中,甚至获取对象的正确边界框也需要通过命令行调用 Inkscape(使用 --query 参数,C.5);截至目前,inkex 可以为路径对象提供正确的边界框,但对于文本仍然无法做到(因为正确渲染任意字体和文本布局的复杂性)。

19.4 创建扩展

本章的其余部分将引导你从头开始创建一个极其简单——但仍然基本有用——的 Inkscape 扩展。希望通过看到这一过程是多么简单和自然,你能感到鼓励去自动化你自己的繁琐和重复的手动任务——也许,最终,你会分享你的解决方案,让其他人也能受益。

这个示例扩展,叫做 Make Initial,通过取文本对象的第一个字符并增大其字体大小,创建一个简单的初始字母。它有一个参数:字母的大小,作为其余文本字体大小的百分比。

19.4.1 .inx 文件

在开始 Python 代码之前,我们需要为扩展创建一个 .inx 文件(来自 INkscape eXtension)。这是一个 XML 文件,它向 Inkscape 描述这个扩展是什么,如何运行,以及如何呈现给用户。以下是 Make Initial 扩展的 makeinitial.inx 文件:

<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> <name>Make Initial</name> <id>com.kirsanov.text.makeinitial</id> <label>Enlarge the first character of each selected text object.</label> <param id="initialsize" type="int" min="0" max="1000" gui-text="Size of initial, percent">200</param> <effect> <object-type>text</object-type> <effects-menu> <submenu id="Text"/> </effects-menu> </effect> <script> <command location="inx" interpreter="python">makeinitial.py</command> </script>
</inkscape-extension>

根元素 inkscape-extension 只是一个容器。注意强制要求的 xmlns 属性,它设置了文件的命名空间,缺少它的话,Inkscape 无法识别该文件。name 是扩展在菜单中显示的名称;label 是将在扩展对话框中显示的介绍文本。id 可以是任何字符串,只要它对你的扩展来说是唯一的。

单个 param 元素(可以有任意数量的它们)描述了扩展的参数。它叫做 initialsize,是一个整数(因为这是一个百分比,所以我们不需要浮点精度),范围从 0 到 1000。gui-text 属性提供了它在对话框中的标签,而元素的内容(200)是初始值(第一次使用后,Inkscape 会记住并恢复你上次为所有参数使用的值)。

effect 元素将这个扩展标识为 效果扩展;其他扩展类型包括 inputoutputtemplate(详见 19.4.2)。在其中,object-type 元素标识了此扩展接受的选定对象类型;可能的值有 allpathtexteffects-menu 元素将此扩展放置在扩展菜单中的文本子菜单下。

最后,script 元素告诉 Inkscape 如何运行此扩展。在 command 元素中,location="inx" 指示它在与 .inx 文件相同的文件夹中查找可执行文件,interpreter 属性指定 Python 作为要使用的解释器(Inkscape 1.1 中包含的版本是 Python 3.8.9)。该元素的内容(makeinitial.py)指向扩展的主代码文件。

19.4.2 inkex 基类

过去,Python 是一种快速而粗糙的脚本语言,结构较为松散。如今,你可以—并且被鼓励—编写完全面向对象的 Python 代码。Inkscape 的 inkex 库就是一个很好的例子:在 import inkex 后,你首先要做的就是创建一个类来容纳扩展的代码。你的类应该扩展 inkex基础扩展类,以便继承加载 SVG 文档、解析参数以及将修改后的文档输出回去所需的所有实用方法。

inkex 库包含几个基础扩展类,适用于各种类型的扩展,从通用到专业化的都有。选择一个最适合你需求的类。

  • EffectExtension 是最通用的扩展类型,如 图 19-4 所示,它接受输入文档和选定对象的列表,对它们进行处理,然后返回修改后的文档。你需要实现执行实际处理的 effect 方法。这是我们将用于示例的基类。

  • GenerateExtension 用于一种不关心源文档或其选择的扩展;它所做的仅仅是生成一些新对象,并将其添加到文档中。基类负责将生成的对象添加到文档中,默认将它们放置在视图的中心。你需要实现 generate 方法。

  • InputExtension 是一种在扩展菜单中不可用的扩展;相反,它将一个新项添加到“打开”和“导入”对话框中的文件格式列表中。要通过输入扩展支持新文件格式,你需要实现 load 方法,该方法从流中读取输入文件,并可选地实现 effect 方法来转换结果。不用说,你必须返回有效的 SVG。

  • OutputExtension 类似,用于输出扩展,它表现为在“保存”和“另存为”对话框中的文件格式。你需要实现一个可选的 effect 方法,在保存前转换文档,以及一个强制性的 save 方法,执行实际的输出到流中。

  • CallExtension 是为设计为 Inkscape 与某些外部 SVG 处理应用程序之间简单接口的扩展。你需要实现 call 方法,该方法在输入文件上调用你的应用程序并生成输出文件。对于此类任务,这个基类比通用的 EffectExtension 更高效,因为它甚至不需要在 Python 代码中解析 SVG。

  • TemplateExtension 是一个提供新文档模板的扩展。与输入和输出扩展一样,它不在扩展菜单中列出;相反,它会在从模板新建对话框中将一个项目添加到模板列表中(见图 3-3)。你可以实现 get_template 方法,该方法返回模板的可用 SVG 代码(例如,通过从文件中读取)。或者,你可以实现 get_size 方法(返回模板的大小)和/或 set_namedview 方法(创建 sodipodi:namedview 元素,在该元素中设置标尺、页面边框、缩放等)。

  • ColorExtension 是一个专门用于调整选定对象颜色的效果扩展。你需要做的就是实现 modify_color 方法,该方法接受一个输入颜色并返回输出颜色;你也可以选择添加 modify_opacity 方法,它对不透明度执行相同的操作。基类会处理其余的内容(例如解析样式、追踪克隆、处理渐变等等)。

  • TextExtension 是一个专门用于编辑文档文本内容的效果扩展。你需要做的就是实现 process_chardata 方法,该方法接受一个输入文本字符串并返回其编辑后的版本。

除了每个基类的必选方法(如上所列),任何扩展类还可能需要实现 add_arguments 方法,前提是你的扩展有一些可供用户调整的参数。

19.4.3 makeinitial.py 文件

完成这些准备工作后,我们终于可以进入实际的 Python 代码。以下是 makeinitial.py 文件的完整内容:

1  import inkex
2  from lxml import etree
3 
4  class Makeinitial(inkex.EffectExtension):
5 
6      def add_arguments(self, pars):
7          pars.add_argument("--initialsize", type=int)
8 
9      def effect(self):
10         texts = self.svg.get_selected(inkex.TextElement)
11         for text in texts:
12             self.__makeinitial(text)
13 
14     def __makeinitial(self, node):
15         if node.text != None and node.text.strip() != "":
16             char = node.text.strip()[0]
17             charAt = node.text.index(char)
18             newNode = etree.Element("tspan")
19             newNode.attrib["style"] = "font-size:" + str(self.options.initialsize) + "%"
20             newNode.text = char
21             newNode.tail = node.text[charAt + 1:]
22             node.text = ""
23             node.insert(0, newNode)
24         elif len(node) != 0:
25             self.__makeinitial(node[0])
26 
27 if __name__ == '__main__':
28     Makeinitial().run()

自然,我们首先做的是 import inkex。由于我们将操作文档的树(以创建一个新的 tspan 节点作为初始值),因此我们还需要导入 lxmletree 组件,这是 Python 用于处理 XML 的库(如果你不熟悉它,可以阅读lxml.de/tutorial.html上的教程)。

我们通过扩展 inkex.EffectExtension 来创建扩展类(见 19.4.2)。我们类中需要实现的第一个必选方法是 add_arguments。在这个方法中,我们调用 pars.add_argument;该方法的第一个字符串参数是命令行参数(因此以 -- 开头),这是 Inkscape 传递给我们脚本的参数,必须与 .inx 文件中定义的扩展参数(initialsize)的名称匹配。它也是我们稍后访问该值时使用的名称。

第 9 行中显示的 effect 方法执行实际工作。调用 self.svg.get_selected(inkex.TextElement) 返回用户在调用扩展之前选择的元素列表,经过筛选后只包含文本元素。然后,我们遍历这些元素,并依次调用我们自己的方法 __makeinitial(方法名中的双下划线是 Python 的私有方法命名约定)来处理每个元素。

__makeinitial(第 14 行)中,事情变得有些复杂。我们需要获取该文本元素的第一个字符。然而,在 SVG 中,text元素通常不包含文本;相反,它包含tspan元素,用于表示行,并且这些tspan元素可能还会包含其他tspan元素来进行样式设置。因此,我们检查这个节点是否有文本内容(node.text != None),并且它的文本是否不全是空白字符(node.text.strip() != "")。如果不是,我们会递归地调用__makeinitial方法,针对它的第一个子节点(如果有的话)(第 24-25 行);在lxml中,元素是子节点的列表,因此检查是否有子节点的方式是len(node) != 0,然后第一个子节点就是node[0]

如果当前节点确实有文本,我们通过node.text.strip()[0]提取它的第一个非空白字符(第 16 行)。由于可能存在空白字符,我们计算该字符的索引(第 17 行)。然后,在第 18 行创建新的tspan节点(对于 XML 专家:不要担心命名空间,因为 SVG 命名空间是 Inkscape SVG 文档中的默认命名空间)。我们通过self.options.initialsize获取扩展参数的值,并在新的节点中构造使用该值的style属性(第 19 行)。根据 CSS 规则,属性中的百分比值是指父节点的字体大小(即当前正在处理的node)。

现在,我们需要处理文本。初始字符被分配给新的tspan节点的text属性(第 20 行)。至于其余的文本,我们需要从当前的node中提取(第 22 行),并将其分配给newNodetail属性(第 21 行)。这是因为在lxml中,节点的text属性只包含其文本内容中位于第一个子节点之前的部分。之后,每个子节点的tail属性保存它之后的文本片段(如果有的话)。

最后,newNode已经准备好,我们将它插入到当前的node中(第 23 行)。

脚本的最后两行(27-28)包含一些运行所需的黑魔法。我们检查这个脚本是否作为独立程序运行(例如,而不是被导入到其他脚本中),如果是的话,就运行我们类的run方法(由其inkex父类提供)。

19.4.4 部署和测试

具有扩展代码的.py 文件和其.inx 文件被放置到 Inkscape 的扩展文件夹中。在首选项 ▶ 系统中,你可以查找 Inkscape 的扩展文件夹—这里是 Inkscape 自带扩展的位置,也是你可以寻找灵感和可重用代码的地方。然而,你自己的扩展应该放到用户扩展文件夹中;在我的系统中,它位于 C:\Users\dmitry\AppData\Roaming\inkscape\extensions。这样,当你升级到新版的 Inkscape 时,你的代码就不会丢失。

将文件复制过来,重新启动 Inkscape,瞧!新扩展出现在扩展 ▶ 文本菜单中,可以应用于任何文本对象,如图 19-5 所示。

图 19-5:新建 Make Initial 扩展的实际应用

第二十一章:教程:设计名片

即使在虚拟会议的时代,名片仍然有其独特的作用。它们反映了你或你的组织的个性,并展示了你最希望他人了解或记住的内容。就像三行俳句一样,你有有限的空间来做出清晰、独特且令人难忘的陈述,而这种陈述可能会比你目前的网站更具持久性。

简洁、有限的空间和设计必须突出:这些标准使得名片成为一个很好的矢量编辑器测试项目,作为设计工具使用。Inkscape 的工具集非常适合这项工作——尽管它不是为创建要打印在纸上的设计而最理想的软件(见 18.8)。

本教程展示了两种不同的名片设计。我并不是邀请你完全按照这些步骤来操作(除非你只是想学习这些技巧)。如果你计划创建名片,看看比这两个设计更多的示例,并尝试使用 Inkscape 将这里展示的最佳设计技巧与一些原创元素结合起来。创造力无法传授,但可以激发。无论你是要创作艺术性作品,还是设计一款完全传统的名片,Inkscape 都能为你提供帮助。

20.1 设计 1:简约图形

要开始创建名片,从文件菜单中选择从模板创建,在列表中选择名片,在名片大小列表中选择首选尺寸,然后点击从模板创建。这将打开一个新的 Inkscape 窗口,带有适当尺寸的名片画布。本教程中的示例使用的是 90×50 毫米的尺寸。

切换到文本工具,并为名片上的所有文本行创建文本对象:姓名、职位、地址、电话等(见图 20-1)。确保它们都是独立的对象(每次点击并单独输入一个),因为你会频繁地移动它们,尝试不同的布局。如果你想在名片上显示一个徽标,导入徽标文件(见 18.2)。如果你的徽标只是低分辨率的位图,你可以对其进行描摹(见 18.5),并手动清理生成的路径,然后删除位图。

图 20-1:准备工作区并添加文本对象

20.1.1 选择字体

下一步是为你的文本对象选择字体。使用你喜欢的字体来帮助个性化你的设计。如果你对平面设计感兴趣,可能已经拥有一套自己喜欢的字体库;否则,操作系统通常会自带一些基本的(但很不错的)字体,此外你也可以在网上找到许多高质量(且价格适中的)字体。

我为这款设计选择了免费的 Gentium 字体(可在software.sil.org/gentium/下载),因为它具有美观的外观,并且支持广泛的 Unicode 字符集。在为所有文本字符串指定相同的字体后,使用选择工具调整它们的相对大小(见图 20-2)。

图 20-2:字体和大小

相同字体的不同大小搭配在一起好看吗?如果不好看,可以尝试为不同的元素使用不同的字体,但请记住,使用超过两种字体可能会使设计显得杂乱无章,尤其是在这么小的设计中。

要让 Inkscape 显示新的字体,只需像在操作系统中通常那样安装它(例如,在 Windows 中,右键点击字体文件并选择为所有用户安装),然后重启 Inkscape。新字体将会出现在“文本和字体”对话框以及“文本工具”的下拉列表中(15.3.2)。

20.1.2 布局

在制作多个名片(或其他设计项目)的模板时,您需要为可变长度的姓名和地址预留额外的空间。然而,我这里只是为自己制作名片,这让我不受此限制,可以精确地定位和对齐所有文本对象。我能够将所有地址信息紧密地排列在姓名旁边,创建一个通过对齐紧密绑定在一起的不对称构图(地址与姓氏的起始位置对齐,电子邮件与姓名的顶部对齐,等等),如图 20-3 所示。

图 20-3:排版文本

这种布局看起来很有趣,但可能有点过于矩形。显而易见的做法是选择全部(Ctrl-A),然后旋转(按一次)。效果好多了!现在的设计有了一种构成主义的风格——这是一种短暂但具有影响力的 1920 年代设计运动,提倡大胆的对比和斜线排版。让我们进一步发展这种风格:从边缘向构图中侵入的三个黑色角落,并在构图中心放置一个大的红色圆圈([图 20-4)。构成主义者喜欢黑色和红色的简单几何形状!

图 20-4:旋转和添加形状

为了达到最佳效果,大多数文本对象需要调整字间距(文本中所有字母之间的均匀间距)和字形对间距(特定字母对之间的间隔)。在“文本工具”中,使用控制栏中的(字母间距水平字形对间距数值)来调整这些参数;对于字形对间距,您也可以使用 Alt+方向键来改变文本光标处的间隔(15.4.4)。通常,大号文本对象的字母间距需要更紧凑,而小号字体则需要增加字母间距以提高可读性。

20.2 设计 2:艺术绘画

我的第一张名片设计主要受文本行排版的启发,图形元素则是其次的支持和强化这一排版的部分。你也可以反过来做,从图形开始,再围绕它构建设计。

对于一张公司名片,显而易见的起点是 logo。如果你设计的是个人名片,并希望它更具个性,可以添加一张照片,然后将其转换为矢量图形(18.5)进行调整。你也可以使用一张剪贴画(1.3)作为设计的重点。

对于第二张演示卡,我选择了另一种方法:艺术字母缩写。我切换到书法笔,设置角度为 90 度,固定值为 100,并画了几个交织的字母。最后我基本上把字母的形状做对了,但结果充其量只是稍微有点意思。我尝试通过合并路径对象,再进行简化、内嵌和外扩几次来改进它,正如图 20-5 所示。

图 20-5:创建字母缩写

现在字母看起来更自然了,但我希望让它们更有趣。“不要太整齐”是一种可行的设计策略;如果你能以创意的方式涂抹、扭曲或损坏你的艺术作品,就大胆去做吧。基于这一思路,我选择了一个稍微窄一点的笔尖,将颤动幅度最大化到 100,并用我的平板笔在字母周围疯狂地“舞动”了一下(图 20-6)。使用鼠标做这个效果也差不多可以达到同样的效果。刚开始的结果看起来不太吸引人,因为我忘了应用通常的简化/内嵌/外扩技巧。

图 20-6:创意性地损坏字母形状

20.2.1 布局

这幅扭曲的艺术作品应该占据卡片的中央位置,其余部分则对称地环绕其周围。我使用了一种简单的倾斜、非常浅的无衬线字体(Helvetica Condensed Light),这种字体不会分散对中央艺术作品的注意力。由于横向布局让卡片显得拥挤,我把所有内容都旋转了 90 度(通过按 Ctrl-),让艺术作品有更多空间,同时让文字漂浮到边缘,不干扰艺术作品,如[图 20-7 所示。

图 20-7:围绕字母缩写排版名片

20.2.2 纹理与颜色

一个令人愉悦的设计开始显现出来,但离完成还差得远。卡片看起来太空旷、平坦,并且中间那块不规则的墨迹显得有些敌意。为了修正这个问题,我决定添加一些背景渐变。

如 10.6 所述,默认的渐变效果是从某个颜色(例如蓝色)的不透明度 1 到不透明度 0,看起来比较粗糙,因为即使使用浅色,边界在白色背景下仍然明显可见。为了改善在白色背景上的渐变效果,可以将渐变的透明端涂成白色,而不是与另一端相同的颜色。

在这里,我在卡片的边缘添加了四个带有不规则倾斜蓝绿色渐变的矩形,以实现柔和的融合、自然的弯曲、不对称的外观。在图 20-8 中,虚线表示四个带有渐变的矩形的边框,渐变线显示了每个渐变的跨度和方向。我将首字母涂成深蓝色,并为字母添加了一个模糊的、50%不透明的投影效果(过滤器 ▶ 阴影与辉光 ▶ 投影)。

图 20-8:添加渐变和阴影

为了让它更加美观,我决定通过叠加一层常规的半透明线网格来为卡片添加纹理(图 20-9)。

图 20-9:添加条纹纹理。名片已准备好。

为了添加纹理,我在整个卡片上画了一个矩形,打开了填充和描边(Shift-Ctrl-F),将填充设置为图案,并选择了条纹 1:1 的白色纸纹理。使用节点工具中的图案调整手柄(10.8.1),我旋转了条纹并将其缩小。最后,我将矩形的 z 顺序调整为在渐变和首字母之上,但在文本之下,并将其不透明度降低到 20%。

20.3 导出和打印

如果你已经设计好了名片,并且想要打印,首先需要将文件转换为 PDF 格式。

Inkscape 的 PDF 导出器(B.3)足够成熟和精细,能够渲染任何设计,无论是本教程的第一张卡片(没有透明度或渐变,全为不透明形状的集合),还是第二张卡片(带透明度、渐变,甚至是首字母上的投影效果)。需要栅格化的部分将被栅格化,文本对象要么会嵌入字体,要么在导出时转换为路径。

如果即使是 PDF 也不够,你总是可以将整个设计导出为位图。Inkscape 只能导出为 PNG 格式,但其他许多程序可以将 PNG 转换为其他位图格式,例如 TIFF(虽然已较旧,但在印刷领域仍然流行)。

20.3.1 使用设备颜色

有时打印服务会要求使用特定设备的 CMYK 或专色(例如,要求为公司徽标使用指定的专色),而不是 PDF 或 TIFF 文件。虽然 Inkscape 提供了一些色彩管理的显示支持,但你无法将除了 RGB 屏幕色彩空间之外的任何东西导出为任何输出格式。你将需要使用外部软件来执行色彩分离(18.8.3)。

20.3.2 平铺输出

如果你计划在办公室或家用打印机上打印名片,可能会使用 A4 或 Letter 纸张,每张纸上有多张名片,打印后剪成单独的卡片。为了准备可打印文件,将所有卡片的对象组合在一起,然后使用创建平铺克隆对话框(16.6)创建一个 2×5 的克隆网格,以适应你可打印的页面(图 20-10)。

图 20-10:铺设卡片以填充输出页面

第二十二章:教程:创建动画

从一开始,SVG 就被设计为既支持静态图形也支持动画矢量图形的语言。它支持脚本化动画和声明式动画。然而,无论是好是坏,基于 SVG 的动画在网页上的应用从未真正流行开来,现在看起来任何形式的矢量动画(如 Flash)似乎都已经过时。现在,HTML + JavaScript 或纯视频已成为主流在线内容呈现方式。

Inkscape 不支持动画 SVG 文档(尽管你可以通过 XML 编辑器手动添加动画属性),只能静态显示 SVG 文档。不过,你仍然可以使用 Inkscape 创建静态帧,然后将它们合成一个动画 GIF 或视频——尽管没有时间线控制,处理超过几帧的动画会变得非常困难。

21.1 创建模板

在 Inkscape 中创建动画帧的最简单方法是将它们放置在不同的图层上(4.9)。通过切换相邻图层的可见性,你可以看到帧如何堆叠,并控制每一帧之间的变化。手动创建多个图层是非常繁琐的,因此我编写了一个简单的 Python 脚本,它可以创建一个 200×200 像素的文档,并带有 100 个空图层:

print ("""<svg width="200" height="200"  xmlns:svg="http://www.w3.org/2000/svg"  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">""")
for i in range(100): print ('<g inkscape:groupmode="layer" display="none" id="%03d"/>' % (i + 1))
print ('</svg>')

所有图层都默认创建为隐藏状态(这就是display="none"的作用),所以在 Inkscape 中,你需要逐个解除隐藏(4.9.3)才能在上面绘制。你可以更改脚本创建的图层数量(range(100))以及画布的尺寸(width="200" height="200")。将脚本保存为名为 generate-layers.py 的文件,并在命令提示符下运行它,并将其输出捕获到一个 SVG 文件中。(你需要在计算机上安装 Python,可以通过python.org/下载。)然后,在 Inkscape 中打开该文件:

$ python generate-layers.py > ani.svg
$ inkscape ani.svg

你还可以将生成的文件(ani.svg)放入你的~/.inkscape/templates 文件夹中,这样它就会作为一个模板工作,所以下次你可以通过从文件▶新建列表中选择它来创建一个空的 100 层文件。图 21-1 显示了加载了多层文件的 Inkscape 图层对话框(4.9.4)。

图 21-1:加载到 Inkscape 中的 100 层动画模板

21.2 创建角色

让我们做一个跳舞的男人的动画,它既有趣又足够简单,不需要太多绘画技巧,适合小格式的动画。我的主角将以他的动作著称,因此我不需要让他看起来过于复杂。一个简单的简笔画就足够了(图 21-2)。

图 21-2:表示人物节点的简笔画,在节点工具中显示

它由三条简单的路径(手臂、腿部和身体)和一个椭圆(头部)组成。使用钢笔工具(14.1.1)并按 Ctrl 键绘制水平/垂直直线;使用椭圆工具(11.4)创建头部。为了方便插值,对身体和四肢使用路径 ▶ 合并,使它们成为一条路径,并在节点工具中按 Ctrl-Alt 点击(12.5.3)在肘部和膝关节处添加节点。

21.3 补间

现在通过复制角色来创建一个副本(选中头部和身体后按 Ctrl-D),将其移动到右侧,并在节点工具中调整节点,给我们的人物一个有趣的舞蹈姿势(图 21-3)。这提供了两个关键帧,整个动画可以简单地在这两个帧之间交替进行。

图 21-3:两个关键帧

让我们添加一些中间帧,使关键帧之间的过渡更为平滑。动画师称这种过渡为tweening(来源于between)。选择两个身体(即两个路径对象),然后执行扩展 ▶ 从路径生成 ▶ 插值。指定插值步骤数(例如,4),选择插值方法 1,如果需要,可以使用非零的指数值,使得运动的速度加快或减慢非线性。然后,通过插值两个椭圆来为每个插值后的身体创建头部,使用相同的步骤数和相同的指数(图 21-4)。

图 21-4:插值关键帧

如果补间效果看起来不对,你可以撤销插值,调整关键帧,然后重新插值,直到你得到满意的效果。插值方法 1 会将处于相同路径位置的节点对齐,因此在一个关键帧的路径是通过调整另一个路径而创建的且没有添加或删除节点的情况下最为有效(就像我们的案例)。如果两条路径的起源不同并且节点不兼容,则方法 2 会更好。

21.4 合成

让我们将动画放置在画布的合适位置,并将帧分布在不同的图层上。移除补间,并将第二个关键帧移动到第一个关键帧的位置上。(请注意,舞者的右脚在两个关键帧中是重合的,因为它踩在地板上。)选择两个重叠的角色并将它们放置在画布上,必要时进行缩放,并为你计划添加的其他元素(如文本标题)留出空间。最后,再次插值身体和头部——如图 21-5 所示。

图 21-5:就位插值

接下来的任务有些无聊。你需要取消组合插值路径,并将每一条路径单独放置到自己的图层上,从 002 到 005,关键帧占据 001 和 006 图层。然后,按照反向顺序复制这些帧:将第 005 帧到第 001 帧放入 007 到 011 的范围内,使舞者平滑地返回到原始位置。

使用 Shift-Page Up 和 Shift-Page Down 将选中的对象向上一层/下一层移动,并观察状态栏,查看你所选对象位于哪一层。或者,你可以剪切(Ctrl-X)一个对象,切换到目标图层,然后粘贴到该位置(Ctrl-Alt-V)。最后,确保你使用的所有图层都是可见的,并保存 SVG 文件。

21.5 导出

你可以手动导出图层,但那会非常繁琐——特别是在查看结果并对源文件做出更改后,你还需要再做一次。幸运的是,Inkscape 提供了方便的命令行参数,所以我编写了一个 Python 脚本来自动化导出过程:

import os, sys
for i in range(int(sys.argv[2]), int(sys.argv[3]) + 1): os.system("""inkscape --export-fileid=%s-%03d.png --export-id=%03d \ --export-id-only --export-dpi=400 --export-area-page \ --export-background-opacity=1 %s""" % (sys.argv[1], i, i, sys.argv[1]))
os.system("convert -loop 0 -delay 10 %s-*.png %s" % (sys.argv[1], sys.argv[4]))

该脚本以源文件的名称、开始和结束图层的编号以及生成的 GIF 文件名作为参数。它调用 Inkscape 分别导出每个图层;然后,它调用 ImageMagick 的 convert 工具将这些帧合成一个可以在任何网页浏览器中查看的动画 GIF 文件。

将其保存为 produce-gif.py 并运行:

$ python produce-gif.py ani.svg 001 011 stick.gif
Exporting only object with id="001"; all other objects hidden
DPI: 400
Background RRGGBBAA: ffffffff
Area 0:0:100:100 exported to 444 x 444 pixels (400 dpi)
Bitmap saved as: ani.svg-001.png
Exporting only object with id="002"; all other objects hidden
...
Exporting only object with id="011"; all other objects hidden
...

www.kirsanov.com/inkscape-animation/stick.gif查看输出结果。

21.6 自由手绘

到目前为止,我们的简笔画动画看起来最多只能算是稍微引人入胜。这种平滑、矢量风格适合技术性动画,比如演示机器的工作原理,但对于一段动画舞蹈来说,灵感不足。

为了改善简笔画人物,隐藏所有图层,除了 001,选择人物并降低其不透明度。然后使用书法笔(14.2),选择 宽度 为 20,颤抖 为 40,并在简笔画人物上绘制自由手绘的笔画。尽量让它看起来更随意、时髦、有个性;添加更加突出的脚和拳头,以及更具人性化的身体形态(图 21-6)。

图 21-6:使用书法笔使人物更加人性化

完成后,删除原始的骨架图形。它已完成作为蓝图的功能,不再需要。由于其粗糙的外观,它在纯白背景下看起来有些陌生。为了修正这一点,减少笔的宽度至 1,并在舞者周围添加一些细小的随机笔画,暗示他的四肢运动和地板上的阴影,如图 21-7 所示。别担心如果看起来随意——在移动的图形中,这种随机性将会生动起来,显得很自然。

图 21-7:骨架去除,运动噪音添加

这个项目的主要规则是不要复制。自由手绘的粗糙感不能被回收。无论一帧与另一帧有多相似,你都需要从头开始完全手绘每一帧,只用简笔人物作为指南。复制自由手绘的笔画—即使你移动或缩放它们—会立刻消除那种粗犷、自然的感觉,使你的动画变得呆板和沉闷。不要偷懒;你画得越多,越容易。查看完整的手绘动画:www.kirsanov.com/inkscape-animation/rough.gif

你可以使用相同的技术在导入的位图上手动描摹书法笔。将位图设为半透明并在其上进行草绘,尽量突出最重要的特征,忽略其他部分。在动画中,源位图可能是视频帧、静态照片或渲染的 3D 图像。

21.7 添加文本

让我们将整个动画向下移动,为其上方腾出一些空间,用于添加文本标题。取消所有图层的隐藏,选择所有图层上的所有对象(Ctrl-Alt-A),然后将它们向下移动。

我们动画中的横幅将只是一个单词:“dance!”。我们能做得比将相同的静态文本对象复制到每一帧更有趣吗?

我们可以使用书法笔在某些文本对象上绘制起伏的手写字母—将整个动画渲染为相同的风格。然而,为了演示的目的,我们尝试做些不同的事情:让文本横幅像旗帜一样平滑地飘动。我们可以使用信封变形路径效果(13.3.3),但使用节点雕刻可能更简单(12.5.7.2)。

首先,创建一个文本对象,选择一个好看的字体,将其转换为路径(Shift-Ctrl-C),取消分组(Ctrl-U),合并(Ctrl-+),切换到节点工具(F2),选择所有节点(Ctrl-A),然后按住 Alt 拖动其中一个节点。整个形状会平滑地弯曲和拉伸,如图 21-8 所示。如果字母形状变得过于扭曲,可以撤销拖动并按几次 Insert,每次都将节点数翻倍—这通常有助于让你雕刻的路径表现得更自然。

图 21-8:文本横幅的节点雕刻

复制两份文本对象,对每一份进行不同的雕刻处理—使它们看起来像是两幅在风中飘动的横幅画面—然后在它们之间进行插值。接着,像我们为舞者形象做的那样,将插值步骤分布到多个图层,将它们放置在画布上的人物上方(图 21-9)。不必担心精确位置;轻微的横幅晃动并不会有问题。

图 21-9:横幅的插值

要查看每个对象相对于前一层的位置,请使用不透明度控制,在图层对话框中将前一层暂时设置为半透明。使用 produce-gif.py 脚本重新生成动画 GIF。图 21-10 显示了帧 001 到 005。

图 21-10:动画帧的一半(向前移动)

访问 www.kirsanov.com/inkscape-animation/with-banner.gif 查看目前的效果。

21.8 添加颜色

我们的动画唯一的不足就是完全没有颜色。让我们给每一帧添加不同颜色的背景——为了呈现真正的频闪舞池效果。为了自动选择随机颜色,创建一个颜色未设置的矩形,并使用创建平铺克隆对话框(16.6)来将其复制并添加一些色调变化。

用对比鲜明的亮色涂上“dance!”横幅,并且让颜色在每一帧之间有所变化。最后,为了让跳舞的人物从背景中突出出来,在他身后添加一个椭圆形渐变“聚光灯”;每一帧随机移动、缩放并旋转这个聚光灯,增加额外的动感效果。最终版本请见www.kirsanov.com/inkscape-animation/final.gif。享受吧!

第二十三章:教程:绘制 3D 正确的卡通图

Inkscape 的 3D 盒子工具(11.3.1)并不打算替代专业的 3D 设计应用程序。Inkscape 是一个绘图程序,它的 3D 盒子工具最好作为绘图辅助工具来使用,这也是我们在本教程中使用它的方式。

一个3D 正确的图画是符合艺术家数百年来已知透视规则的作品。它不需要完全真实的阴影和纹理;只要线条和形状在角度和尺寸方面大致正确即可。

有意的透视失真可能本身就具有艺术价值,而某些绘画风格根本不使用透视法。当必要时,许多艺术家能够在没有任何技术辅助的情况下绘制 3D 正确的艺术作品。然而,你会发现,许多看似做得很好的艺术作品中,透视错误时有发生——从几乎不明显到令人尴尬。我希望看到更多的艺术家——不仅仅是初学者——利用 Inkscape 简单快捷的方式设置绘图透视,而不需要繁琐的测量和辅助线。

22.1 房间

让我们画一个简单的场景,表现两个人在房间里见面。切换到 3D 盒子工具(X),并在画布中央拖动,绘制房间的盒子。为了同时看到盒子的所有面,可以将其作为一个组进入(Ctrl-Enter),选择组内的所有面(Ctrl-A),并将状态栏中的透明度滑块(标记为 O:)设置为 50%,如图 22-1 所示。然后,退出组(Ctrl-Backspace)。

图 22-1:创建房间

不用担心第一次尝试就能把形状做对;继续拖动盒子的手柄,必要时拖动消失点来调整你绘制的内容。使用角落手柄来调整房间的大小。四个 X/Y 手柄默认在 X/Y 平面上移动,按住 Shift 键时沿 Z 轴移动。相反,四个 Z 手柄在不按 Shift 键时沿 Z 轴移动,按住 Shift 键时在 X/Y 平面上移动。X 形的中央手柄将移动整个房间,在不按 Shift 时,沿 X/Y 平面移动,按 Shift 时沿 Z 轴移动。当在 X/Y 方向移动手柄时,按住 Ctrl 键可以限制其只在某一轴(仅 X 或仅 Y)上移动。拖动消失点将重新倾斜并调整整个房间的大小,以适应改变后的透视效果(11.3.3)。

除了 X 轴和 Z 轴上的消失点外,你还可以在 Y 轴上创建第三个消失点。换句话说,你可以让 Y 轴的消失点有限。如果你希望你的绘图有更戏剧性或夸张的透视效果——就像从房间角落的蜘蛛视角看一样——可以这么做。相反,如果你想要一种更为客观的“科学”视角,可以让 X 和/或 Y 的消失点变为无限远,就像在图 22-2 中所示。

图 22-2:不同的视角

22.2 家具

让我们添加一些家具——例如,一个沙发。

在创建 3D 框架组合时,使用对齐(7.3)是一种便捷的方法,可以使框对齐得非常精确。在对齐控制条(7.3.1)上,确保开启以下选项:启用对齐(最上面),对齐节点、路径和控制点,和对齐到路径。

接下来,在较大的框内画一个较小的框。(这里的“内部”是指透视;在 Z 顺序中,框可以是任意顺序,只要它们的边缘是半透明的,你能看到所有创建的框的边缘。)新的框将使用与房间框相同的透视(相同的消失点)。抓住左下角的 X/Y 控制点,将其拖动,使其对齐到房间的左下角 Z 边缘。这将成为沙发的底座;使用其他角控制点调整其正确的高度、宽度和深度(图 22-3)。

图 22-3:沙发底座

对于沙发背面,画一个新的框,并以类似的方式对齐;或者,更简单的方法是,复制底座(Ctrl-D),并拖动其 X/Y 控制点来调整其大小,直到得到正确的形状,如图 22-4 所示。

图 22-4:沙发背面

我们在沙发两侧添加两个小地下窗户。一对在 X 方向上压缩的框将完美地形成窗户。然而,如何才能正确地放置它们,因为没有任何一个窗户的侧面与其他框的侧面对齐呢?

再次强调,复制然后调整大小的方法是最简单的。复制你拥有的最大框——房间本身。按住 Ctrl 并拖动前方 X/Y 控制点向后(沿 X 轴),将其压缩为一个薄层;然后,拖动 X/Y 平面上的四个控制点,调整窗户位置。对于第二个窗户,复制第一个窗户并按住 Shift 拖动其中央控制点在 Z 轴方向上进行调整;这样,第二个窗户将与第一个窗户完全对齐,保持透视一致。使用相同的复制和压缩技巧,在 Z 最远的墙面(即最接近 Z 消失点的墙)添加一个门框,使其突出于房间框之外,正如图 22-5 所示。

图 22-5:窗户和门

22.3 人物

现在让我们画两个人,一个站在沙发旁,另一个站在门口。3D 框工具如何帮助绘制人物?我并不会将它们建模为类似机器人的平行六面体结构,但我仍然希望每个角色的高度和体积在绘画的透视下是准确的,使用 3D 框工具是确保这一点的简单方法。

操作方法如下。首先,在门口添加一个高而窄的框。这将代表人类 1。像之前一样,复制门框,在 X/Y 平面上将其两侧挤压,并调整大小,以使人物高度与门的高度比例更为真实。(你可以请某人站在真正的门口,来获得大致的感受。)

然后,复制人体 1 的框。使用这个新人体中间的 X 形控件,按住 Shift 拖动它到前面,再按住 Ctrl 稍微水平拖动一小段,沿 X 轴方向。这将是站在沙发旁的第二个人(图 22-6)。

图 22-6:这两个人

这样,两个人物框会有相同的透视调整高度,并将作为绘制人物的有用指南。如果我要达到更好的解剖学精度,我可以为每个人物使用三块框来表示腿、身体和头部。(不幸的是,你不能一次性在 3D 空间中拖动多个选中的框;你必须一个个拖动它们。)

22.4 草图和上色

够了,别再用这些框了!收起 3D 框工具,拿起书法笔,在 3D 蓝图上开始绘制草图。创建一个新图层(图层 ▶ 添加图层),这样你就可以分别显示和隐藏 3D 框和绘图。

不要试图精确地描摹框的边缘。对于非几何物体,如沙发和人物,这是几乎不可能的,甚至连墙壁和窗户也会从一些手绘的粗糙感和不完美中受益。将 3D 框的边缘作为大致的指南,但除此之外,自由绘制(Inkscape 的座右铭)以你自己的方式和风格来画(图 22-7)。你当然不需要描摹所有的线条;可以省略一些,或用短小的部分笔触暗示其他部分。

图 22-7:在 3D 蓝图上草图绘制

你会发现,3D 框架使得在处理细节时更容易记住图形的整体构图和空间关系。我不会详细讲解绘制过程;你已经在另一个教程中看到过我使用书法笔的草图风格(21.6)。

一旦完成了基本轮廓,关闭 3D 图层,看看你的图像如何凭借自身的优点展现出来,如图 22-8 所示。

图 22-8:当草图完成后,隐藏 3D 图层。

最后,使用宽模糊的彩色笔触,在深色清晰的轮廓下为图形上色,如图 22-9 所示。

图 22-9:添加颜色

第二十四章:教程:艺术绘画

在矢量编辑器中,Inkscape 是最适合草图和自由绘画的工具之一,得益于其多功能的书法笔工具(14.2)。与其他矢量工具不同,Inkscape 的书法笔不仅几何上不完美,而且充满了个性——但它依然是一个矢量工具,能够生成始终可编辑的矢量对象。

在本教程中,我们将详细介绍如何完全使用 Inkscape 创建一幅简单的绘画。我将画一匹搞笑的卡通奔跑的马,它可能是一个吉祥物或漫画人物。我一直觉得从零开始绘画非常具有挑战性,我想许多读者也能理解这一点。然而,在 Inkscape 的帮助下,我终于画出了一幅我喜欢的作品。

23.1 第一幅草图

首先,切换到书法笔工具,并在工具控制条中设置宽度为 0.05,收缩为 0.2(14.2)。如果你有绘图板,可以启用笔压来调节笔画宽度(14.2.1.1)。角度和固定参数仅适用于书法,不适用于自由绘画,因此将固定设置为 0——这实际上将固定角度的笔变成了一个无方向的圆形刷子(14.2.2)。

不管你信不信,我以前从没画过马,而且我的前几笔让这一点显得异常明显。像这样的开始,我想很多人都会有放弃的冲动(我也是)。但是耐心和努力终究会有回报——尤其是在 Inkscape 中。只需要不停地在画布上画下几笔,撤销,调整,再画一次。迟早,总会有一些不完全糟糕的东西,从那些乱七八糟的线条中闪现出来(图 23-1)。

图 23-1:第一笔

对大多数人来说,绘制物体需要视觉辅助。你可能很难自己想象马的身体如何弯曲,或者马的腿是如何弯曲的。我发现真实马的照片帮助不大;相比之下,马的风格化画作要更具启发性——在这些画作中,其他更有能力的艺术家已经完成了抽象和强调核心马术特征的艰苦工作。通过 Google 图片搜索,你可以找到大量参考资料。经过多次草图绘制、撤销和强调(通过增加笔压),我得到了图 23-2 中展示的草图。

图 23-2:第一幅草图

23.2 上墨

传统的漫画或卡通艺术家工作流程主要分为两个阶段:草图(通常用铅笔)和描线(用钢笔)覆盖在粗略的草图上。你可以在 Inkscape 中遵循相同的流程。当绘图看起来差不多像一匹马时,就开始在其上进行描线,使用新的图层进一步发展它。通过这种方式,你可以放大草图中的优点,并在此基础上进行创作,而无需担心过度调整导致破坏草图。选择所有笔画(Ctrl-A),并将其透明度设置为 0.05,使其变得几乎不可见;这有效地隐藏了细笔画,使你更容易集中精力于粗笔画上。然后,锁定此图层(使用状态栏中的锁定切换按钮),创建一个新的图层(图层 ▶ 添加图层),并再次使用草图作为指南重新绘制同样的马,如图 23-3 所示。

图 23-3:在新图层上进行描线

这是同一匹马吗?不完全是。第一张草图中的马看起来像一匹真实的马——也许有些过于真实。我们想要的是一幅卡通画,而不是照片级逼真。在卡通画中,生物的头部(尤其是眼睛)和脚部(或手或爪子)通常被放大,比例失调。在第一层描线中,我们就要做到这一点:保持身体不变,但放大蹄子和头部,添加一双超大的卡通风格眼睛(图 23-4)。

图 23-4:让马看起来更卡通化

23.3 调整

向量编辑器的独特优势在于所有笔画保持独立对象,这使得对图纸的调整(如微调、缩放或旋转)变得容易。要在马的图纸上进行这样的调整,使用选择工具,拖动腿部或头部选择其所有对象,并使用鼠标手柄或便捷的键盘快捷键:按住 Alt 键并使用箭头键移动,Alt-<或 Alt->进行缩放,或 Alt-[或 Alt-]进行旋转。通常,你会做出一条不错的笔画,但比例或位置不对——此时可以将其变换为合适的尺寸,而不是删除。即使看起来已经可以接受,调整角色的四肢或面部特征有时也能让它比你想象的更具表现力(图 23-5)。

图 23-5:调整绘图的部分

你不限于只使用一个描线图层。随时可以隐藏之前的草图图层,锁定并淡化当前图层,将其作为新的草图,再在上方创建一个新的描线图层。每次这样的过渡,绘图通常会看起来越来越不像铅笔草图,而更像是带有平滑笔画和精致细节的墨线画。图 23-6 展示了我在前一层草图上进行的第三次描线尝试;让头部看起来像马而不是像河马尤其困难。

图 23-6:另一个描线图层

23.4 上色与平滑处理

轮廓几乎完成后,开始考虑给图形上色。Inkscape 可以模拟多种不同的上色风格。例如,你可以通过叠加许多随机的书法笔画,并给每一笔涂上不同的颜色和不透明度(使用 Tweak 工具,8.9.1)来模仿一幅画。

我们将尝试一种更简单、更传统的方法:使用平面填充颜色,并叠加一些光照和阴影效果(白色和黑色椭圆,带有椭圆形不透明度渐变,10.1.2)。使用油漆桶工具(14.3)创建内部形状;对其应用一点模糊效果(约 2%),以增加平滑度(图 23-7)。

图 23-7:上色选项

让我们回到轮廓部分(暂时隐藏上色层)。如果你选择图形的一部分(例如一条腿或头部)中的所有笔触,合并它们(Ctrl-+),然后按几次 Ctrl-L,你可以让它变得更加平滑和吸引人。执行这些步骤会融化尖角并焊接接缝,使得整体看起来更加自然和一体化(图 23-8)。另一个有用的技巧是通过按 Alt-) 来加粗所有笔触,然后按 Alt-( 使它们变薄(12.4)。

图 23-8:焊接与融化

路径上的多个内嵌和外扩效果类似于简化。过多的内嵌可能会使路径的某些部分完全消失,但这不一定是坏事——相信整体效果和你的艺术感觉。

23.5 绘制头发

对于许多新手艺术家来说,绘制逼真的头发是很难的。找到规律与混乱、整洁与凌乱之间的平衡是塑造角色印象的关键。在这个马的绘制阶段,尾巴,尤其是鬃毛,并没有给人留下深刻印象。我反复画了它们,但所有尝试都显得太块状或太蓬松(或两者兼有)。最终,我通过在书法笔刷中使用高值的颤动效果(14.2.4),成功画出了不错的波浪形头发(图 23-9)。最大化此参数使得书法笔触更加斑驳且比我手动操作时更加均匀不规则。

图 23-9:让马鬃看起来更逼真

最后的调整是尝试对整个图形进行缩放、旋转和扭曲,这有时可以在不需要太多工作的情况下显著改善效果。

总体而言,结果远超我的预期。我非常确定,如果是用纸上作画,我不可能达到这样的质量水平。当然,你可以使用 Inkscape 绘制其他风格的图形;通过实验来找到最适合你的技巧。我特别喜欢使用 Tremor 值较高的书法笔,它提供了一种几乎“自然媒介”的绘图工具,如图 23-10 所示。

图 23-10:更多的自由手绘示例

第二十五章:教程:技术图纸

你也可以使用 Inkscape 来创建技术图纸。Inkscape 并不是一个 CAD(计算机辅助设计)应用程序,但它非常适合制作中等复杂度的技术图纸。如果你已经知道如何使用 Inkscape,那么使用它进行这种类型的工作是一个合乎逻辑的选择。举个例子,让我们画出一个发动机部件的等角剖面图(图 24-13)。

在 Inkscape 中创建技术图纸的关键在于使用网格(7.2)、对齐(7.3)、数字变换(6.6)和形状,尤其是矩形(11.2)。这些功能使你能够快速且精确地创建复杂部件的 3D 视图,而不必手动进行任何近似或调整。每个对象、控件和节点都会精准地对齐到其确切位置。一旦你掌握了这些技巧,制作这类图纸将变得几乎令人上瘾地容易。

24.1 设置网格

等角投影图像是所有三个坐标轴之间的角度相等(60 度)且比例相同的图像。例如,在等角立方体中,所有可见的边长都相同。

要开始设置网格绘制发动机部件图纸,打开文档属性对话框(7.2.1),选择网格标签,并创建默认的轴测网格,设置 X 和 Z 角度都为 30 度(相对于水平面),如 图 24-1 所示。你可能需要将 Y 轴间距(因为网格是等角的,所以它适用于所有三个坐标轴)设置为图纸中可度量的最小距离。例如,如果你的图纸所有尺寸都是毫米且精确到小数点后一位,设置网格间距为 0.1 毫米,这样你就不需要将任何东西放置在网格线之间。

图 24-1:设置等角网格

你还可以更改主网格线(较深的网格线)的间距;默认情况下,它们每五条常规网格线出现一次。当你缩小时,常规网格线会先消失。

24.2 制作箱体

让我们创建对象的底部框。开启网格(并默认启用对齐网格),使用矩形工具绘制一个矩形——任何矩形。注意,矩形的角会对齐到网格线的交点(留意对齐指示器和提示,7.3.2),但矩形并非等角投影。

要将其倾斜成等角投影,打开变换对话框(Shift-Ctrl-M,6.7),在倾斜标签下,分别设置水平倾斜角度为 60 度,垂直倾斜角度为 30 度。点击应用后,矩形会变换以适应网格;请注意,矩形的调整控件现在也会在等角投影中移动(11.2.1)。现在,你只需将它们对齐到相应的网格交点,如 图 24-2 所示。

图 24-2:创建、倾斜并对齐盒子的顶部

盒子的另外两个侧面更容易创建。对于前面,你只需 30 度的垂直倾斜,水平倾斜设为 0。盒子的左侧只是前面的一份复制(Ctrl-D)并翻转(H)。经过倾斜和翻转后,将三个矩形的角点对齐,形成一个精确、实心、无缝的 6×8×2 的盒子,非常简单。X 和 Z 单位需要是偶数,以便两个网格线交点位于顶部的中心位置(图 24-3)。

图 24-3:创建盒子的前面和左侧

现在你已经有了一个盒子,可以通过复制它的侧面并重新对齐角点到新位置,快速构建复杂的结构。然而,我们不打算这么做;下一步是将盒子的角落圆滑化。

24.3 圆角

要圆滑矩形的角落(11.2.2),抓住一个角上的圆形手柄并沿侧边拖动。在盒子的双倾斜顶部,圆角按预期工作;矩形在其平面内变得圆滑,并具有适当的投影畸变。在按住 Ctrl 拖动其中一个圆角手柄时,将其对齐到最近的交点,以使圆角半径等于一个网格单位。然后,在前面和左侧,将大小调整手柄移动,使每一侧都变窄一个网格单位(图 24-4)。

图 24-4:圆滑盒子顶部角落

为了填补盒子角落的空隙,创建一个垂直的圆柱体,并将副本(或克隆)放置在盒子所有三个可见角落。你还将它用于引擎部件的顶部圆柱体。

要制作一个圆柱体,从椭圆开始,但你甚至不需要椭圆工具来绘制它。相反,只需复制盒子的顶部,并将其调整为一个 2×2 网格单位的等距方块。由于调整大小会保留圆角,每个角的半径为 1 个单位,因此这将生成一个完美的等距椭圆(图 24-5)。

图 24-5:从矩形创建椭圆

要创建一个圆柱体,你可以复制这个椭圆,将其向下移动,并在它们之间绘制一个平的非等距矩形。虽然可行,但这种方法并不“简洁”,因为椭圆的极端没有网格线来对齐矩形的左右边缘。采用这种方法需要关闭对齐,并使用手动微调,这样会不可避免地牺牲速度和精度。让我们尝试另一种方法。

将这个类似椭圆的矩形复制一份并转换为路径(Shift-Ctrl-C),然后切换到节点工具(F2)。你会看到路径上看起来有四个节点——但实际上有八个:每个可见节点实际上是两个节点,由相遇的两个圆角所贡献。为了修复这个问题,逐个框选这些重复的节点(状态栏应显示选中了 2 个节点,共 8 个节点),并点击节点工具控制条上的连接选中的节点按钮。这样做四次,你将得到一个由四个节点构成的路径。

然而,椭圆的左右极端处并没有你需要的节点。选择所有节点(Ctrl-A),然后通过按下插入键(12.5.3)在每两个选中的节点之间插入新节点,如图 24-6 所示。

图 24-6:在椭圆的极端处添加节点

现在,只选择水平极端的两个节点(在图 24-6 中标记为),并复制它们(Shift-D)。通过按住 Shift 键拖动,选择椭圆下半部分的三个节点。抓住与网格线相切的节点(标记为tangent),并按住 Ctrl 拖动它和其余选中的节点向下,直到它们都对齐在比原位置低两个单位的水平面,形成精确的圆柱轮廓。完成后,只需将原始椭圆的副本放回其顶部位置,并绘制一个水平渐变(图 24-7)。

图 24-7:拉伸、着色并封顶圆柱

将圆柱分组,创建三个副本,并将每个副本移到圆角盒子的空隙中。这些圆柱将恰好贴合到它们的位置。为了使盒子看起来更加立体,只需整理 z 轴顺序并匹配颜色,如图 24-8 所示。使用滴管工具(8.8)从平面侧面复制颜色到圆柱上的渐变停靠点(或反之)。

图 24-8:盒子准备好。

24.4 制作顶部圆柱

要创建顶部圆柱,复制一个角落圆柱,并通过按 Ctrl->将其缩放两倍,然后将其对准并放置在盒子中心的顶部。

复制顶部椭圆并将其缩小至原来的 50%(Ctrl-<)。现在,你甚至不需要移动它;它已经精确地位于顶部圆柱孔的位置。你需要做的就是通过添加一个水平线性渐变来让它看起来像是一个孔,方向与圆柱相反。在此过程中,再复制三个孔,将每个孔对齐到基础盒子的四个角落,并再次按 Ctrl-<缩小。它们将成为用于固定细节的螺栓孔,如图 24-9 所示。

图 24-9:添加顶部圆柱和孔洞

24.5 制作切口

现在,物体的完整等距视图已经完成。为了展示一些附加技术,接下来我们创建一个物体的切口,展示两个垂直的截面。

由于你目前所做的所有操作都已对齐网格,因此添加切口形状非常容易。切换到钢笔工具 (14.1.1),然后点击接近正确的网格交点,创建交叉截面的左侧封闭路径。接着,按住 Shift 键,在同一路径上创建第二个子路径,点击右侧的角落 (图 24-10)。

图 24-10:添加切口形状

在技术设计中,切口通常会填充一个象征物体材质的图案。金属使用的是条纹图案,你可以选择一个预设的图案来表示物体是金属的。打开 填充与描边 对话框 (8.2),点击 填充 标签上的 图案 按钮,选择 条纹 1:8 图案。这个图案的问题在于它在透明背景上显示黑色条纹,而你需要的是在白色背景上的黑色条纹。只需要复制该形状,将它涂成白色,并将白色副本移到带条纹形状的下方(z 轴顺序)如图 24-11 所示。

图 24-11:绘制条纹

现在,你需要删除切口前面的物体部分。选择并删除最前面的圆柱体。使用矩形缩放手柄,将盒子的左右两侧收缩,使其对齐到切口的边缘。至于其余物体——盒子的顶部和圆柱体的顶部椭圆——你实际上需要切割它们。

再次使用钢笔工具,按网格绘制一个覆盖你想要切除区域的三角形。通过选择这两个形状并按下 Ctrl-–,将这个三角形从形状中减去,如 图 24-12 所示。

图 24-12:切割不必要的部分

现在,创建切口中可见的孔的内部。复制圆柱形状,缩小它(Ctrl-<),并将其在 z 轴顺序中下降,使它位于切口形状和孔椭圆形状下方。这将成为孔的内表面。使用节点工具,选择并向下拉动该形状的底部节点。接着,复制孔的椭圆,将其向下移动至底边的水平位置,并从内表面形状中减去它。

最后,你需要绘制内表面。选择孔顶部的椭圆并将其复制到剪贴板(Ctrl-C)。然后,选择内表面路径,并将样式粘贴到它上面(Shift-Ctrl-V)。这将把顶部椭圆的反向水平渐变绘制到孔的整个内表面,如 图 24-13 所示。

图 24-13:创建孔的内表面

第二十六章:教程:玫瑰

玫瑰的复杂图像(见色彩图插图中的第 17 图)旨在展示 Inkscape 的多功能性。玫瑰的单一绘图——从照片中描摹出来——在六个不同的方形窗口以及背景中以不同的方式呈现。展示此图像创建过程的单一教程,就像是七个不同的教程,教你如何画一朵玫瑰——或者任何其他东西。

我从一张照片开始,但如果你画得好,完全可以不这么做。你可以在空白画布上随意画任何你喜欢的东西。尽管如此,追踪一张照片本身是一项有用的技术。

转到文件 ▶ 导入(或按 Ctrl-I)导入照片,并根据需要调整其大小和位置。将包含图像的图层重命名为背景。你可能需要多次隐藏和显示照片,当它在单独的图层时,这样做会更容易。减少照片的不透明度并锁定其图层,这样你就不会不小心移动它,是一个好主意。

然后,创建一个名为“ink”的新图层,开始追踪照片中的轮廓和颜色之间的边界(图 25-1)。

图 25-1:导入图像并使用书法笔设置追踪

用于追踪图像的最佳工具取决于图像的性质和你想要的结果。如果你在追踪可以用直线和贝塞尔曲线表示的几何形状,使用钢笔工具。如果你需要更多自由形式和艺术性形状,但又希望最小化路径和节点的数量,那么铅笔工具会是更好的选择。最后,如果你想要一种富有表现力、艺术感的凌乱风格,使用书法笔。我希望我的画作既简洁又富有艺术感和自然感,而且没有理由节省节点的数量,因此我使用了书法笔,如图 25-2 所示。

图 25-2:追踪完成:图层 ink 中有 106 个路径对象

我使用了一支压力感应的平板笔,可以根据按压的力度来改变笔画的宽度。用普通鼠标也可以得到类似的效果。事实上,你甚至可能更喜欢使用鼠标,因为用笔压力来控制笔画粗细,虽然理论上很不错,但需要大量练习,且很少能得到你想要的精确结果。一个更好的方法是用书法笔绘制恒定宽度的线条,然后使用调整工具的缩小/放大模式(12.6.4)在适当的位置使笔画变粗或变细,如图 25-3 所示。

图 25-3:使用调整工具修改绘图

黑白轮廓已经完成,现在让我们给它添加颜色。使用清晰的墨水轮廓,我想要一种柔和的洗涤色调。为此,隐藏背景层,创建一个名为水彩的新层,并将其放置在墨水层下方。接下来,使用宽大的书法笔刷,做几笔狂野的涂抹:玫瑰下方涂红色,茎和叶下方涂绿色,周围则涂上各种蓝色的色调。最后,通过足够大的半径模糊这些笔触,使它们几乎融合在一起(图 25-4)。

图 25-4:添加模糊背景

这看起来已经不错,但还不够好。平滑的模糊斑点 平滑——坦率来说,挺无聊的。为了让它们看起来更自然,我通过增加更多原始元素来扩展应用于背景的简单高斯模糊滤镜。首先,我加入了一个湍流原语,并与模糊效果合成,模拟纸张纹理。这样看起来更好,但仍然太单一——看起来像是计算机生成的。我接着加入了另一个具有更大周期的湍流组件,并使用了两次:第一次通过位移图(Displacement Map),使整体水彩效果更加斑驳不均;第二次通过合成操作符(Composite operator),调节小尺度的纸张纹理,更加真实地模拟纸张,其中有些区域更平滑,有些则更粗糙,如图 25-5 所示。

图 25-5:为背景构建“逼真水彩”滤镜

最终的合成滤镜,我称之为 Sandy Blur(更多细节请参见 17.5.2),看起来更加逼真,但渲染速度较慢。我不得不切换到无滤镜模式(17.5.4),以便在没有烦人的渲染延迟的情况下工作。

最后的点缀,你可以复制墨水层的内容并将其模糊,以形成阴影,或者(如我所做的)通过偏移(加粗)墨水路径的副本并使其半透明,稍微软化墨水线条。玫瑰图的背景已经完成。

25.1 处理效果 1:雕刻

完成了墨水和水彩层后,我继续创建一系列的处理效果——展示如何用不同的方式渲染同一幅图像。我将玫瑰覆盖上六个随机散布的方块,并将每个处理效果限制在一个方块内。

第一个版本是由弯曲的变宽笔触组成的雕刻效果。在这个处理效果中,我选择了玫瑰花瓣弯曲和阴影特别深的区域。雕刻是一门复杂的艺术;我并不认为我的尝试很完美,但我对使用 Inkscape 工具制作它的简便性感到惊讶。

当你有了轮廓并想将其转变为雕刻时,第一步是规划。考虑每个部分中雕刻线条最自然的方向。创建一个新图层,使用书法笔绘制几条间隔较大的测试笔画,尝试捕捉每个区域的曲率变化,同时保持最佳的方向对比,特别是在不同曲率区域的边界处相遇的位置(图 25-6)。

图 25-6:选择雕刻区域并进行测试笔画

一旦你有了如何让雕刻笔画进行的想法,将测试笔画移到一旁(但保留它们作为参考),并使用书法笔的导向跟踪功能(14.2.7)来填充每个区域,使用均匀间距的统一宽度笔画(图 25-7)。

图 25-7:使用书法笔创建均匀间距的格子

不必担心你的笔画方向或曲率稍有偏离;你稍后可以修正这个问题。此时更重要的是间距的一致性。你可以旋转画布(Ctrl-Shift-滚轮),使笔画更加顺畅。绘制超出你正在填充的区域的边界;修剪过长的笔画要比延长过短的笔画容易得多。

你将使用调节工具完成剩下的工作(图 25-8)。

图 25-8:使用调节工具完成雕刻

使用收缩模式修剪线条的端点并使其变细,使用扩展模式加粗,使用推送模式移动并弯曲整个格子(选择所有格子笔画一起弯曲)。不要担心修剪的笔画末端的不雅外观。在最终结果中,墨水层的宽边界笔画会覆盖它们。

25.2 处理 2:镶嵌

这个处理非常容易,因为它大多是自动化的。唯一棘手的部分是创建镶嵌图案本身——即一组复杂的互锁瓷砖,覆盖整个平面,没有空隙或重叠。

画一个形状——任何形状——并从中创建一个瓷砖克隆的图案(编辑 ▶ 克隆 ▶ 创建瓷砖克隆,16.6),使用任何非平凡的对称群;我使用了 P3。一开始,克隆并没有形成任何类型的镶嵌图案;你的任务是重新塑造源形状——克隆已经到位——直到克隆相遇并平滑地相互锁定。这一步比看起来要简单得多。由于克隆会立即反映源形状的任何变化,这项任务几乎变得微不足道。只需添加节点并将其移动,以便为你的形状增添附加部分或制造凹陷。每个克隆都会镜像这些变化。继续雕刻形状,直到克隆精确地互锁并覆盖整个平面,如图 25-9 所示。

图 25-9:创建镶嵌

现在,让我们让图案反射背景颜色,使玫瑰图案显示出来。一旦设置好,过程大部分是自动化的。确保使用保存的图案大小和位置复选框已选中,删除现有的平铺(移除按钮),并设置图案的宽度高度,以覆盖你想要覆盖的所有区域。取消原始形状的填充色(右键点击状态栏中的填充:色板并选择取消设置)。然后,进入跟踪标签,启用跟踪图案下的绘图,选择颜色,并将选定的值应用到克隆体的颜色中(图 25-10)。

图 25-10:颜色跟踪与拼贴

最后,使用滤镜为平铺图案添加轻微的光泽高光(第十七章)。其中一个问题是,光泽滤镜不是对称的——它有一个特殊的方向,光线从该方向投射。然而,如果你对旋转过的克隆体应用这样的滤镜,滤镜将与克隆体一起旋转,所有高光将显示为从不同的方向照射而来。为了解决这个问题,只需将所有平铺克隆体组合(Ctrl-G),并将按钮滤镜从滤镜 ▶ 凸面应用到组合体中,如图 25-11 所示。

图 25-11:添加高光

25.3 处理方法 3:立方体场

与颜色跟踪拼贴一样,这种处理方法也使用了创建平铺克隆的对话框。然而,在其他方面,这种设计完全相反。它是随机的而非规则的,伪 3D 而非平面的,并且使用了三个不同的原始物体——因此有三个交织的图案——而不是单一的一个。

首先使用 3D Box 工具绘制一个立方体。将其转换为路径组(Shift-Ctrl-C)并复制(Ctrl-D)。在其中一个立方体副本中,进入该组,选择六个面并将它们联合(Ctrl-+),然后取消组合。这将一个立方体变为一个单一的立方体形状路径。取消其填充色——在克隆体中,这个副本将采用背景色。对于第二个立方体副本,使用 50%不透明度,并且在每个面上使用白色或黑色,且不进行联合。你还可以在立方体的前角添加一个具有从白色到透明的椭圆渐变的椭圆作为高光(图 25-12,左)。这就是阴影层,它使每个立方体看起来像一个立方体,尽管整体颜色发生了变化。

最后,将阴影立方体精确地放置在背景形状的正上方,并将它们组合在一起。这就是你的可克隆物体,它既可以通过未填充的形状选择背景色,也可以通过半透明的覆盖层呈现伪 3D 效果。对于另外两个不同方向的立方体,重复所有这些步骤,这样总共有三个立方体(图 25-12,右)。

图 25-12:立方体散布的原始物体

现在,选择一个准备好的立方体,并在你想要覆盖的区域上创建一个 P1 对称散射,使用“创建平铺克隆”对话框中的颜色到颜色追踪(16.6.6)。随机化它们的旋转(稍微旋转,以免破坏所有立方体处于相同透视中的视觉效果)、大小和位置。为了模仿 3D 场景的效果,将缩放和行间距设置为从上到下逐行增加,如图 25-13 所示。

图 25-13:散布立方体

对你准备的另外两个立方体重复此过程,覆盖相同的区域。这个结合的立方体场景还看起来不像一个场景,因为 z 轴排序错误。那些靠近底部且较大的立方体应该更靠近我们,因此应位于其他立方体之上,但它们并没有。为了修正这个问题,使用Restack扩展(在扩展 ▶ 排列中)对立方体的 z 轴排序进行调整,使它们从上到下堆叠。然后,从对齐与分布对话框中执行一次去聚集操作,以减少立方体排列中的间隙(图 25-14)。

图 25-14:立方体的场景:z 轴排序和去聚集

目标是复制玫瑰背景图层的方形区域。然而,如果你对覆盖目标区域的所有三种图案使用自动的颜色到颜色背景追踪(如 16.6.6 中所做的那样),你可能会发现追踪后的颜色相当单调。这是因为每个立方体从它所覆盖的相对较大区域采样颜色,并对其进行平均,结果使其颜色比原始背景图像的饱和度低。此外,每个立方体中的 3D 阴影叠加会冲淡背景形状的颜色。

为了修正这个问题,你可以像图 25-15 中所示那样手动涂绘立方体。

图 25-15:在立方体上涂绘颜色

只需选择所有立方体克隆,选择 Tweak 工具的颜色绘画模式(8.9),选择鲜红色(或使用滴管工具从背景图像中选择它,8.8),然后在图像的红色区域上进行涂绘。然后,对其他彩色区域(包括黑色墨线)做同样的操作。(如果没有效果,可能是你忘记取消每个立方体底部路径中的填充,参见图 25-12。)这种彻底的位图式涂绘是一种有趣的方式来编辑矢量图!

最后,将所有立方体分组,并将组裁剪到所选择的方形区域(18.3)。

25.4 处理 4:逼真绘图

这种摄影现实主义的表现是所有部分中最耗时的。我希望在这部分的绘画中尽可能地重现原始照片。绝对的摄影现实主义,当然既不可能也不理想,但你可以追求那种具有独特吸引力的“矢量摄影现实主义”外观。关键在于巧妙地运用形状、渐变和模糊效果。

首先,定位你将要工作的区域,并显示(但保持锁定)包含源照片的图层。从划分你的绘图区域开始,每个区域通过平面颜色或单一渐变来大致表示。使用铅笔工具(14.1.2)创建这些区域,使用渐变工具(10.1)在这些区域上绘制并拉伸渐变,如图 25-16 所示。使用吸管工具(8.8)从照片图层中选取精确的颜色。

图 25-16:使用带渐变的路径近似图像区域

为了柔化边缘,使用填充和描边对话框将形状稍微模糊(不超过 2%)。为了添加一些自然的纹理,在形状上绘制一个 40% 灰色、10% 不透明度的矩形,并对其应用滤镜 ▶ 覆盖层 ▶ 小斑点。在滤镜编辑器对话框中,增加随机纹理的频率(在湍流原语中的基础频率),如图 25-17 所示。

图 25-17:模糊和加纹理的背景

目前的效果仅仅是一层粗略的背景涂料,你将在其上覆盖细节——重现玫瑰花瓣的典型皱纹和质感。你将主要使用相对较小宽度、零固定和一定震颤的书法笔(14.2)。通常你会使用半透明的黑色或白色来绘制阴影或高光,分别对应不同的效果。你也可以尝试使用略微饱和的互补色版本(例如,红色区域使用淡绿色),这常常能让你的绘画看起来更自然——在现实生活中,颜色的色调从来不会完全均匀。

当然,你还需要对这些半透明的笔触进行模糊处理。不要对每一笔单独应用模糊——这样做会很麻烦(与不透明度不同,模糊效果不会保留在工具样式中,因此不会自动应用到下一个创建的对象)并且渲染速度较慢。相反,绘制一笔单独的笔触,将其分组(Ctrl-G),对整个组应用模糊,然后进入该组(Ctrl-Enter)。现在,使用书法笔或任何其他工具创建的每个新对象都会被添加到模糊的组中,并与同组的其他对象一起被模糊处理(图 25-18)。绘制完组内的内容后,按 Ctrl-Backspace 退出该组。

图 25-18:添加手绘前景笔触

在绘图时,特别注意物体的边缘——通过密集的高光和阴影来适当强调边缘,是获得吸引人的“绘画风格”外观的关键。将高光和阴影的边缘稍微加重通常效果不错。

25.5 处理方法 5:地图

地图处理法并非一种实用的技术示例,而是对某些简单直白内容的创意再创作。当时我只是玩弄原始照片的这一部分,使用了一个八色的 Potrace 路径追踪(路径 ▶ 跟踪位图,18.5.2),当我丢弃填充颜色并为结果形状指定虚线轮廓时,我注意到它获得了一种有趣的类似地图的外观,如图 25-19 所示。

图 25-19:追踪源照片

为了模仿旧地图的表面,我创建了一个黄色、略微粗糙(滤镜 ▶ 扭曲 ▶ 粗糙化)、半透明的背景矩形(以便背景的绘图能稍微透过来)。然后,我添加了一些神秘的文字标签来完善图像。

25.6 处理方法 6:修饰过的照片

对于修饰过的照片处理,我想展示 Inkscape 作为使位图更美观的工具,而非作为矢量编辑器。当然,“更美观”是一个主观的词汇,但你可以在 Inkscape 中进行一些简单的编辑,改善几乎任何照片的外观。彩色插图中的图 18 展示了原始玫瑰照片的一部分,亮度增加、阴影加深、高光添加,纹理得到强调。

作为对合成玫瑰图像的最后修饰,我为包含各种处理的六个方框添加了虚线框架。彩色插图中的图 17 展示了完整的图像。

每当我将照片导入 Inkscape 时,我通常会进行以下一项或多项更改:

  • 我应用滤镜 ▶ 色彩 ▶ 明度-对比度来扩展照片的动态范围。在像 Photoshop 或 GIMP 这样的位图编辑器中,我会使用 Levels 命令来完成此操作,但在 Inkscape 中,明度-对比度滤镜是最接近的近似方法。其原理是拉开照片中所有颜色的差距,使得最暗的区域变得极暗(即黑色),最亮的区域变得极亮(即白色)。如果操作得当,图像细节不会丢失,但照片的视觉效果通常会显著改善。我通常会在明度-对比度对话框中启用实时预览复选框,并调整两个值,尽量在不丢失阴影或高光的情况下进行对比。

  • 明暗对比度范围扩展适用于整个图像,通常我可以发现某些区域会从手动提亮或加深中受益。我最喜欢的做法是创建一个白色圆形(11.4),用白色到透明的椭圆渐变填充它(10.1),并为其指定叠加(Overlay)混合模式(17.2)。我将其复制并移动到需要高光的位置,根据需要调整大小;如果某个高光过于强烈,我会降低其不透明度。为了强调黑色细节,我会用黑色而不是白色创建类似的着色对象。有时,我还会使用其他颜色的高光来增加色彩点缀。这就是我在彩色插图中的图 18(底部)上所做的,以使花瓣的阴影更加生动;叠加层的范围通过黑白轮廓显示出来。

  • 几乎总是,设计组合中的图像需要调整其饱和度。有些图像——比如我们的玫瑰——在高饱和度下效果最好。然而,大多数情况下,照片可能会受益于完全或部分去饱和。为此,我使用“滤镜 ▶ 颜色 ▶ 色彩偏移”滤镜,该滤镜具有色调和饱和度两个滑块。

  • 我经常通过使用“滤镜 ▶ 图像效果 ▶ 锐化”或“锐化更多”滤镜来改善低分辨率的照片。

第二十七章:教程:游戏的艺术创作

针对各种硬件的游戏——桌面电脑、游戏主机、移动设备——是一个庞大、不断增长并且对图形需求极高的行业。如今,许多游戏图形是 3D 的,但传统的 2D 图形编辑器,如 Inkscape,依然有大量的工作需求——即使只是作为 3D 世界中图形资产的创作者。在本教程中,我展示了 Inkscape 如何成为游戏开发者的瑞士军刀。

本教程中的示例来自我和我的家人共同为 Android 移动设备开发的两款游戏。它们是简单的 2D 游戏,具有基于物理模拟(使用 Box2D 库)的街机类玩法。开发一款游戏是一个复杂的过程,涉及设计、编程、艺术创作、音乐制作,然后是看似无尽的测试、调整和修复——更不用说市场营销和推广了。我们使用了许多不同的工具和资源来创建我们的游戏。然而,我会将 Inkscape 排在列表的顶部,仅次于 Google 的 Android Studio IDE。本教程是几个小项目的集合,演示了 Inkscape 在各种游戏开发任务中的应用。

26.1 BotP:冰场

我们开发的其中一款游戏叫做 Battle of the PucksBotP,可通过 kirsanov.com/battle-of-the-pucks/ 访问),游戏中有两个冰球队伍,玩家通过滑动手指来推动冰球,目标是将对方的冰球推入冰场边缘之外的空地。

创建冰场图像是一个挑战,因为它必须给人一种真实冰面的印象,包括冰面的凹痕、刮痕和滑冰痕迹。图 26-1 展示了我们如何使用多个半透明路径和 Roughen 路径效果来实现这一点。最终的图像导出为 PNG 并作为图形资产加载到游戏中。

图 26-1:制作逼真的冰面

26.2 BotP:Inkscape 作为关卡编辑器

Battle of the Pucks 具有多个关卡,每个关卡中冰球的初始位置不同(在高级关卡中,还会有各种障碍物)。我可以通过代码来定义这些关卡,但由于关卡超过 90 个,这样做会非常繁琐。通常,当你拥有视觉信息时,应该使用视觉工具来处理它,即使这意味着前期需要做一些额外的投资。这就是我们决定使用 Inkscape 作为我们游戏关卡编辑器的原因。

任何有关关卡的游戏都需要某种关卡编辑器,对于复杂的游戏项目,它可能是与游戏本身并行开发的定制软件。对于相对简单的游戏,如BotP,使用 Inkscape 完成此任务是非常合适的。关卡以图像形式绘制,每个图像位于独立的图层上,并保存为 SVG 文件。游戏代码加载并解析 SVG 文件,找到当前图层元素,并读取其子元素以在每个关卡开始时放置冰球和障碍物。

正如你所预料的那样,这个看似简单的创意并不完全容易实现。我们为游戏使用的 Java 库有一个 XML 解析器,但它并没有处理诸如变换等 SVG 特定数据的功能(A.7)。因此,在创建和编辑游戏的 levels.svg 文件时,我们不得不遵守一些限制。

26.2.1 冰球

游戏中的冰球可以有不同的尺寸,但它们都是圆形的,因此在 levels.svg 中,它们由 Ellipse 工具创建的 circle 元素表示(11.4)。我们必须小心保持圆形的圆形。如果你不小心挤压或拉伸一个圆形,Inkscape 会将其转换为 SVG 中的 ellipse 元素;如果你触碰到该形状的圆弧/线段控制点(11.4.2),它会变成路径。这两种变化都会破坏我们游戏的解析代码,该代码只识别 circle 元素,并利用其 cxcy 属性来放置冰球,r 属性来确定其大小(和质量)。圆形的白色或黑色(从其 style 属性解析出)决定了该冰球属于哪条命令(图 26-2)。

图 26-2:一个名为“沙漏”的 BotP 关卡:两支冰球队准备战斗。

当在 Inkscape 中移动冰球圆形时,确保圆形元素不会获得 transform 属性非常重要。在“首选项”中的“行为 ▶ 变换”页面上,必须将“存储变换”设置为“优化”。现在,当你移动圆形时,Inkscape 会更新其 cxcy 属性,而不会创建 transform 属性。然而,这种方法有一些不明显的限制:当你旋转或翻转圆形时,即使在优化变换下,它仍然会获得 transform。我们了解到,我们需要在不翻转的情况下安排我们的冰球队伍,只通过移动或缩放来实现。

26.2.2 障碍物

高级游戏关卡包含障碍物——反射冰球的墙壁——使得游戏玩法更加有趣,且往往相当具有挑战性。在 levels.svg 中,障碍物表示为具有红色轮廓的 path 元素。游戏代码可以解析该元素中的路径数据,并将其重新创建为游戏中的对象,但它有一个限制:只能将障碍物创建为线性片段。为了创建曲线形障碍物,我们必须使用短的线段来近似它们,使用“扩展 ▶ 修改路径 ▶ 扁平化贝塞尔曲线”扩展,如图 26-3 所示。

图 26-3:一个名为“麦片碗”的 BotP 关卡,其中每侧的四个冰球背靠碗形墙壁。

图 26-4 显示了该关卡的渲染方式。

图 26-4:实际游戏中的“麦片碗”关卡

当游戏代码读取 SVG 文件时,它会从d属性中提取路径点的坐标。这些数据由一系列单字符命令(例如,l表示线性段,c表示贝塞尔曲线)和紧随其后的数字坐标组成。通常,路径数据中的坐标是相对的;每对坐标表示相对于前一个点的位移。在我们的游戏代码中,我们发现处理绝对坐标要简单得多。为此,在偏好设置对话框的输入/输出 ▶ SVG 输出页面,我们将路径字符串格式切换为绝对格式。路径命令的绝对变体使用大写字母,因此更改后,您将在路径的d属性中看到LC等。

26.2.3 文件缩小

移动应用程序对文件大小非常敏感,因此在将 levels.svg 包含到游戏资源中之前,我们尽力将其大小尽可能缩小。Inkscape 提供了几种现成的方法来实现这一点。

  • 偏好设置对话框的输入/输出 ▶ SVG 输出页面有多个选项,可以使保存的 SVG 文件更小:内联属性(即将每个元素的所有属性放在同一行)、缩进空格的数量以及数值的精度(数字位数)。这会影响从 Inkscape 保存的所有 SVG 文件。

  • 您可以在保存、另存为或保存副本对话框中选择的优化 SVG 输出文件类型可以执行一些额外的优化。它可以通过将数值四舍五入到指定的数字位数来缩小数值数据,缩短颜色值,将 CSS 属性转换为 XML 属性,删除不必要的分组,删除注释和元数据,删除未使用的 ID,嵌入栅格图像,以及美化打印 SVG。

然而,对我们来说,这还不够。我们编写了自己的 Python 脚本,删除了 SVG 文件中的注释、不必要的命名空间、属性和样式属性。这个脚本还会在所有防范措施都到位的情况下,如果一些圆形有transform属性或一些路径数据(d属性)使用小写命令(相对坐标)而不是大写命令(绝对坐标)时发出警告。

26.3 BotP:冰球

BotP中的冰球可以有不同的颜色,这取决于它们所属的队伍以及选择的颜色主题。因此,游戏中的每个冰球对象由三层图像组成:底部的环形阴影、一个彩色圆形,然后是一个半透明的覆盖层,增加了圆形的边缘以及一些光线色彩的高光和划痕,以增加真实感(图 26-5)。

图 26-5:冰球的结构以及它在游戏中的样子

有趣的是,尽管顶部的边缘有假定的光照方向(来自左上方),但在游戏中,冰球—包括覆盖层—自由旋转,但这种旋转从未产生误打阴影的印象。

26.4 BotP:溅射动画

作为对冰面和冰球的真实风格的有意对比,闪屏动画(在游戏加载时播放)和主菜单采用了自由手绘、凌乱、颤抖的动画风格。制作这种动画的秘诀很简单:从头开始重新绘制每一帧,包括那些在每帧之间没有真正移动的部分。我们使用了带有颤动和/或抖动效果的书法笔(14.2),并尽量避免太整齐或过于拘泥于指导方针。

图 26-6 显示了BotP的闪屏动画的 10 帧,特点是一个拟人化的冰球在冰面上狂奔。虽然这些图像单独看起来似乎只是画得很糟且随意,但当它们快速连续展示时,它们融合成了一个栩栩如生、甚至具有共鸣的角色。

图 26-6:动画闪屏图像的帧

26.5 Batonic:一个标志性角色

我们制作的另一个游戏叫做Batonickirsanov.com/batonic/)。这个游戏有趣的地方在于主角的设计,既是游戏的图标,也是本书封面上的设计。

图 26-7 显示了将其切割成组成的分层物体后是什么样子。我们将信封变形路径效果应用于矩形条纹的路径,创造了条纹背带裤的效果,然后通过复制的蓝色服装路径进行裁切。

图 26-7:巴贝尔先生的分层

在游戏中,这位名叫巴贝尔先生的有趣绅士,会在你用手指尖平衡一个马戏棒时,召唤出一整支从天而降的巴贝尔军团。这里,每个角色的形象被分离成身体、眼睛、手臂和腿部,并通过动画使巴贝尔们栩栩如生,如图 26-8 所示。

图 26-8:Batonic:巴贝尔们攻击你的马戏棒。

第二十八章:A

SVG 入门

本附录是对 SVG 工作原理及其在 Inkscape 中实现的一个非常高层次的概览。如果你想要最终的、完整的、权威的 SVG 参考,请参阅 W3C 的 SVG 规范,w3.org/Graphics/SVG/。截至本文撰写时,SVG 2.0 仍处于草案阶段;Inkscape 支持最新发布的标准版本 1.1,你可以在 w3.org/TR/SVG11/ 找到它。

对于掌握 Inkscape,了解 SVG 和更广泛的 XML(SVG 基于 XML)知识并非严格必要——但它会有所帮助。它将使你能够深入了解 Inkscape 绘图的内部结构,并且它通常能揭示一些 Inkscape 功能(或缺乏功能)的真正原因。让我们从一个简短的 XML 介绍开始,这对于许多场合都很有用,即便这些场合与 Inkscape 或 SVG 无关。

A.1 简短的 XML 介绍

如果你曾经查看过网页的源代码,你已经知道 XML 看起来是什么样子,因为 XHTML,今天在网页上使用的标记语言,是 XML 的一种亚种——更准确地说,是XML 词汇。SVG 也是这样的一个词汇。

XML 是一种标准化的方式,用于以纯文本记录结构化信息。它便于计算机解析,而且对人类来说也相当容易理解。与大多数计算机相关概念通常复杂得让你以为它们比你想象的更复杂不同,XML 简单到几乎令人难以置信。

XML 文档的基本构建块是元素。下面是一个包含文本的元素示例:

<example>Here goes some text.</example>

元素内的文本称为其内容,这些内容由标签限定。所有位于小于号(<)和大于号(>)之间的部分都是标签。在这里,开始标签和结束标签几乎是相同的,唯一不同的是结束标签的元素名称前有一个斜杠(/),在这个例子中,元素名称是 example

一个元素可能完全没有内容:

<example></example>

或者

<example/>

这两个空元素是等价的;第二个元素由一个单一标签组成,它只是第一个元素的一种拼写变体。注意在单标签空元素中斜杠(/)的位置不同。

除了文本外,元素还可以包含其他元素,但这些元素必须完全位于包含元素内。例如,下面这是错误的:

<a><b></a></b>

因为元素 ba 内部开始,但在外部结束。如果一个元素从另一个元素内部开始,它也必须在该元素内结束。下面是正确的 XML 示例:

<a><b/><c/><d><e/></d></a>

我们说 abcd父元素,而 de 的父元素。一个元素可以有多个子元素,但它只有一个父元素(除了文档的根元素,它没有父元素)。图 A-1 是这个 XML 片段的图示表示。

图 A-1:表示 XML 代码的树形图

除了子元素,XML 元素还可以拥有 属性。每个属性都有一个名称及其关联的值。属性在元素的开始标签中指定:

<text type="important" font-size="10">Here is some text.</text>

请注意等号(=)和属性值周围的双引号。两者都是必需的。

整个 XML 文档就是一个单一的元素(称为根元素),可能包含一些文本内容和子元素——这些子元素又可以包含更多的内容和更多的子元素,依此类推。因此,XML 文档可以被看作是一棵从单一根元素生长出来的树。例如,以下是一个完整且有效的 SVG 文档,其根元素 svg 包含了两个元素,分别表示一个矩形和一段文本字符串:

<svg> <rect x="100" y="100" width="300" height="50" fill="blue"/> <text x="100" y="150">This is a text string.</text>
</svg>

A.2 词汇和命名空间

XML 本身只是一个基础——你可以在这个基础上构建许多不同的应用。你无法想象在 XML 出现之前,有多少工作时间被浪费在为每个应用发明新数据格式、制定规则、编写和测试支持软件,以及处理不可避免的错误、异常和版本不兼容上。

如今,如果你需要记录一些数据,你不再需要进入那些字符具有特殊含义以及各种字段大小的低级细节。通过选择 XML(你必须有非常充分的理由选择它),你可以专注于真正重要的内容:数据的结构,以及如何命名元素和属性,以最佳方式表达该结构。

此外,你甚至可能不需要这样做,因为针对你的数据类型,可能已经存在一个通用的标准化 XML 词汇。每个词汇定义了一组元素和属性,详细说明了它们的含义、使用的上下文、哪些是强制的、哪些是可选的,等等。SVG 就是这样一个词汇,XHTML 是另一个。许多不同的标准化 XML 词汇存在,涉及从狗的家谱到星星目录等许多奇异事物。它们中的许多重用了其他词汇的部分内容。

为了能够无混淆地混合不同的词汇,XML 使用命名空间。命名空间是一种指示特定元素或属性来源的方法。例如,下面是一个来自 SVG 词汇的 image 元素,表示一个位图图像链接,嵌入在 SVG 文档中:

<svg:image xlink:href="/dir/file.png" width="200" height="100"/>

请注意,元素名称和其中一个属性使用了冒号(:)。冒号前的部分称为命名空间前缀。要找出哪个命名空间对应于该前缀,请查找形式为特殊 xmlns 前缀的命名空间声明属性(xmlnsXML NameSpace 的缩写),该声明位于同一元素或其任何祖先元素中。

通常将所有命名空间声明属性放在根元素上,因此你很可能会在根 svg 元素中找到 svgxlink 前缀的声明:

<svg:svg ... xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ... >

这意味着svg前缀绑定到命名空间http://www.w3.org/2000/svg,而xlink前缀对应于http://www.w3.org/1999/xlink。在这里,命名空间是网址,但它们不一定需要是网址;唯一的要求是它们必须是全局唯一的,而网址是确保这一点的最简单方式。

SVG 的命名空间 URLhttp://www.w3.org/2000/svg必须与显示的完全一致。如果您的 SVG 文档中元素的命名空间前缀无法解析为http://www.w3.org/2000/svg,Inkscape(或任何其他 SVG 软件)将无法将该文档识别为 SVG。然而,命名空间前缀可以是任意的,只要它绑定到正确的命名空间。如果您这样声明,前缀甚至可以为空:

<svg ... xmlns="http://www.w3.org/2000/svg" ... >

在带有该声明的元素内,任何没有前缀的元素名称都被假定为属于 SVG 命名空间。例如,以下将被识别为有效的 SVG image元素,它链接到一个外部 PNG 格式的图像文件:

<image xlink:href="/dir/portrait.png" width="200" height="100"/>

命名空间错误,比如没有为前缀声明命名空间或命名空间 URL 错误,是手动编辑 SVG 时最常见的问题——要小心这些错误!

A.3 根元素

这是一个典型的 Inkscape SVG 文档的根svg元素,包含一堆命名空间声明和其他属性:

<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="385.6" height="210" id="svg2" sodipodi:version="0.32" inkscape:version="1.0 (4035a4fb49, 2020-05-01)" version="1.1" sodipodi:docid="file.svg"
>

SVG 使用 SVG 命名空间(http://www.w3.org/2000/svg)来表示其自身的元素,使用 XLink 命名空间(http://www.w3.org/1999/xlink)来表示链接属性(A.9)。此外,Inkscape 在属于 Inkscape(http://www.inkscape.org/namespaces/inkscape)和其前身 Sodipodi(http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd)的命名空间中添加了元素和属性(请参阅 1.6 了解 Inkscape 的简短历史)。此处声明的其他命名空间用于元数据元素(有关文档的一般信息)和许可证标识符(A.4)。

在这个示例的根元素中,SVG 标准中定义的唯一属性是widthheight(定义画布的大小),idversion。其余的要么是命名空间声明,要么是 Inkscape/Sodipodi 命名空间中的属性。

inkscape:version指定了创建此文档时 Inkscape 的版本,在本例中为 1.0(括号中有构建号和日期)。它还声明该文档可以与 Sodipodi 的版本 0.32 一起使用(sodipodi:version="0.32"),因为从那个版本开始,Inkscape 从 Sodipodi 中分支出来。没有命名空间的version属性指的是此文档所实现的 SVG 规范的版本,1.1。

当你保存文档时,可以选择 Inkscape SVG 格式或 Plain SVG 格式;它们的唯一区别在于 Plain SVG 会去除 Inkscape 和 Sodipodi 命名空间中的所有元素和属性,仅保留标准命名空间。通常,Inkscape 特定的元素或属性不能改变文档的外观;它们只能影响文档在 Inkscape 中编辑时的行为(例如,g 元素上的一个属性可能会告诉 Inkscape 将该元素视为 3D 方框,而不是简单的组;请参见 11.3)。因此,将文件保存为 Plain SVG 会使文件稍微变小,但代价是失去了一些 Inkscape 可编辑性。如果你发现文件在保存为 Plain SVG 后呈现不同的效果,那说明你遇到了一个 bug——请报告给开发者!

A.4 Defs、视图和元数据

让我们从典型 Inkscape SVG 文档的根元素开始,看看里面还包含了什么。

首先是 defs 元素。defs 是 SVG 标准的一部分,它是一个存储区,用来存放那些本身不会显示在画布上的元素,但其他元素可以引用它们。这些包括渐变、图案、标记(箭头,9.5)、剪切路径、蒙版、滤镜等等,它们都作为 defs 元素的子元素存储。SVG 规范允许你将多个 defs 元素几乎放置在文档中的任何位置,但 Inkscape 总是使用一个位于根 svg 元素下的单一 defs 元素。下面是一个包含渐变的 defs 元素示例:

<defs id="defs4"> <linearGradient inkscape:collect="always" id="linearGradient2798"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop2800"/> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop2802"/> </linearGradient>
</defs>

linearGradient 元素添加到 defs 中本身并不会改变画布上的任何内容。不过,现在任何对象都可以引用(10.2.1)这个渐变,用来填充或描边。

即使没有任何可见元素使用,defs 中的大部分内容也会被保留。例外情况是具有 inkscape:collect="always" 属性的元素;这些元素在不再使用时会自动删除。Inkscape 通常使用这个标志来标记它自己创建的各种辅助元素,并可以安全地删除它们;它绝不会删除你创建的或明确添加的任何内容,除非获得你的许可。通过这种方式,你可以重新使用曾经定义但后来不再使用的元素。

因此,随着你在文档中工作的进行,defs 可能会变得越来越大。要移除 defs 中任何未使用的定义,请使用文件 ▶ 清理文档命令。有时,这个命令可能在第一次尝试时无法删除defs所有未使用的内容;你可能需要退出文档,重新加载后再次清理。

在 Inkscape SVG 文档的根元素下,紧接着的元素是 sodipodi:namedview

<sodipodi:namedview inkscape:window-height="950" inkscape:window-width="1280" inkscape:window-x="0" inkscape:window-y="24" inkscape:pageshadow="2" inkscape:pageopacity="0.0" bordercolor="#666666" pagecolor="#ffffff" inkscape:zoom="0.64306408" inkscape:cx="836.6226" inkscape:cy="619.40089" inkscape:current-layer="layer2" showguides="true" />

这个 Inkscape 特定的元素在其属性中保存了所有与该文档相关的选项:Inkscape 在加载文档时将使用的缩放级别和滚动位置,画布的旋转角度,网格的颜色和间距,各种吸附模式,当前图层,文档单位等。在 Inkscape 中,您可以通过文件 ▶ 文档属性对话框 (3.1.2) 设置其中大多数选项。

最后,metadata 元素出现在文档内容实际开始之前。它存储有关文档的作者、目的、日期、许可证等信息,并对应于 Inkscape 中的文件 ▶ 文档元数据对话框。metadata 内的元素使用 RDF 标准(请参见 w3.org/RDF/),可能会使用额外的 XML 命名空间来描述不同种类的信息。

A.5 图层和分组

metadata 元素之后,SVG 文档的实际可视内容开始。自然地,每个文档的对象都对应一个 SVG 元素。此外,文件中元素的顺序对应于对象在画布上视觉堆叠的顺序(4.4):文件末尾的元素绘制在文件开头的元素之上。

当你将对象组合在一起时(4.8),它们被放置在一个g 元素中。例如,这里有一个包含矩形和文本对象的分组:

<g id="g2893"> <rect id="rect2310" y="350" x="100" width="300" height="150" style="opacity:1;fill:#ff0000;stroke:#000000;stroke-width:1px;" /> <text id="text2889" y="400" x="200" style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000; stroke:none;font-family:Bitstream Vera Sans" xml:space="preserve">Text in rectangle</text>
</g>

除了分组,另一种组织对象的方式是通过图层 (4.9)。SVG 没有专门用于图层的元素类型;相反,Inkscape 使用一个 SVG g 元素,添加了一个自定义属性,使其在编辑文件时知道将该分组视为图层。

<g inkscape:groupmode="layer" inkscape:label="Layer 1" id="layer1"> ...contents of the layer...
</g>

由于图层因此是一种特定类型的分组,便于看到 Inkscape 如何“进入一个分组”,暂时将其视为图层(4.9.1)。这也是为什么在将 Inkscape 的 SVG 文件导入到其他矢量编辑器(如 Adobe Illustrator)时,通常会丢失图层,但对象会获得额外的分组层次:其他编辑器不知道 Inkscape 使用某些 g 元素作为图层的约定,而将它们视为常规分组。

在图层和分组内部,其他 SVG 元素表示绘图中的实际对象。有关 SVG 1.1 中元素的完整列表,请参见 w3.org/TR/SVG11/eltindex.html,但请注意,Inkscape 尚不支持其中的所有元素。

A.6 坐标和单位

你可以使用多种单位来表示 SVG 绘图中的距离和坐标:厘米(cm)、毫米(mm)、英寸(in)、点(pt)和其他一些单位。然而,有一个单位是特殊的:SVG 像素(缩写为px),有时被称为匿名单位,因为你可以在不指定单位的情况下直接使用它。例如,在这个rect元素中,xywidthheight都是以 SVG 像素表示的:

<rect id="rect2310" y="350" x="100" width="300" height="150" />

你也可以用毫米来指定这些相同的长度:

<rect id="rect2310" y="92.604mm" x="26.458mm" width="79.375mm" height="39.688mm" />

并且 Inkscape 能够正确理解它。然而,如果你更改并重新保存这个 SVG 文件,Inkscape 会将所有尺寸转换回 SVG 像素。

SVG 像素与屏幕像素不同。当你放大时,一个 SVG 像素的距离会比屏幕上的一个像素大;当你缩小时,它会比一个屏幕像素小。然而,当你的缩放级别(显示在 Inkscape 窗口状态栏的右端;参见图 2-2)为 100%时,一个 SVG 像素恰好对应一个屏幕像素,这在为屏幕显示创建图形时非常方便。

在 Inkscape 中,96 个 SVG 像素等于一英寸,因此当你以 96 dpi(每英寸像素)分辨率导出图像时,它将在 Inkscape 以 100%缩放显示时精确地显示出来。在 Inkscape 的 UI 中,大多数地方都可以指定大小或距离的单位,而px(SVG 像素)是默认单位。你可以在文档属性的页面选项卡中为文档选择不同的默认显示单位。

SVG 使用矩形笛卡尔坐标来指定对象在画布上的位置。SVG 中的坐标原点位于页面的左上角,y坐标向下增长。默认情况下,Inkscape 的 UI 使用相同的约定,尽管你可以通过将y向上增长来将原点切换到左下角(首选项 ▶ 界面,取消勾选默认选中的左上角为原点)。在旧版本的 Inkscape 中,左下角为原点是唯一可用的选项,尽管它总是与 SVG 的约定相悖。

A.7 变换

SVG 中的每个对象都有其在画布上的自然位置。例如,对于一个矩形,rect元素的xy坐标定义了这个位置:

<rect id="rect2310" y="350" x="100" width="300" height="150" />

然而,SVG 最有趣的特点之一是,这个位置可以通过transform属性进行影响。通常,这个属性包含一个matrix(...)内的六个数字序列:

<rect transform="matrix(0.96333,0.26831,-0.26831,0.96333,203.200,-160.066)" id="rect2310" y="350" x="100" width="300" height="150" />

在这种形式下,属性表示一个仿射变换矩阵。矩阵代数的处理超出了本书的范围,但这里列出了几种被称为仿射的变换:

  • 任何平移,也叫平移变换(图 6-1)。

  • 任何缩放,包括均匀缩放和非均匀缩放;例如,只缩放宽度或只缩放高度(图 6-2)。

  • 任何旋转围绕任意中心进行(图 6-6)。

  • 任何倾斜,有时也称为剪切(图 6-7)。

并非巧合,这些变换正是选择工具可以执行的变换(第六章)。例如,透视变换不是仿射变换:它们不能通过transform属性表示,也不能通过选择工具执行。

带有transform属性的元素会告诉 Inkscape 在其自然位置和大小绘制此元素,然后按transform中指定的内容进行平移、缩放、旋转或倾斜。

元素的父级(例如,包含此对象的g元素)上的transform值也会影响该对象。对象及其所有祖先上的所有变换都会合并。这就是为什么,例如,当你移动或缩放一个组时,所有属于该组的对象都会按相同的量移动和缩放,尽管实际上只有父级g元素的transform属性被修改。

在首选项对话框的行为▶变换页面(3.1),有一个存储变换选项,其值为“优化”和“保留”。这决定了 Inkscape 在变换对象时使用的策略。选择“保留”时,它将始终将所有对象的所有变换记录为transform属性,保持其他属性不变。选择“优化”(默认)时,Inkscape 会尽可能将变换记录到对象的其他属性中,而不是transform。例如,当你移动一个矩形时,在优化模式下,它会改变矩形的xy属性,而不是添加或更改它的transform。然而,并不是所有类型的变换和所有类型的对象都允许这种优化,因此即使在优化模式下,transform属性仍会被创建。唯一能够优化所有变换并始终不使用transform的对象类型是path

A.8 样式

自然,对象的样式属性可以表示为相应元素的属性。这些属性称为展示属性。例如,这个矩形具有蓝色填充和宽度为 1 像素的黑色描边:

<rect id="rect2310" y="350" x="100" width="300" height="150" fill="blue" stroke="black" stroke-width="1" />

然而,这只是记录样式属性的一种方式。另一种方式是将所有属性打包成一个单独的属性,称为style,使用分号(;)分隔属性,使用冒号(:)分隔每个属性的名称和值:

<rect id="rect2310" y="350" x="100" width="300" height="150" style="fill:blue;stroke:black;stroke-width:1" />

Inkscape 理解这两种方法——但在写入 SVG 时,由于历史原因,它只使用第二种方法,即单一的style属性。当两者都存在时,style属性中的属性优先于展示属性中的相同属性。

本附录未列出 SVG 使用的所有样式属性(完整列表见w3.org/TR/SVG11/propidx.html),但你应该能够识别最常见的那些。

SVG 规定,大多数(但不是所有)样式属性可以从父元素继承给子元素,前提是子元素没有为该属性指定自己的值。例如,如果矩形没有指定fill属性,但其父元素gfill="blue",那么矩形将被填充为蓝色。在 Inkscape 中,这种继承通常不会发挥作用,因为通常对象的绝大多数属性会显式地设置,无论你是否更改了它们。然而,对于fillstroke属性,存在通过 UI 移除或取消设置这些属性的方法,使得子元素可以从父元素继承这些属性(8.2)。

A.9 链接

通常,SVG 中的元素需要彼此引用或链接。这在画布上的可见元素使用defs中的一些定义时最为常见(A.4)。例如,如果你有一个填充线性渐变的矩形,rect元素仅描述矩形本身。文档中名为linearGradient的另一个元素描述了其渐变,矩形通过链接该渐变定义来实现渐变效果。

为了实现可链接性,元素必须具有一个id属性,其值在文档中是唯一的。Inkscape 会自动为所有元素提供唯一的id。链接到元素的 URL 就是其id,前面加上井号(#)——例如,#linearGradient2128。要在style属性中使用此 URL,您需要将其括在括号中,并在前面加上url字符串。例如,下面是一个linearGradient元素,以及一个通过其fill属性链接到该元素的矩形:

<defs> <linearGradient id="linearGradient2128"> <stop id="stop2286" offset="0" style="stop-color:#0000ff;stop-opacity:0;" /> <stop id="stop2284" offset="1" style="stop-color:#0000ff;stop-opacity:1;" /> </linearGradient>
</defs>
...
<rect id="rect2310" y="350" x="100" width="300" height="150" style="fill:url(#linearGradient2128)" />

链接并不总是通过样式属性进行的;例如,SVG 标准规定渐变可以相互链接,以共享颜色停靠点和其他属性。在这种情况下,SVG 使用xlink:href属性(换句话说,XLink 命名空间中的href属性;XLink 是一个独立于 SVG 的 W3C 标准,用于在许多 XML 词汇中进行链接)。xlink:href属性使用不带url()包装的纯 URL——例如,xlink:href="#linearGradient2128"

SVG 允许你链接到同一文档中的其他元素,也可以链接到其他文档,无论是本地文档还是互联网上的文档,以及它们内部的元素。Inkscape 尚不支持跨文档链接到 SVG 文档——虽然它可以链接到作为位图对象插入文档中的外部位图文件(18.2.1)。

A.10 对象类型

Inkscape 可以创建多种对象类型,每个对象都记住其类型,并提供特定于该类型的控制和行为(第十一章)。SVG 直接支持其中一些对象类型;例如,SVG 中的 rect 元素代表 Inkscape 的矩形。但是其他一些对象是 Inkscape 独有的——例如,SVG 没有专门表示螺旋、星形或 3D 盒子的元素。那 Inkscape 如何在保持与 SVG 兼容的同时使用这些对象类型呢?

解决方案就是 sodipodi:type 属性。Inkscape 将星形保存为一个通用的 path 元素,能够表示任何形状,但在此基础上增加了 sodipodi:type,表示它实际上是一个星形,同时还会添加一些其他扩展属性来存储与星形相关的各种参数。与此同时,path 的标准 d 属性提供了星形的精确表示:

<path sodipodi:type="star" style="fill:#ff0000;" sodipodi:sides="5" sodipodi:cx="342.85715" sodipodi:cy="703.79077" sodipodi:r1="105.75289" sodipodi:r2="40.397606" sodipodi:arg1="0.90027477" sodipodi:arg2="1.5285933" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="M 408.571,786.647 L 344.561,744.152 L 284.362,791.893  L 304.997,717.884 L 240.990,675.383 L 317.754,672.139  L 338.395,598.132 L 365.202,670.135 L 441.965,666.897  L 381.770,714.642 L 408.571,786.647 z" />

当加载包含此类元素的文档时,Inkscape 会识别 sodipodi:type,并在编辑时将该对象视为星形而不是路径。当其他 SVG 软件加载相同的文件时,它会忽略任何 Inkscape 特有的属性,并将此元素解释为简单路径——但它的 外观 完全与 Inkscape 中显示的星形相同。换句话说,尽管只有 Inkscape 能够将星形 编辑 为星形,使用标准的 path 作为该对象类型的基础,确保了它仍然与任何 SVG 软件兼容。

A.11 Inkscape 的 SVG 扩展

为了总结这个必要但非常表面的附录,我列出了你可能会在 Inkscape SVG 文件中看到的最重要的扩展元素和属性。

有一点需要重申:这些额外的元素和属性并不会使 Inkscape 文档变成无效的 SVG。"XML" 中的 "X" 代表 "eXtensible"(可扩展)的原因很简单:自由混合不同词汇表是 XML 从一开始就设定的目标之一。这意味着任何 Inkscape SVG 文件必须——并且确实——在所有兼容的 SVG 渲染器中呈现完全相同的效果。

  • 根元素上的 inkscape:version 属性标识了最后编辑并保存该文件的 Inkscape 版本。

  • inkscape:collect 属性被添加到 defs 中那些如果不再使用则可以自动删除的元素上(A.4)。

  • [1.1]

    inkscape:isstock 属性设置在 defs 中的元素上,这些元素来自 Inkscape 的库存标记、图案、渐变等,而不是你自己创建的元素。inkscape:stockid 属性提供了该元素在库存源中的 id

  • sodipodi:namedview 元素及其属性是 Inkscape 存储每个文档偏好的地方(A.4)。

  • sodipodi:type 属性是 Inkscape 用来标记非 SVG 类型对象的属性(A.10)。具有此属性的元素通常还会有一些其他 Inkscape 特有的属性,用来存储与该对象类型相关的各种参数。

  • 如果您已移动对象的固定点,则 inkscape:transform-center-xinkscape:transform-center-y 属性会设置在该对象上 (6.4)。Inkscape 会记住每个对象的该点位置,任何更改都会被记录。

  • sodipodi:nodetypes 属性是 Inkscape 存储您使用节点工具编辑的路径上所有节点类型的地方。将节点分类为平滑、对称和尖点 (12.5.5) 是 Inkscape 允许您执行的操作,但 SVG 本身没有相关规定——因此需要扩展属性。

  • sodipodi:role 属性值为 line 时,设置在 text 元素内的 tspan 元素上,表示一行文本 (15.2.1)。

  • g 上的 inkscape:groupmode 属性是区分 Inkscape 中组和图层的标志 (A.5)。对于图层,此属性存储值 layer

  • inkscape:label 属性可以设置在任何元素上,以提供对应对象的人类可读标签(id 属性不适用于此目的,因为它不能包含空格和标点符号;inkscape:label 不受这些限制,4.1)。此属性中,Inkscape 存储图层的人类可读名称。

  • inkscape:menuinkscape:menu-tooltip 属性出现在 defs 中的 filter 元素上,当您将预设滤镜之一 (17.4) 应用到文档中的对象时。它们存储该滤镜所在的子菜单及其简短描述(Inkscape 用于当您浏览菜单时,显示在状态栏上的提示)。

  • 当您使用 3D 盒子工具 (11.3) 时,inkscape:perspective 元素会存储在 defs 中;它存储一个共享视角,多个 3D 盒子对象可以引用该视角。

  • 一组 inkscape:tile-* 属性会出现在您使用克隆平铺器应用到对象后 (16.6);它们存储瓷砖的已保存大小和位置。

  • inkscape:export-filename 属性可以在任何元素(包括根元素)上设置,它存储文件名(包括路径),即该对象(或根元素的情况下,整个文档)上次导出为位图的文件。此值会自动填入导出 PNG 图像对话框中的文件名字段 (18.6.1.4),因此您可以快速重新导出到相同的文件。(这也是为什么 Inkscape 在您从文档中导出位图后,声明文档已更改并需要重新保存的原因。)类似地,inkscape:export-xdpiinkscape:export-ydpi 属性包含您上次导出该文档时使用的水平和垂直分辨率。

第二十九章:B

导入与导出

本附录收集了 Inkscape 支持的主要导入和导出格式的功能、限制和前提条件的说明。

如果你想让 Inkscape 导入某些格式,你需要下载并安装外部软件。通常情况下,如果没有安装必要的外部软件(或该软件不在 PATH 中),Inkscape 会直接从打开或导入对话框中省略该格式。

如果 Inkscape 不支持你最喜欢的向量格式,检查是否有开源工具可以填补该格式与已知格式之间的空白(理想情况下是 SVG,但 PDF 也可以)。如果存在这样的转换器,向 Inkscape 添加对新格式的支持,只需编写一个输入或输出扩展(第十九章)。

B.1 保存与导出

关于术语:Inkscape 仅在导出 PNG 图像对话框中使用 export 这个术语(18.6.1)。它支持的向量格式,包括默认的 Inkscape SVG 格式,都列在保存、另存为和保存副本对话框中的“保存类型”列表中。换句话说,你不是 导出 到这些格式,而是 保存 到这些格式。由于除了 Inkscape SVG 外的所有向量格式都会丧失一些可编辑性特性,甚至丢失某些类型的对象,保存为这种格式后再尝试关闭文档时会显示警告,如图 B-1 所示。

图 B-1:小心!你正在关闭最后一次保存为 Inkscape SVG 以外格式的文档!

如果你在保存非 SVG 文件后做了任何更改,你可能需要再次将原始的 SVG 文件另存为。为了避免这个麻烦,使用 保存副本 命令(Shift-Ctrl-Alt-S)来保存为非 SVG 格式。保存副本后,打开的文档将继续与原始 SVG 文件关联,任何进一步的更改都将保存到该文件中。

B.2 SVG 变体

Inkscape 使用 Inkscape SVG 向量格式。正如在 1.4 中所解释的,这种格式是符合标准的 SVG,并有一些仅影响是否能够在 Inkscape 中编辑不同类型对象的 Inkscape 特有的扩展。这些扩展从不改变这些对象类型的外观。除非为了获得(适度的)文件大小提升,或遇到某些与 Inkscape SVG 兼容性差的有缺陷的软件,否则保存为 Plain SVG 并没有太大意义。两种 SVG 格式都有 压缩版(使用 .svgz 文件扩展名),这会产生更小的、不可读的文件,但除此之外它们是一样的,并且应该被大多数 SVG 软件理解。

你可以像平常一样打开从 Adobe Illustrator 导出的 SVG 文件。这些文件通常包含许多特定于 AI 的元素,这些元素对 Inkscape 来说是无用的,但却会增加 SVG 文件的大小。Inkscape 有一个导入过滤器,可以删除 AI 特有的二进制块,并将 AI 层转换为 Inkscape 层;为了触发这个过滤器,SVG 文件需要使用.ai.svg 的文件扩展名,而不仅仅是.svg。

B.3 PDF

在 SVG 之后,PDF 是 Inkscape 支持的最强大且广泛认可的矢量格式(1.5.1.1)。虽然 Inkscape 并不是进行回溯PDF 编辑(即打开 PDF,编辑其内容,并重新保存为 PDF)的最佳工具,但 PDF 无疑是将 Inkscape 与不支持 SVG 的软件连接的最佳选项。Inkscape 支持 PDF 静态特性的大部分最新版本(形状、文本、图像、渐变、不透明度、网格),但不支持 PDF 的交互特性(如表单)。

B.3.1 导入

最大的障碍是,PDF 支持文档中的多页,而 SVG 不支持。因此,在 PDF 导入对话框中(图 B-2),你首先看到的是页面选择器。该对话框会在你点击“确定”导入之前,显示所选页面的预览。

图 B-2:打开或导入 PDF 文件时的 PDF 导入对话框

你还可以将导入的艺术作品裁剪到 PDF 文档中可能定义的各种框中(18.3)。例如,裁剪到媒体框(即页面大小)会隐藏 PDF 中可能包含的页面区域之外的任何对象;大多数 PDF 查看器反正不会显示它们,但 Inkscape 允许你发现这些对象。

Inkscape 的 PDF 导入有两种类型:Poppler/Cairo导入和内部导入。导入对话框声称 Poppler/Cairo 导入是“通过外部库”完成的,但这有误导性;Inkscape 用户不需要为这两种导入类型安装任何外部组件。选择哪种类型取决于其特性及其在 PDF 中处理文本的不同方式。

B.3.1.1 文本和字体

一个 PDF 文件可以—并且通常会—将自己的字体嵌入其中;SVG 则没有(关于这个背景,见 15.8)。Inkscape 可以通过两种不同的方式处理这个限制。

如果你主要关心文档的外观,可以选择Poppler/Cairo 导入选项(图 B-3,左)。通过此选项,每个文本字符都会变成一个符号(16.7),你可以取消链接(16.5)将其转换为可编辑路径。这个选项完全保留了外观,但显然,文本不再作为文本可编辑。

相比之下,内部导入会保留文本作为文本——但只有在你已经在系统中安装了相应的字体时,它才会显示正确(图 B-3,右)。例如,如果 PDF 文件使用 FancyShmancy 字体作为文本,你在仅仅查看该 PDF 文件时(例如在 Adobe Acrobat Reader 或其他 PDF 查看器中),不需要关心(甚至不知道)字体的具体信息,因为该字体已嵌入文件中,PDF 查看器会使用它。然而,如果你想使用内部导入选项将该文件导入 Inkscape,你需要先从某处获取 FancyShmancy 字体并安装到计算机上,然后再尝试导入。没有该字体,FancyShmancy 文本将显示错误。

图 B-3:使用 Poppler/Cairo 导入的本书 PDF 页面(左)和使用内部导入器导入但计算机上未安装主文本字体的页面(右)

即使你确实拥有 PDF 文档使用的确切字体,在导入的文件中编辑文本也不是特别自然。PDF 文本的一段通常不会转换为一个自动换行的单一文本对象。相反,每一行都成为一个独立的文本对象。通常情况甚至比这更糟:你会看到行在看似随机的地方被分割成文本对象片段(如右侧所示)。这是因为 PDF 本质上是一种视觉格式,它不提供任何更高级的逻辑结构——甚至简单的段落结构也没有。

Inkscape 提供了“通过最接近名称的已安装字体替换 PDF 字体”选项,这可能有助于解决这个问题。使用此选项时,如果你没有安装 FancyShmancy 字体,但有 FancyPancy 字体,Inkscape 会使用该字体,如果该字体足够接近,也可能有效。

一个额外的复杂性是,大多数 PDF 文件通过其PostScript 名称引用所使用的字体,这些名称可能与操作系统显示的字体名称不同。例如,PDF 可能引用名为 AlbertusMT-Light 的字体,而在你的 Inkscape 字体列表中,这个字体叫做 Albertus MT Lt。Inkscape 会尽力将 PostScript 名称转换为常规名称,但它只能针对你已安装的字体进行转换——即使如此,有时它也会失败,选择错误的已安装字体。

你始终可以通过在“选择器和 CSS”对话框中查看文本对象字体的样式来查找导入 PDF 中任何文本对象的原始 PostScript 名称(8.1)。你需要查找的属性是 -inkscape-font-specification。例如,该属性可能包含 AlbertusMT-Light,而标准的 font-family 属性是 Albertus MT Lt

B.3.1.2 网格

与 SVG 类似,PDF 支持网格渐变(10.7)。然而,Inkscape 不会尝试将 PDF 网格转换为 SVG 网格;相反,它通过平面颜色瓷砖的网格来近似它们。在对话框的底部(图 B-2),你可以选择这个近似的精确度,从粗略到非常精细。通常,你需要通过实验来确定适合你使用网格的 PDF 文件的最佳值,但对话框会警告你,要求过高的精度会使文件过大,导致操作缓慢。

B.3.2 导出

如前所述,Inkscape 没有单独的“导出”命令用于矢量格式;相反,前往 文件 ▶ 另存为文件 ▶ 另存副本 并在 保存类型 列表中选择 PDF 格式。在输入文件名并点击 确定 后,你将看到一个用于设置 PDF 导出选项的对话框(图 B-4)。

图 B-4:PDF 导出选项

你可以导出 PDF 版本 1.4 或 1.5。对于文档中使用的字体,你可以选择将它们嵌入 PDF 中,或者在导出时将所有文本对象转换为路径。

滤镜(第十七章)是 SVG 的特性,在 PDF 中没有对应的功能。你可以选择在导出时将任何使用滤镜的对象转换为位图(栅格化滤镜效果)。如果取消选中此选项,滤镜将被简单地忽略(例如,任何模糊的对象将失去模糊效果)。栅格化会增加文件大小并丧失受影响对象的矢量可编辑性,但它保留了对象的滤镜外观。栅格化的分辨率参数可以是用于屏幕查看的默认 96 dpi,但对于用于打印的 PDF,至少需要 300 dpi。

默认情况下,整个文档都会导出为 PDF,但你可以通过输入其 ID 来限制导出单个元素(4.1)。例如,在一个包含多个徽标的文件中,你可以使用此选项将每个徽标导出为自己的 PDF 文件。PDF 的页面大小默认与 SVG 相同,因此页面外的任何对象都会被隐藏(但仍然存在于 PDF 代码中);如果将输出页面大小设置为“使用导出对象的大小”,PDF 页面将与所导出对象的边界框大小相同。

B.4 PostScript 和 EPS

几十年前,PostScript 是 唯一 的矢量数据交换格式。现在,它已经在很大程度上被 PDF 取代,后者功能更丰富,并且得到了各种软件的更好支持。如果有选择,你应该使用 PDF 而不是 PostScript。然而,许多旧项目和剪贴画仍然是 PostScript 文件,你可能仍然需要处理它们。

EPS 是带有一些额外限制的 PostScript,允许你将其导入并插入到其他文档中。EPS 文件始终是单页的,始终包含所有字体和位图图像(普通的 PS 文件不需要嵌入任何内容),且其页面大小始终裁剪到其内容。

B.4.1 导入

要导入 PS 和 EPS 文件,你需要安装 Ghostscript 解释器,Inkscape 会自动运行它。Ghostscript 将 PS 或 EPS 文件转换为 PDF 格式,然后再将其输入 Inkscape。所有主要操作系统的版本可以在www.ghostscript.com/上下载。确保 Ghostscript 的 ps2pdf(在 Linux 上)或 ps2pdf.bat(在 Windows 上)文件已包含在你的PATH环境变量中。

由于从 Inkscape 的角度来看,PS 和 EPS 文件最终以 PDF 形式导入,你将看到相同的 PDF 导入对话框(图 B-2)。特别是,如果 PS 文件包含多页,您可以选择要导入的页面。

B.4.2 导出

Inkscape 原生支持 PS 和 EPS 的导出。该对话框有许多与 PDF 导出对话框相同的选项,如图 B-5 所示。

图 B-5:PS 或 EPS 导出选项

你可以选择 PostScript 的版本(即级别);大多数现代软件和打印机都支持 Level 3。与 PDF 导出类似,字体要么嵌入,要么转换为路径,滤镜也可以栅格化。具有非零不透明度的对象也会被栅格化(无法禁用),因为与 PDF 不同,PostScript 不支持矢量透明度。

B.5 AI

在版本 8 之前,Adobe Illustrator(AI)的原生格式基于 PostScript(1.5.1.1)。然而,它并不是完全标准的 PostScript 格式,导入到其他软件中一直是个麻烦。网上有各种脚本声称能将这种旧的 AI 格式转换为更容易处理的格式,但它们都有限且不可靠。虽然你可以尝试使用它们,但 Inkscape 不正式支持导入或导出旧版 AI 格式。

从版本 9 开始,Adobe 将其新的 Illustrator 格式的基础改为 PDF 格式。尽管 Illustrator 保存的 AI 文件包含许多 AI 特定的扩展,但它们仍然是标准的 PDF,任何支持 PDF 的应用程序都能打开和查看。Inkscape 正是这么做的:它将任何带有.ai 扩展名的文件当作 PDF 文件处理,并展示其标准的 PDF 导入设置对话框(B.3)。导入时,Inkscape 会丢失 AI 特定的元数据(如图层),但至少你仍然可以将矢量对象作为矢量图形获取。

Inkscape 不支持 AI 导出,因为 Adobe Illustrator 的最新版本可以无问题地导入 SVG 和 PDF 文件。

B.6 CorelDRAW

Inkscape 可以原生导入由 CorelDRAW 矢量编辑器创建的各种文件(扩展名为.cdr、.cdt、.ccx 和.cmx)。不支持导出到 CorelDRAW 格式。

B.7 WMF、EMF 和 EMF+

WMF(Windows MetaFile)、EMF(Enhanced MetaFile)和 EMF+(Enhanced MetaFile Plus)是 Windows 专用的矢量格式,某些仅限 Windows 的软件(如 Microsoft Office)用于数据交换和矢量剪贴画。在这些格式中,EMF 功能最强大,且被广泛支持,因此通常更为优选(如果有选择的话)。Inkscape 原生支持这些格式的导入和导出。

B.8 XAML

Inkscape 可以导入和导出 Microsoft 在其 .NET 和 Silverlight 技术中使用的 XAML(可扩展应用程序标记语言)格式。无需额外的软件。

B.9 WPG

WPG(WordPerfect 图形)是一种老旧的矢量格式,曾被 WordPerfect 文本处理器使用;该格式的剪贴画集仍然存在。Inkscape 可以原生导入 WPG(无需外部软件)。

B.10 VSD

VSD 是 Microsoft Visio 的原生格式。Inkscape 对 VSD 文件的导入支持有限。

B.11 DXF 和 HPGL(导出)

DXF(绘图交换格式)是用于 AutoCAD 等软件中计划和技术图纸的常见 CAD(计算机辅助设计)格式。HPGL 是一些惠普绘图仪使用的矢量格式。Inkscape 对导入和导出这些格式的支持有限。

B.12 ODG

OpenDocument 图形(ODG)是包括 OpenOffice 和 LibreOffice 套件在内的一些软件使用的格式。Inkscape 对 ODG 导出的支持有限;对于最新版本的办公套件,最好使用 SVG 进行图形交换。

B.13 POV

POVRay(povray.org/)是一个流行的开源 3D 光线追踪器,而不是矢量应用程序。然而,Inkscape 可以将路径和形状导出为 3D 场景,然后由 POVRay 渲染;你可以手动编辑基于文本的 .pov 文件,调整角度、相机、光照等。

B.14 LaTeX(导出)

LaTeX 是一种古老且强大的开源文档格式化系统。Inkscape 可以将其图形直接输出到 LaTeX 文档中。你需要在 LaTeX 系统中安装 PSTricks 包(tug.org/PSTricks/)来渲染该文件。

B.15 位图格式(导入/导出)

正如我们在 18.6 中看到的,Inkscape 可以原生导出 PNG、JPG、TIFF 和 WebP 格式。它内置了对更多位图格式的导入支持,包括所有主要格式(PNG、JPG、TIFF、GIF 等)。

GIMP 位图编辑器使用 XCF 格式。Inkscape 可以通过扩展导出到此格式,保留图层(即,SVG 文件中的图层变为 XCF 文件中的图层)。你需要安装 GIMP 并将其添加到 PATH,以便此扩展正常工作。

B.16 打印

你可以将打印视为导出——如果仅仅因为,要打印文档,Inkscape 会将其导出为打印机能理解的格式。根据打印机驱动程序,这可能是 PostScript 或 PDF,而不是 SVG。如果你从打印对话框中选择打印到文件选项,你将获得一个 PS 或 PDF 文件,看起来就像是你使用该文件类型保存的文档。

我不会描述你在选择文件▶打印(Ctrl-P)时会看到的打印对话框,因为它是由你的操作系统创建的,而不是 Inkscape 创建的,其选项——纸张大小、边距、打印质量等等——反映了你的打印机的功能。Inkscape 在这个对话框中唯一添加的内容是渲染选项卡。

默认情况下,Inkscape 通过将文档导出为矢量格式(PostScript 或 PDF)进行打印。如前所述,Inkscape 足够智能,能够使用这些格式不支持的特性来光栅化对象:滤镜和网格(PS 和 PDF 都不支持)以及透明度(仅 PS)。另外,你可以通过在渲染选项卡上将渲染模式从矢量切换为位图并设置位图分辨率,将整个文档渲染为位图。此选项通常更安全,因为它避免了格式转换可能带来的任何意外,但它可能会导致较大的打印文件和较慢的打印速度。

第三十章:C

命令行

与大多数矢量编辑器不同——但与大多数开源软件相似——Inkscape 拥有强大的命令行界面。通过它,你可以执行导出、文档修改、查询等任务,既可以通过脚本,也可以通过命令行提示符完成,而无需使用 Inkscape 的图形用户界面(GUI)。在大多数情况下,当 Inkscape 完成命令行参数中指定的任务后,它会直接退出,根本不显示 GUI。这使得它运行得更快,占用更少的资源,因为没有时间或内存浪费在创建和销毁 GUI 上。

在本附录中,我将解释并提供 Inkscape 最常用的命令行参数示例。我还介绍了通过 --actions 参数提供的动作语言,允许你编写复杂的文档处理场景。由于程序的命令行界面在最近的版本中经过了彻底的修订,我还指出了最重要的变化,帮助你迁移可能在 Inkscape 1.0 中无法正常运行的旧脚本。

C.1 命令行可执行文件

在 Windows 上,命令行工具和 GUI 应用程序是两种不同类型的程序。一个可执行文件不能同时作为 GUI 应用程序和命令行应用程序运行。这就是为什么 Inkscape 在 Windows 上包含了两个可执行文件:inkscape.exe 和 inkscape.com。

  • inkscape.exe 是在需要交互式使用 Inkscape 时运行的 GUI 应用程序。如果你尝试用它来执行命令行任务,你将在控制台(命令提示符窗口)中看不到任何输出,这使得查询参数(C.5)无法使用。此外,inkscape.exe 会异步返回(立即),可能会在复杂操作(如导出)完成之前就返回。

  • inkscape.com 最适用于脚本编写和命令行任务。它在控制台中显示正确的输出并同步返回。然而,如果你运行它用于图形用户界面(GUI),你将始终看到一个无法关闭的寄生命令行窗口,除非关闭 GUI 窗口才能将其关闭。

在 Linux 或 macOS 上,只有一个名为 inkscape 的可执行文件,用于图形界面和命令行。在本附录中的示例中,我使用 inkscape 作为可执行文件的名称。此外,我在文件路径中使用了正斜杠(/),这种路径在包括 Windows 在内的所有平台上都可以正常工作。

C.2 获取帮助

要获取与你版本的 Inkscape 兼容的命令行参数完整列表,请使用 --help 参数运行它:

**$ inkscape --help**
Usage: org.inkscape.Inkscape [OPTION…] file1 [file2 [fileN]]
Process (or open) one or more files.
Help Options: -?, --help                                 Show help options
... 

参数或 选项 的名称以 -- 开头,例如 --help。其中一些可以有由 = 分隔的值,例如 --export-fileid=file.pdf。使用空格来分隔命令行参数。更详细的参考可以通过 Inkscape 的用户界面中的帮助 ▶ 命令行选项获取(这将打开一个网页浏览器并从互联网获取该页面),或通过在命令行中输入 man inkscape(仅限 Linux)来获取。

一个非常有用的参数(尤其是当你想报告 Bug 或请求 Inkscape 开发者添加功能时)是--version,它会打印你使用的 Inkscape 副本的版本号、修订号和构建日期。你还可以使用--system-data-directory--user-data-directory查询 Inkscape;这两个参数分别会打印系统偏好设置对话框中的“Inkscape 数据”和“用户配置”标签值。

C.3 打开文档

命令行最简单的使用方式是列出你想在 GUI 中打开的文档的文件路径,而不带任何参数名称。例如,输入以下命令将启动 Inkscape 的 GUI,并将两个 SVG 文档和一个 PDF 文档(自动导入)加载到三个 Inkscape 窗口中:

**$ inkscape file.svg folder/subfolder/document.svg pdfs/file.pdf**

你可以为打开非 SVG 文件指定一些导入选项。最常用的选项是--pdf-page,它可以选择从 PDF 文档中导入的页面,以及--pdf-poppler,它切换到 Poppler 导入方法(B.3.1)。例如,以下是如何从 PDF 书籍章节中打开第 5 页:

**$ inkscape --pdf-page=5 chapter.pdf** 

如果你有一个生成 SVG 文件并将其打印到控制台的脚本或程序,可以使用|字符将该文档传送到 Inkscape,并使用--pipe参数,例如:

**$ svg-generating-script | inkscape --pipe**

C.4 导出

Inkscape 最常见的任务之一是将 SVG 文档导出为其他格式。通过命令行,Inkscape 可以将位图导出为 PNG(18.6),并将矢量图导出为 PS(PostScript)、EPS、PDF、EMF、WMF 和 XAML(附录 B)。Inkscape 根据你在命令行中提供的文件名扩展名来决定使用哪种格式;如果你想显式指定格式,可以添加--export-type并指定所需的类型(有效值包括svgpngpsepspdfemfwmfxaml)。例如,导出为 PDF 的命令如下:

**$ inkscape --export-fileid=file.pdf file.svg**

这相当于

**$ inkscape --export-fileid=file --export-type=pdf file.svg**

这将加载 file.svg 并创建 PDF 文件;不会加载 GUI,完成导出后 Inkscape 会退出。如果你想强制覆盖导出文件,可以添加--export-overwrite

你可以在--export-type中指定多个输入文件和多个导出类型(用逗号分隔)。例如,以下命令

**$ inkscape --export-type=png,pdf file.svg file2.svg**

会创建四个文件:file.png、file.pdf、file2.png、file2.pdf。

你还可以将文档导出为 SVG 文件——例如,你可以使用 Inkscape 将 PDF 文件转换为 SVG,或从一个 SVG 文件中提取一个元素并将其保存为独立的 SVG。如果你添加了--export-plain-svg,文档将以纯 SVG 格式保存,而不是 Inkscape 的 SVG 格式(1.4)。如果你添加了--vacuum-defs,生成的 SVG 将不会在defs中包含任何未使用的定义(A.4)。例如,这将把 PDF 文件中的一页转换为纯 SVG 格式:

**$ inkscape --export-fileid=file.svg --export-plain-svg --pdf-page=5 file.pdf**

[1.1]

在旧版本中,Inkscape 为每种导出格式提供了单独的参数:--export-png--export-pdf--export-ps--export-eps等。它们都接收一个文件名作为值。现在,--export-filename已经取代了这些参数。--export-plain-svg依然存在,但现在是一个布尔开关,而不是文件名参数。

除了它原生支持的导出格式外,Inkscape 还包括了多个输出扩展(19.4.2),用于支持一些不太常见的格式。你也可以通过命令行使用这些扩展。--export-extension参数的值为扩展的唯一 ID,你可以在其.inx 文件中查找(19.4.1)。例如,Inkscape 1.1 包括一个用于导出到绘图仪使用的 HPGL 格式的扩展。在 share\inkscape\extensions\hpgl_output.inx 文件中,你可以找到它的 ID,即org.ekips.output.hpgl_output。现在,运行

**$ inkscape --export-extension=org.ekips.output.hpgl_output \ --export-fileid=file.hpgl file.svg**

将 file.svg 转换为 HPGL 格式,并创建一个名为 file.hpgl 的文件。

C.4.1 导出区域

默认情况下,Inkscape 导出文档的页面(2.3),页面外的对象在导出时不可见。添加--export-area-drawing可以使导出覆盖文档中所有可见对象,而不管其页面大小。例如:

**$ inkscape --export-fileid=file.png --export-area-drawing file.svg**

唯一的例外是 EPS 格式,默认情况下会导出整个绘图;使用此格式时,使用--export-area-page可以导出整个页面。即使如此,由于 EPS 的限制,导出区域将会裁剪为页面中实际存在的对象,若它们没有延伸到页面边缘。

从 SVG 导出时,你可以导出文档中的单个对象,使得导出的文件只覆盖该对象的边界框,其他内容不会包含在内。该对象由其id属性指定(A.9):

**$ inkscape --export-fileid=text.pdf --export-id=text2054 file.svg**

对于 PNG 导出,如果其他对象与导出的对象的边界框重叠并且可见,它们也会出现在导出的文件中。对于 SVG 导出,即使其他对象位于导出页面区域之外,它们仍然会出现在文件中。要抑制其他对象并仅渲染所选对象,可以添加--export-id-only。对于 PDF、PS 和 EPS,这是唯一可能的模式——当指定--export-id时,其他对象始终会被丢弃。

对于 PNG 导出,你还可以通过指定两个角点来显式提供导出区域。例如,以下命令导出从点 0, 0 到点 200, 100(以像素为单位)区域:

**$ inkscape --export-fileid=area.png --export-area=0:0:200:100 file.svg**

同样对于 PNG 导出,无论你使用哪种方法来指定区域,你都可以通过添加--export-area-snap来将该区域“对齐”到像素网格——即,将其四舍五入到最近的完整坐标(以px为单位)。当你在默认的 96 dpi 下导出,并希望你的对象始终在导出的位图中保持清晰(无论你导出的区域如何),此选项非常有用。

C.4.2 导出大小和分辨率

对于 PNG 导出,您可以指定导出位图的大小或分辨率(默认是 96 dpi)。例如:

**$ inkscape --export-fileid=file.png --export-dpi=600 file.svg****$ inkscape --export-fileid=file.png --export-width=1000 file.svg****$ inkscape --export-fileid=file.png --export-height=400 file.svg**

第一行将文件.svg 以 600 dpi 的分辨率导出,因此一个宽度为 3 英寸的文档页面将导出为宽度为 1800 像素的位图。其他两个示例明确设置了导出的像素大小,并计算出相应的分辨率(如果同时存在--export-dpi,则会覆盖它)。

如果只指定了--export-width--export-height,Inkscape 会按相同分辨率计算另一个维度。然而,使用命令行导出时,您还可以获得一个垂直分辨率不等于水平分辨率的 PNG 文件(这是从 GUI 中无法做到的,18.6.1.2)。例如,您可以将一个 1000×1000 像素的区域导出为一个 2000×500 像素的扭曲 PNG 文件,命令为--export-width=2000 --export-height=500

--export-dpi 参数还会影响导出为矢量格式(PS、EPS、PDF)时的处理,尤其是当 Inkscape 需要将文件的某些特性(如 PS 和 PDF 中的滤镜和网格渐变,或 PS 中的透明度)栅格化时。

C.4.3 导出背景(仅限 PNG)

所有导出格式中没有对象的区域在导出时会显示为透明。然而,在 PNG 导出(而不是 PDF、PS 或 EPS)中,您可以指定任何背景色或透明度,以便在导出过程中应用。例如,如果您希望使用完全不透明的黑色背景,可以输入:

**$ inkscape --export-fileid=file.png --export-background=#000000 \** **--export-background-opacity=1.0 file.svg**

背景颜色的语法与 SVG 中的相同;特别是,您可以使用#RRGGBB格式。背景透明度(默认为完全不透明)可以是一个浮动数字,范围从 0.0 到 1.0,或者是一个整数,范围从 1 到 255;例如,--export-background-opacity=0.5等同于--export-background-opacity=128

C.4.4 色彩模式(仅限 PNG)[1.1]

对于 PNG 导出,您可以使用--export-png-color-mode选项来设置导出文件的色彩模式,该选项接受以下值之一:Gray_1Gray_2Gray_4Gray_8Gray_16RGB_8RGB_16GrayAlpha_8GrayAlpha_16RGBA_8,或RGBA_16(18.6.1.5)。

C.4.5 导出提示(仅限 PNG)

每次通过 GUI 导出单个选中的对象为 PNG 时(18.6),导出文件名和分辨率会记录在导出提示属性中,并添加到相应的元素。如果您随后保存文档并带有这些提示,您也可以通过命令行导出为 PNG。例如,如果您写:

**$ inkscape --export-id=text2035 --export-use-hints file.svg**

Inkscape 只会将 ID 为text2035的对象以相同的分辨率导出到同一个文件中,该分辨率是在从 GUI 最近一次导出时设置的。请注意,--export-filename 参数没有,因为文件名是从导出提示中获取的。

C.4.6 矢量导出选项

导出为 PDF、PS 和 EPS 时,您可以设置以下选项:

  • --export-dpi(C.4.2)设置栅格化对象(如滤镜和网格渐变)的分辨率。

  • --export-ignore-filters抑制经过滤的对象的栅格化,使其在导出时不应用过滤器。

  • --export-ps-level指定使用的 PostScript 格式的级别(版本);它可以是 2 或 3(默认为 3)。

  • --export-pdf-version指定使用的 PDF 版本;它可以是 1.4 或 1.5(默认为 1.5)。

  • --export-text-to-path将所有文本对象转换为路径(这在导出到 SVG 时也可用)。

例如,以下操作会在导出时将所有文本对象转换为路径:

**$ inkscape --export-fileid=file.pdf --export-text-to-path file.svg**

生成的矢量文件既不需要也不嵌入任何字体。

C.5 查询

由于 SVG 是基于文本的格式,生成或编辑 SVG 文档时常常会使用简单的脚本。在这样的脚本中,你可能需要指定某些 SVG 对象的边界框——例如,检查从数据库插入到 SVG 中的文本是否适合提供的空间,或者为特定对象创建一个背景矩形或框架。然而,通常情况下,计算 SVG 中对象的边界框是极其复杂的——你需要重新实现大量 Inkscape 的代码,以考虑可能影响对象边界框的所有因素。即使你在编写 Inkscape 扩展(第十九章),Inkscape 附带的 inkex Python 库也可以计算路径的边界框,但不能计算文本的边界框。

幸运的是,Inkscape 本身提供了帮助。例如:

**$ inkscape --query-width --query-id=text1256 file.svg**
45.2916

这会要求 Inkscape 提供具有 id="text1256" 的对象的宽度(单位为像素)。Inkscape 加载文档,找到该对象,将其宽度打印到控制台,然后退出。

类似地,你可以使用 --query-height--query-x--query-y 参数来查找对象边界框的尺寸和坐标。--query-id 参数可以包含以逗号分隔的 id 列表。

这样的 Inkscape 调用速度相对较快,因为它们不加载 GUI,也不渲染文档。然而,如果你需要多个对象的多个边界框值,使用这些参数可能会导致延迟。在这种情况下,最好使用--query-all参数,它会返回文档中所有对象的所有边界框值:

**$ inkscape --query-all file.svg**
svg2,-55.11053,-29.90404,328.3131,608.6359
layer1,-55.11053,-29.90404,328.3131,608.6359
image2372,-8.917463,349.8089,282.12,212.6382
text2317,-39.85518,454.3014,20.40604,13.32647
tspan2319,-32.58402,454.3014,12.79618,4.989286
tspan2408,-39.85518,462.4921,20.40604,5.135838
path2406,-16.43702,386.617,6.34172,154.7896
text2410,-46.11609,376.8753,34.34841,5.135838
tspan2414,-46.11609,376.8753,34.34841,5.135838
text2418,-55.11053,365.9197,43.02429,5.135838

每一行是一个以逗号分隔的对象 ID、X、Y、宽度和高度的列表。在你的脚本中解析这样的行应该很简单。

C.6 操作

Inkscape 的命令行不仅仅限于无 GUI 的导出、转换和查询任务。你还可以使用 --actions 参数脚本化许多常规编辑任务,该参数允许你列出任意数量的动作,以供 Inkscape 按顺序执行。

每个操作或多或少对应于在 GUI 中编辑文档时从菜单中选择的命令。一个操作有一个 名称 和可选的一个或多个 参数。在命令行中,使用冒号(:)分隔名称和参数,用逗号(,)分隔单个操作的多个参数,用分号(;)分隔列表中的多个操作。你也可以在字符串中包含空格,但此时字符串必须用双引号("...") 括起来,并且不能包含其他引号。

要查看你的 Inkscape 版本支持的完整操作列表,可以使用 --action-list 启动 Inkscape。以下是该列表的顶部,显示一些与导出相关的命令行参数对应的操作:

**$ inkscape --action-list**
action-list         :  Print a list of actions and exit.
convert-dpi-method  :  Import DPI convert method.
export-area         :  Export area.
export-area-drawing :  Export drawing area.
export-area-page    :  Export page area.
export-area-snap    :  Export snap area to integer values.
export-background   :  Export background color.
export-background-opacity:  Export background opacity.
export-do           :  Do export.
...

C.6.1 示例:更改 CSS 属性

让我们看一个实际的例子。假设你想打开 file.svg,选择所有文本对象,将它们涂成红色(#FF0000),并保存结果。你可以通过以下操作完成此任务:

**$ inkscape --actions="file-open:file.svg; select-by-element:text; \** **object-set-property:fill,#FF0000; export-filename:fileout.svg; export-do"**

让我们按分号将这个字符串拆分成各个部分,逐一查看每个操作:

  • file-open 打开其参数中给定的文件——在此例中是 file.svg。你也可以省略此操作,直接在 --actions 参数后提供 file.svg

  • select-by-element 选择所有具有给定元素名称的对象——在此例中是 text

  • object-set-property 在选中的对象上设置一个 CSS 属性(8.1)。两个参数分别提供属性名称(fill)和值(#FF0000)。这将把所有文本涂成红色(除非它们有自己的 tspan 内部定义的 fill,会覆盖此设置)。

  • export-filename 通过指定文件名(以及从文件扩展名中获取的 SVG 导出格式)来准备导出结果。目前没有 file-save 操作,这可能反而更好;将更改的结果保存(即导出)到一个不同的文件,而不是覆盖原文件,更为安全。

  • export-do(无参数)执行实际的导出操作。

这个命令执行完后,你将在当前文件夹中得到一个名为 fileout.svg 的文件,该文件与 file.svg 完全相同,只不过所有文本对象的填充颜色变成了红色。

C.6.2 Shell 模式

Inkscape 的 Shell 模式是一个便捷的方式来探索操作。如果你使用 --shell 启动 Inkscape,它会进入交互模式,在该模式下你可以在 Inkscape 的提示符下输入操作及其参数(以及动词),并立即执行这些操作。例如:

**$ inkscape --shell**
Inkscape interactive shell mode. Type 'action-list' to list all actions. Type 'quit' to quit. Input of the form: action1:arg1; action2;arg2; verb1; verb2; ...
Only verbs that don't require a desktop may be used.**> file-open:page.svg****> select-by-element:text****> delete**
Unable to find: delete
verbs_action: Invalid verb: delete**> select-by-element:text****> object-set-property:fill,#00ff00****> export-filename:green.svg****> export-do****> quit**

你在交互式 Shell 模式中测试并验证有效的命令序列,可以在脚本中重复使用。

在输入操作名称或文件名时,按 Tab 键可进行自动补全。Inkscape 的 Shell 模式会记住你跨会话的命令历史。

posted @ 2025-11-26 09:17  绝不原创的飞龙  阅读(0)  评论(0)    收藏  举报