0

我需要能够创建一个带有单个文本字段的文本字段的 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 文件发送给某人,他们也将需要该图像。所以它并没有真正嵌入。

4

1 回答 1

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 规范中看到任何关于嵌入式数据的提及,所以我不知道它会如何进行。

于 2015-07-23T03:48:45.707 回答