【问题标题】:Understanding parsing SVG file format理解解析 SVG 文件格式
【发布时间】:2018-06-01 16:09:22
【问题描述】:

首先,gist here

要点中的 Map.svg 是我正在使用的原始地图,它来自 wikimedia commons。

现在,在原始 svg 中,德克萨斯州东部成本有一块土地。我使用 Inkscape 删除了它,它以一种奇怪的新方式重新编写了路径。差异包含在要点中。

现在这种编写路径的新方法破坏了我的解析器逻辑,我正试图了解发生了什么。我希望这里有人知道更多关于我所做的 SVG 文件格式的信息。我承认我没有通读整个 SVG 标准规范,但是我读过的部分没有提到任何关于缺少命令或相对坐标的内容。然后我可能一直在看不正确的规格,不确定。

按照我的理解,SVG 路径数据非常简单,如下所示:

(M,L,C)[point{n}] .... [Z] 然后重复恶心

现在我要理解的部分是这个新的 Inkscape 已经写出了看起来像相对坐标的东西,没有像 L 这样的命令,或者 L 以某种方式被暗示。我的直觉告诉我这里发生的事情对某人来说是显而易见的。值得我用 C 进行解析。

【问题讨论】:

  • 大写路径命令是全局的,小写是相对的。

标签: c image svg


【解决方案1】:

如果您正在解析 SVG,为什么不查看 SVG 规范?

在给定的 (x,y) 坐标处开始一个新的子路径。 M(大写)表示后面跟着绝对坐标; m(小写)表示后面跟着相对坐标。如果 moveto 后跟多对坐标,则后续对将被视为隐式 lineto 命令。

发件人:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataMovetoCommands

你说,

按照我的理解,SVG 路径数据非常直接,类似于:(M,L,C)[point{n}] .... [Z]

我不知道你从哪里得到这些信息。停止从该来源获取您的信息。

我承认我没有通读整个 SVG 标准规范...

没有人阅读整个规范。只需专注于您目前正在实施的部分。您也可以从 SVG Tiny 开始,暂时使用该子集。

路径语法是您在编写解析器时应该开始的地方。如果你看不懂,那就买一本关于编译器的书。

路径语法:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataBNF

【讨论】:

  • 谢谢,现在我知道我正在查看正确的源材料。我认为隐含的 line-tos 是正在发生的事情的关键。谢谢!
  • 我并不是要暗示我根本没有看规范,我只是想说我一定错过了一些东西,因为我知道我错过了关于隐式 line-tos 的部分
  • @slf:W3C 规范(和其他规范,就此而言)是相当令人生畏的野兽。您需要一些时间来适应它们才能导航它们。
猜你喜欢
  • 2019-05-19
  • 2019-11-28
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多