我是矢量编辑领域的新手。我正在尝试从 .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 文件(我猜你是从 Wikipedia 获取的?)。您可以安全地删除它们——也许在您的文本编辑器中使用 grep 查找和替换,例如:
find inkscape:label="[^"]*" replace with ""
我当然希望他们最终能解决这个问题。值得 Adobe 称赞的是,这个问题的原因是 Illustrator 试图保留它不使用的信息,以便与其他程序配合使用。
有几种解决方法。
使用 InkScape 另存为纯 SVG。如果您事先了解问题,并且可以在导入 AI 之前简单地从 InkScape 保存一份普通副本,这将非常有效。或者,如果您事先不知道,但不介意重新开始并重新调整从 InkScape 导入后更改的任何“坏”元素,您可以从 InkScape 保存为普通元素,然后拉入并重新调整这些元素有问题的元素。但是,如果您想进行后处理而不是修复 AI 文件(请参阅 Chip 的回答),最快且破坏性最小的选项可能是使用正则表达式(正则表达式,见下文)而不是使用 InkScape。
导出为 SVG。最新版本的 Illustrator 现在允许您导出为 SVG,以替代保存副本/另存为。即使存在最初来自 InkScape 的元素,这也会生成一个 Chrome 和 InkScape 都能够打开的文件,而两者都无法打开我使用“保存副本”创建的无效文件。警告:在我非常小的比例(16 像素高的图标)中,这种“网络优化”导出明显丢失了信息/精度——即使精度为小数点后 5 位——尽管它确实消除了严重错误。
[更新:保存副本/另存为 SVG 现在是可行的。我刚刚升级了这两个程序,似乎 InkScape 现在能够打开由 Illustrator 创建的无效文件,尽管 Chrome 和 Illustrator 仍然不能。我希望这意味着从 Illustrator 中执行另存为,然后从 InkScape 中执行另存为纯格式是现在获得一个干净且精确的 SVG的最快方法(尽管 InkScape 确实警告说纯格式可能会丢失某些类型的数据)。]
修复 SVG 代码。Philippe 的解决方案似乎是真正修复最新文件中当前损坏的内容而不会丢失(很多?)精度/信息的最佳方法。在记事本++中,我可以用任何东西替换这个正则表达式: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 文件进行后期处理。