我需要能够创建一个带有一个文本字段的文本字段的Illustrator文件,有时候,如果可能的话,还可以创建一个图像。
看起来AI文件是二进制的,我不知道怎么写。我可以更轻松地编写文本文件,看起来FXG或SVG是Illustrator可以导入的可接受文件格式。
可以在FXG中嵌入图像吗?
更新
作为我正在寻找的内容的一个示例,从Illustrator导出的SVG文件包含嵌入的图像数据:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="612px" height="792px" viewBox="0 0 612 792" enable-background="new 0 0 612 792" xml:space="preserve">
<image overflow="visible" width="400" height="324" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFECAIAAACGcv+iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
5kJj2am9CGtYTDfOXIL81TzGme8Nc1GyHoMINW8faYbMEGfdIx918P8KMABYSjb4P5vsjAAAAABJ
RU5ErkJggg==" transform="matrix(1 0 0 1 60 34)">
</image>
<text><tspan x="0" y="0">text</tspan></text>
</svg>
注意:并非所有图像数据都是如此。我把大部分都删掉了。
这是从Illustrator导出到FXG的相同文件:
<Graphic version="2.0" viewHeight="792" viewWidth="612" ai:appVersion="15.1.0.39" ATE:version="1.0.0" flm:version="1.0.0" d:using="" xmlns="http://ns.adobe.com/fxg/2008" xmlns:ATE="http://ns.adobe.com/ate/2009" xmlns:ai="http://ns.adobe.com/ai/2009" xmlns:d="http://ns.adobe.com/fxg/2008/dt" xmlns:flm="http://ns.adobe.com/flame/2008">
<Library/>
<Group ai:seqID="1" d:layerType="page" d:pageHeight="792" d:pageWidth="612" d:type="layer" d:userLabel="Artboard 1">
<Group ai:seqID="2" d:type="layer" d:userLabel="Layer 1">
<BitmapImage x="60" y="34" scaleX="1.4" source="@Embed('/images/myimage.png')" fillMode="clip" ai:seqID="3"/>
<RichText x="53" y="28.9253" fontFamily="Andale Mono">
<content><p><span>text</span></p></content>
</RichText>
</Group>
</Group>
<Private>
<d:FontMap>
<d:Map fontFamily="Andale Mono" fontStyle="normal" fontWeight="normal" postScriptName="AndaleMono"/>
</d:FontMap>
</Private>
</Graphic>
在这种情况下,文件未嵌入。但是嵌入它的编译器指令。如果将此FXG文件发送给某人,他们也需要该图像。所以它并没有真正嵌入。
答案 0 :(得分:1)
看起来没有正式的方法来嵌入图像数据。有一个指向文件位置的指令,但不一样:
<BitmapImage source="@Embed('location/of/file.png')" />
但我意识到应用程序会读取文件,确定它对提供的信息的作用。
我的意思是我可以用与编码到SVG相同的方式对图像进行编码,并将该数据写入FXG XML。应用程序可以使用该数据。
例如,我可以将BitmapData标记添加到Library标记并将图像数据保存在那里:
<Graphic>
<Library>
<BitmapData id="myimage" data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFECAIAAACGcv+iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
5kJj2am9CGtYTDfOXIL81TzGme8Nc1GyHoMINW8faYbMEGfdIx918P8KMABYSjb4P5vsjAAAAABJ
RU5ErkJggg==">
</BitmapData>
</Library>
<Group>
<BitmapImage x="60" y="34" scaleX="1.4" source="{myimage}" fillMode="clip" ai:seqID="3"/>
</Group>
</Graphic>
应用程序可以使用它。由于我没有在FXG规范中看到过任何关于嵌入数据的提及,我不知道它会有多好。