将矢量数据导入 Illustrator

平面设计 adobe-illustrator 向量 svg 插画脚本 每股收益
2022-02-05 03:54:50

我有一个程序可以生成数千个矢量点(只是坐标),格式不固定,但可能是这样的:

(2.4785|77.01)
(78.8|9.88)
(45.33|0.2)

我能够以任何必要的方式格式化/转换这个坐标。

我的问题是:如何将这些坐标数据作为矢量点导入到 Illustrator 中,以便我可以正确使用它们(给它们一个笔划,缩放它们等)。

结果可能是这样的,但这是像素数据。我想要类似的东西,只是作为一个向量。

编辑:每个坐标应该导致在 Illustrator 中呈现一个点/圆,所以也许每个坐标应该在 Illustrator 中制作成一条具有相同开头和结尾的线?

在屏幕截图中有点难以看到,但线条实际上由许多单独的点组成,这些点并不总是相互接触。

我用一点java代码生成了点坐标,如果有人对此感兴趣,请PM我。

解决方案: Jackson Hyde 在他的回答中建议将 SVG 作为一种可能的格式,结果证明效果很好。我只是生成这个 SVG 文件,然后将其导入 Illustrator。在那里我可以选择所有点并添加笔画并做一些其他花哨的事情。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
     version="1.1" baseProfile="full"
     width="20px" height="20px">

<line x1="15.23" y1="2.25" x2="15.23" y2="2.25" />
<line x1="8.1234" y1="7.85" x2="8.1234" y2="7.85" />
[...]

</svg>
3个回答

作为SVG的替代方案,您可以生成EPS文件,它比SVG不那么冗长,并且警告更少。这是一个快速介绍:

http://paulbourke.net/dataformats/postscript/

产生 EPS

EPS 是一种框架形式的 postscript,旨在包含在其他 postscript 作业/桌面发布应用程序中。为了处理这个问题,它需要一个标题来定义边界框等。标题如下所示:

%!PS-Adobe-3.0 EPSF-3.0 
%%BoundingBox: 0 0 100 100
%%Title: Demo for GD.SE
%%Creator: Janne Ojala 
%%CreationDate:  2014-06-23
%%EndComments

由于 illustrator 是一个 postscript 引擎,因此 Illustrator 严格不需要此信息。不过,您可能希望包含它,以便可以在没有 illustrator 的情况下按原样使用该文件。使用标题还可以更轻松地在 illustrator 中使用。边界框定义你的作品的大小,坐标左下,右上。

接下来,您需要轻松处理数据,您可能需要添加一个简单的例程来绘制单个点:

/P {newpath 1 0 360 arc fill} def %draw circle with radius of 1

现在您只需要按如下方式定义每个点:

15.23 2.25 P
8.1234 7.85 P
...

最后你的 eps 需要一个像这样的结束标记

%%EOF

完毕。一般来说,EPS 是最容易生成的格式之一,您实际上可以通过遍历数组、文件或二进制数据来省略所有 P 调用,但暂时不要这样做。

工作流程

这是一个技巧,您可以在开发EPS文件时使用它来可视化数据。毕竟有些事情可能会出错,并且获得一些反馈很有用:

  • EPS文件放入 Illustrator

现在,每次您编辑EPS文件并跳回 Illustrator 时,它都会询问您是否要更新。如果单击“是”,您将获得即时反馈,如果出现错误,您将获得空白图像。准备好后,您可以扩展它。

其他资源

  1. 网上后记2参考
  2. Ghostscript 一个软件 postscript 引擎,用于调试、转换为PDF等。

EPS 中的替代功能

该功能可以替换为:

1 setlinecap
/P {newpath moveto 0 0 rlineto stroke} def

对于同一种 0 尺寸线的方法。你可以添加一个:

1 -1 scale 

并对左上角的测量方向使用负边界框。


其他格式

除了EPSSVG之外,另一种简单的传输格式是DXFDXF规范可以在这里找到

在这种特定情况下,PDF 也相对容易生成。最简单的方法是用 acrobat 或 ghost 脚本提取EPS 。生成数据表和校验和是一些额外的工作,但除此之外,它几乎与生成 EPS 文件一样简单。PDF规范可以在这里找到:

手动制作的 pdf示例,它使用与包含 2 个演示点的EPSSVG答案中描述的相同的想法。搜索(如果您将其粘贴到将PDF% graphics here for the relevant section设置为扩展名的文本文件中,它应该可以正常工作)。

PDF的问题是为 XREF 表生成部分的长度,手动操作有点痛苦。这就是我在这种快速情况下避免使用PDF的原因。当然,如果PDF只有一页,adobe 将忽略标签。因此,忽略那些您可能会生成一个技术上不正确的PDF文件,但仍然可以正常工作。可以在这里找到利用这种现象的有趣示例。

我能想到的最简单的方法是格式化您的应用程序以输出SVG Formatted ImageIllustrator 可以通过多种方式处理 SVG 图形。

值得注意的是,在您的图像中,您显示的不仅仅是一团点。看起来您的点要么随着时间的推移而改变(以产生“轨迹”效果),要么被连接以创建路径。仅输出坐标云不会复制此效果,您需要使用SVG 坐标规范(特别是坐标变换)。

由于此问题中的数据已经在程序中可用,因此使用编程接口也可能有意义,这回避了对文件的需求。

使用 COM 进行编程访问

COM 是一种 Windows 技术,它允许几乎任何编程语言直接与现有的 Windows 应用程序交互。Adobe 将此称为 VB API,但在大多数通用语言(如 C、C++、Python 等)中只需稍作修改即可使用。它也内置于 .Net 语言中。例如,使用 comtypes 模块的python 源代码(对于 win32com 替代方案,请参见此处)将如下所示:

import comtypes.client

# following call is slow to instantiate the first 
# time you run it on a new machine as it builds the API
appObj = comtypes.client.CreateObject("Illustrator.Application")  
docObj = appObj.Documents.Add()
docObj.DefaultStrokeCap = 2 # round

POINTS = [
    (15.23, 2.25),
    (8.1234, 8.1234)
    #... or whatever database call you want
]

for point in POINTS:
    pathItem = docObj.PathItems.Add()
    pathItem.SetEntirePath( (point, point) )

就是这样,使用任何你想要的语言,这样可以避免你将数据转储到中间格式。API 说明可在以下位置找到:

好处

  • 无需中间文件
  • 可以在您现有的代码库中工作
  • 您可以插入符号而不是点

缺点

  • 仅适用于 Windows。
  • COM 一开始可能很难学习,但值得努力。
  • 与EPS相比,需要机器上的 Illustrator 副本

使用 Adob​​e 的 javaScirpt 引擎

使用 Adob​​e 的扩展可以使用 javaScript 完成同样的事情。代码如下所示:

docObj = app.documents.add()
docObj.defaultStrokeCap = StrokeCap.ROUNDENDCAP

POINTS = Array(
        Array(15.23, 2.25),
        Array(8.1234, 8.1234)
    );

for (i in POINTS){
        pathItem = docObj.pathItems.add();
       pathItem.setEntirePath( Array(POINTS[i], POINTS[i]) );
}

这与 python COM代码几乎相同。

好处

  • 您可以插入符号而不是点
  • 适用于所有平台

缺点

  • javaScript 仍会以某种方式需要数据
  • 需要 Illustrator 在机器上的副本。