Illustrator SVG导出无法工作(未定义命名空间前缀inkscape)



我是矢量编辑领域的新手。我正在尝试从.AI文件导出一个.SVG文件。然而,当我导出它时,我在生成的文件中得到以下错误:

Error on line 57 at column 354: Namespace prefix inkscape for cy on namedview is not defined 

有人能告诉我这意味着什么以及我该如何解决吗?

尝试使用文本编辑器打开SVG文件:您将看到一些带有inkscape名称空间的XML属性,例如

inkscape:label="Some label"

这些属性可能来自原始的SVG文件(我猜你是从维基百科上获得的?)。你可以安全地将它们全部删除——也许可以在你的文本编辑器中使用grep查找和替换,比如:

find inkscape:label="[^"]*" replace with ""

我当然希望他们最终能解决这个问题。值得称赞的是,这个问题的原因是Illustrator试图保留它没有使用的信息,以与其他程序配合得很好。

有几种变通办法。

  1. 使用InkScape另存为普通SVG。如果你事先知道这个问题,并且在导入AI之前可以简单地从InkScape中保存一个普通副本,那么这个方法效果很好。或者,如果你事先不知道,但不介意重新开始并重新处理从InkScape导入后更改的任何"坏"元素,那么你可以从InkScape中保存为普通副本,然后插入并重新调整这些有问题的元素。然而,如果你想进行后处理而不是修复AI文件(请参阅Chip的答案),最快、破坏性最小的选择可能是使用正则表达式(regex,请参阅下文),而不是使用InkScape。

  2. 导出到SVG。Illustrator的最新版本现在允许您导出到SVG,作为保存副本/另存为的替代方案。即使有最初来自InkScape的元素,这也会生成一个Chrome和Inkscap都可以打开的文件,而这两个文件都无法打开我使用保存副本创建的无效文件。警告:在我非常小的范围内(16像素高的图标),这种"网络优化"导出明显丢失了信息/精度——即使是5位小数的精度——尽管它确实消除了关键错误。

  3. [更新:保存副本/另存为SVG现在是可行的。我刚刚升级了这两个程序,看起来InkScape现在可以打开Illustrator创建的无效文件,尽管Chrome和Illustrator仍然不能。我希望这意味着从Illustrator中保存为,然后从Inkscap中另存为纯SVG是现在获得干净SVG的最快方法也是精确的(尽管InkScape确实警告Plain可能会丢失某些类型的数据)。]

  4. 修复SVG代码。Philippe的解决方案似乎是真正修复最新文件中当前损坏的内容而不丢失(很多?)精度/信息的最佳方法。在Notepad++中,我把这个正则表达式什么都不用:inkscape:[^"]+"[^"]+",或者更安全地说,inkscape:(export-|connector-curvature)[^"]+"[^"]+"。一旦您将副本保存为SVG并手动识别并修复了问题,Illustrator就可以打开SVG文件,这样您就可以将有问题的元素复制/粘贴回AI文件中,并将问题解决。

注意:在不查看任何SVG代码的情况下识别"坏"元素的手动方法是将其分解为艺术板,保存为SVG,并查看哪些不能打开。一旦你知道了这一点,你就可以使用上面的一种变通方法来替换这些零件(因为你仍然会失去这些零件的精度)。

Inkscape允许您将文件保存为普通文件。这将删除Inkscape引用。还有一种用于批处理工作的命令行(bash)方法。

for i in *.svg; do inkscape -z -f $i -l $i; done

这可以对从Illustrator创建的"另存为"SVG文件执行(此时Illustrator不导出SVG)。我还没有弄清楚如何在Illustrator文件中找到引用。现在,我一直在处理所有Illustrator创建的SVG文件。

相关内容

  • 没有找到相关文章

最新更新