矢量图形和 Inkscape 简介
SVG(可缩放矢量图形)是一种开放的 W3C 标准,用于以不同于传统计算机图像的方式描述二维图形,传统计算机图像都是某种位图。位图或栅格图形,忽略压缩和其他优化技术,简单来说就是构成图像的所有像素的长列表,每个像素都尽可能详细地描述——确切的颜色、透明度等等。
相反,矢量图形文件包含一系列伪数学指令——例如,从这个坐标到那个坐标画一条直线,创建一个这个大小的矩形,顺时针旋转 47 度或用红色填充它。矢量格式的鼻祖是 PostScript。
这种替代方法的第一个也是主要的好处是完全独立于物理显示器的能力,无论是计算机显示器还是一张纸。更确切地说,虽然在低分辨率显示器或打印机上看到超清晰的图像仍然(显然)是不可能的,但矢量图形没有固有的分辨率,也没有限制。矢量图形可以随意缩放、缩小或旋转,无论您希望多少次或多少次,都不会有任何退化,即使在打印时也是如此。例如,看看图 1,它并排显示了同一幅图的两个放大版本,一幅是栅格图,另一幅是矢量图。左边的矢量图比另一幅图清晰得多,不是吗?
矢量图像文件的另一个巨大优势是,由于它们是指令序列,因此图像的大小不会影响文件的大小,从而节省了磁盘空间和慢速连接的下载时间。
最后但并非最不重要的一点是,创建或处理“一系列命令”是一项可以轻松有效地委托给计算机程序的任务。SVG 文件几乎可以以任何方式批量生成或修改,而无需人工干预。SVG 1.1 规范还描述了 16 种滤镜原语,这些原语可以实现非常复杂的对象以及高度逼真的效果。
世界尚未完全转向矢量化的主要原因是,位图在再现照片中存在的颜色和对比度的细微差异方面仍然要好得多。然而,矢量图形,无论多么漂亮,都是“合成的”,而且通常会显示出来。尽管如此,它们仍然非常有用,并且在 GNU/Linux 桌面中变得越来越普遍。
Linux 上最基本的基于 GUI 的矢量图形工具是 Figurine,它使用与古老的 Xfig 相同的文件格式,以及 Dia。一个更有前途的应用程序是 Karbon 14,KOffice 的矢量图形组件。然而,如今,在 Linux 上开始使用矢量图形的最简单方法是 Inkscape,因为它有更大量的在线文档(参见资源)以及更广泛、更活跃的用户和开发者社区。因此,让我们看看如何开始使用 Inkscape 制作矢量图形。
Inkscape 主窗口(如图 2 所示)非常拥挤。主菜单正下方是一排最常用命令的快捷方式,后面是一个依赖于绘图工具的控制栏。如果您需要与其他用户合作,不仅共享文本,还共享图形信息,请启动 Pedro Xmpp 客户端,如果您的发行版包含它及其所有依赖项,则可以在白板菜单下找到它。右上角带有扳手图标的两个方便的按钮可以快速访问 Inkscape 的全局首选项和当前文档的首选项。绘图工具映射到右侧的按钮——您可以在那里创建矩形、螺旋线、多边形、圆形、星形和任何可能形状的线条。所有这些对象都有单独的窗格和控制栏,您可以在其中设置从螺旋线中的圈数到星形中的点数的一切内容。最后,底部栏显示调色板和一些状态信息。
单击“文件→新建”后要做的第一件事是决定绘图的几何格式。有多种选择——从多个 DVD 封面到桌面壁纸——在所有标准计算机和 HDTV 分辨率以及桌面图标、名片等等。
要向绘图中添加对象,您可以选择使用左侧的形状相关工具,也可以使用铅笔、钢笔和书法工具从头开始绘制。第二组中的工具都绘制由节点定义的路径。可以使用节点工具修改现有路径,节点工具是箭头下方右侧的按钮。激活该工具后,节点显示为小菱形,可以删除或移动。要尽可能快地选择所有和仅您想要的节点,请使用鼠标滚轮。向上滚动它会选择节点,从最靠近光标的节点开始;向下滚动会取消选择它们。您还可以平滑整个路径(路径→简化),以及连接或断开它们。
用于书写或任何其他必须用鼠标或图形平板手绘的东西的工具是书法笔,它与笔尖图标相关联。有几个选项可以更改笔画的外观及其一般行为,以便获得更逼真或更个性化的外观。图 2 显示了以 0(左侧)和 1.00(右侧)的震颤值绘制的数字三。
创建或导入对象后,您可以借助 Inkscape 滤镜以多种方式修改其外观,这些滤镜可以执行诸如分形化、饱和度调整和高斯模糊等不同的操作。后者用于调整对象的模糊设置。
路径和对象可以使用布尔运算快速组合,例如交集、联合、差集、排除等等。只需选择要组合的对象,然后从“路径”菜单中选择所需的操作。图 3 和图 4 显示了当您相交一个椭圆和一个星形时得到的结果。
纯色可能很单调,您同意吗?矢量图是通过计算机指令生成的这一事实并不意味着它们的组件都必须是纯色的。要创建从对象一侧到另一侧的平滑颜色过渡(即渐变),请选择它并从“对象”菜单中打开“填充和描边”对话框。该窗口允许您应用多种渐变类型并放置相应的停止点——颜色过渡必须发生的精确起点和终点。渐变可以应用于任何对象,包括文本。
Inkscape 具有复制、粘贴和复制对象的按钮或菜单项。但是,有时您想要的是克隆。Inkscape 克隆是对象的特殊副本,可以随意移动、缩放或旋转,但仍与其链接。我们这样说的意思是,对原始对象的任何更改都会自动应用于其所有克隆。如果您按下 Shift-Alt-D,则克隆将与其祖先分离,并成为完全独立的对象。克隆可以平铺(编辑→平铺)以创建具有多种对称或伪随机布局的图案。如图 5 所示,反射、旋转、径向放置以及行和列移位只是少数可用选项。
Inkscape 中最棒的一件事是它的撤消历史记录。您不仅可以撤消对文件所做的所有更改,而且它们还以嵌套模式显示,如图 6 所示,这使得您可以更快地回到您想要的点。
Inkscape 可以将绘图或绘图的一部分转换为 PNG 位图。选择“文件→导出为位图”,并记住选择正确的分辨率;默认值为 90dpi。除了其原生的 SVG 文件格式外,Inkscape 还可以将您的杰作保存为多种特殊格式,包括 PovRay、LaTeX、封装 PostScript、Adobe Illustrator 8、AutoCAD Dxf 和 OpenDocument 绘图。
在另一方面——导入已有的图形——Inkscape 的一个非常棒的功能是能够从 LaTeX 公式生成绘图。然而,大多数人会发现“追踪”JPEG、PNG 或 GIF 图像更有用——即将它们转换为矢量格式。一些高级 Inkscape 用户甚至追踪他们从原始矢量图生成的位图。这样做的原因是,不可避免的退化可能正是使您的作品看起来更逼真所缺少的。
通常,如果起始位图很简单,则追踪版本会非常好。理论上可以追踪像照片这样复杂的东西,但在实践中,该过程通常非常复杂,以至于它会大大减慢 Inkscape 的速度,或者干脆使其停止,具体取决于计算机。话虽如此,使用 Inkscape 追踪位图的方法有很多种。要尝试它们,请导入位图,选择它,然后单击“路径→追踪位图”。在追踪窗格中,您将能够生成一个或多个矢量路径,例如,从原始图像的颜色或亮度级别开始。
带有大写字母 A 的大按钮允许您创建文本对象。到目前为止,这没什么特别的。然而,真正伟大的是使文本沿着任何线条的可能性(图 7)。在按住 Shift 键的同时选择文本和线条,然后在顶部菜单中选择“文本→放置到路径上”。
就字体而言,Inkscape 可以使用计算机上可用的任何字体。因此,如果您不小心,您的 SVG 文件将不可移植。真正的解决方案是仅使用在所有平台上都可用的字体,用于您需要分发的所有文件。当这不可能时,例如当文本是只能使用公司批准的字体的公司标语时,您可以将其转换为矢量路径(路径→对象到路径)。请注意,这会增加文件大小,最重要的是,这是一个单向过程。显而易见的解决方法始终是保留一个带有实际文本的主副本,并仅分发带有路径的副本。
句子在图形中所占的空间量因书写语言而异。我们已经提到 SVG 的一个巨大优势是它可以自动生成或处理。将这两个事实结合起来,很容易看出您可以以最小的努力生成和维护同一横幅、图表或任何其他包含文本的图形的多个版本,每个版本都使用不同的语言。唯一要记住的是始终在文本周围留出足够的空间,以确保它适合任何语言。之后,按照“创建国际图形”网页上描述的步骤操作(请参阅资源)。
SVG 标准是可扩展标记语言 (XML) 的另一个应用。如果您在命令行或任何文本编辑器中查看使用 Inkscape 创建的文件,您会发现的不是难以理解的二进制序列,而是类似这样的内容
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg
以及许多其他非常冗长但纯 ASCII 文本——非常难看但仍然可以在紧急情况下手动编辑或通过脚本处理。如果您有很多徽标和剪贴画文件,所有文件都带有您公司的名称和官方颜色,然后名称或颜色发生变化怎么办?如果所有文件都是 SVG 格式,您只需使用 awk、sed、Perl 或任何其他脚本语言替换正确的字符串即可。要在 Inkscape 中的单个文件中执行相同的操作,请单击 <> 括号按钮或按 Shift-Ctrl-X 启动 Inkscape XML 编辑器。图 8 显示了“Linux is a Shining Star”名片的 XML 树在此编辑器中的外观。路径 # 3456 是图 7 中的椭圆/星形组合。使用此编辑器,可以更改当前文件中的几乎任何内容,包括 SVG 功能,这些功能仍然没有图形工具。使用编辑器的另一个原因是,您在其中所做的每一项更改都会立即应用于主 Inkscape 窗口中的实际图形。说到结构化文档,在 Inkscape 中选择“文件→文档元数据”会打开一个窗格,您可以在其中设置 Dublin core 实体或当前文件的许可证。
虽然 Inkscape 显然主要用作 GUI 应用程序,但它也可以用于在命令行上进行 SVG 处理。以下是一些直接来自手册页的示例
inkscape filename.svg -p '| lpr'— 打印 SVG 文件。
inkscape filename.svg --export-png=filename.png— 将 SVG 文件导出为 PNG。
inkscape filename.svg --export-eps=filename.eps --export-text-to-path— 将 SVG 文档转换为 EPS,将所有文本转换为路径。
inkscape --query-id=zoom_in -X /usr/share/inkscape/icons/icons.svg— 在 Linux 系统上的默认图标文件中查找放大图标的 x 位置。
inkscape filename.svg --query-width --query-id text1555— 查询 id=``text1555'' 的对象的宽度。
本文的屏幕截图和文本指的是 SUSE 10.1 上的 Inkscape 0.45。官方 Inkscape 路线图告诉我们,在不久的将来,最有趣的事情应该是版本 0.47 中的 PDF 导入/导出和 Visio 支持,随后是在 Inkscape 0.48 中创作简单的动画。版本 0.50 应包括 SVG Mobile 支持。该计划还包括将显示引擎的部分切换到 Cairo,直到 Inkscape 可以使用该库的硬件加速后端为止。正如您所见,有很多理由今天就尝试 Inkscape,并在未来几个月内密切关注它。
资源
使用 XML 创建高端 2-D 图形: luxor-xul.sourceforge.net/talk/jug-nov-2002/slides.html
Cairo: cairographics.org
Librsvg: librsvg.sourceforge.net
Figurine: figurine.sourceforge.net
Dia: www.gnome.org/projects/dia
Karbon: www.koffice.org/karbon
Inkscape: www.inkscape.org
Inkscape 源代码架构: inkscape.org/doc/architecture.png
Inkscape Wiki: wiki.inkscape.org/wiki/index.php/Inkscape
Inkscape 用户文档: inkscape.org/doc/index.php
Inkscape 用户手册: www.angelfire.com/mi/kevincharles/inkscape/index.html
Inkscape 指南: tavmjong.free.fr/INKSCAPE/MANUAL/html/index.php
Inkscape 路线图: wiki.inkscape.org/wiki/index.php/Roadmap
如何使用 Inkscape 的新模糊滤镜: www.redhatmagazine.com/2007/02/27/the-open-palettehow-to-use-inkscapes-new-blur-filter
创建国际图形: andy.brisgeek.com/archives/45
字体轮廓化: ruphus.com/blog/2006/05/19/five-steps-of-inscape-outlining-fonts
Inkscape 文本技巧: www.ffnn.nl/pages/articles/media/inkscape-text-tricks.php
矢量剪贴画集: www.clipartlab.com
Marco Fioretti 是一位硬件系统工程师,对自由软件作为 EDA 平台和作为 RULE 项目的现任负责人,作为高效桌面都感兴趣。Marco 与家人住在意大利罗马。