17a*_*ing 5 html graphics svg vector inkscape
我是矢量编辑世界的新手。我正在尝试从 .AI 文件导出 .SVG 文件。但是,当我导出它时,在生成的文件中出现以下错误:
Error on line 57 at column 354: Namespace prefix inkscape for cy on namedview is not defined
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这是什么意思,我该如何解决?
我当然希望他们最终能解决这个问题。值得称赞的是,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 中执行“另存为 Plain”是现在获得精确的干净 SVG 的最快方法(尽管 InkScape 确实警告说 Plain 可能会丢失某些类型的数据)。]
修复 SVG 代码。菲利普的解决方案似乎是真正修复最新文件中当前损坏的内容而不丢失(很多?)精度/信息的最佳方法。在 Notepad++ 中,我可以用任何东西替换这个正则表达式:inkscape:[^"]+"[^"]+"或者,更安全地,inkscape:(export-|connector-curvature)[^"]+"[^"]+". 将副本保存为 SVG 并手动识别和修复问题后,Illustrator 就可以打开 SVG 文件,这样您就可以将有问题的元素复制/粘贴回 AI 文件中并解决问题。呼。
注意:无需查看任何 SVG 代码即可手动识别“坏”元素的方法是将内容分解为画板,另存为 SVG,然后查看哪些无法打开。一旦您知道了这一点,您就可以使用上面的解决方法之一来替换这些部分(因为您仍然会失去这些部分的精度)。
尝试使用文本编辑器打开您的 SVG 文件:您将看到一些带有 inkscape 命名空间的 XML 属性,例如
inkscape:label="Some label"
Run Code Online (Sandbox Code Playgroud)
这些属性可能来自原始 SVG 文件(我猜你是从 Wikipedia 中获取的?)。您可以安全地将它们全部删除 - 也许在文本编辑器中使用 grep 查找和替换,例如:
find inkscape:label="[^"]*" replace with ""
Run Code Online (Sandbox Code Playgroud)