【问题标题】:Convert SVG polygon to an open curve将 SVG 多边形转换为开放曲线
【发布时间】:2015-05-14 12:47:37
【问题描述】:

让我们考虑下面这张简单的 SVG 表示图(运行代码 sn-p 将显示它):

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" height="200" width="200">
  <g>
    <path d="m 90.200184,21.865233 13.886726,0 0,91.406257 q 0,8.4375 -4.306646,11.86524 -3.7793,2.72461 -13.35938,2.72461 -10.37109,0 -18.19336,-1.05469 l -2.46094,-13.53516 q 11.07422,2.02148 18.45704,2.02148 5.97656,0 5.97656,-5.97656 l 0,-87.451177 z"/>
  </g>
</svg>

SVG 路径实际上是形状周围点的集合,而它可能是一个简单的自上而下的倾斜曲线(红线 here)。很遗憾,我收到了这些图片,但无法更改它们。

我正在寻找一种将 SVG 多边形转换(或者说近似)为 SVG 开放曲线的方法。,直接或分步进行。

欢迎任何解决方案,但我更喜欢这个顺序:

  1. 以编程方式(以便我可以编写脚本);
  2. 使用 Inkscape 或 GIMP(或任何其他 Linux 程序);
  3. 好吧,任何可行的方法。

谢谢,

【问题讨论】:

    标签: svg vector-graphics gimp inkscape


    【解决方案1】:

    不就是把结束的z从路径中删除那么简单吗?

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" height="200" width="200">
      <g>
        <path d="m 90.200184,21.865233 13.886726,0 0,91.406257 q 0,8.4375 -4.306646,11.86524 -3.7793,2.72461 -13.35938,2.72461 -10.37109,0 -18.19336,-1.05469 l -2.46094,-13.53516 q 11.07422,2.02148 18.45704,2.02148 5.97656,0 5.97656,-5.97656 l 0,-87.451177"/>
      </g>
    </svg>

    或者您正在寻找比这更复杂的东西?

    显然,删除结束 z 很容易用您选择的编程语言编写脚本。

    【讨论】:

    • 不完全是,因为我仍然会在形状周围保留轮廓而不是线条。基本上,我想要得到的,就是这张图上的红线:imgur.com/7kzi4Lp
    • 对于任意路径来说,这将是困难的,如果不是实际上不可能的话。 (当然,除非你愿意深入研究机器视觉算法。)
    【解决方案2】:

    这类算法通常被称为寻找“骨架”或“中轴”。如果您搜索这些术语,您会发现描述不同潜在方法的论文和其他文档。不过,许多/大多数通常都涉及从位图开始。

    https://en.wikipedia.org/wiki/Topological_skeleton

    【讨论】:

    • 非常感谢。出于某种原因,我没有考虑过骷髅。
    猜你喜欢
    • 2023-03-20
    • 2013-04-21
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多