【发布时间】:2021-06-18 08:47:39
【问题描述】:
给定一个 SVG(包含单个路径对象),我想将路径分成 n 个等长的段。返回值应该是光栅化 svg 中 (n+1) 点 (x, y) 坐标的列表,指示每个段的结束
例子:
给定 SVG:(此示例只有直线,但该解决方案必须适用于所有类型的路径,包括三次和二次贝塞尔曲线)
<svg height="210" width="400">
<path d="M150 0 L75 200 L225 200 Z" fill="none" stroke="black" stroke-width="4" />
</svg>
呈现为
预期输出:以左下角为原点的每个红点的坐标。 SVG 总是以 width=100px 呈现
我正在使用python和svgpathtools,我该如何实现?
我的方法:
- 看看 SVG 光栅化器。看看他们如何处理路径。我查看了this,但遗憾的是无法很好地理解代码以自己实现它
- 将
stroke-dasharray添加到我的路径。stroke-dasharray将自动将连续笔划“分解”成相等大小的段。然后光栅化这个修改后的 SVG,然后使用 OpenCV 之类的东西来聚类渲染的笔画。然后找到这些簇的中点来得到答案。由于涉及多个缓慢的过程(光栅化+集群),这种方法非常慢。如果路径与自身交叉(无穷大符号),它也不是很灵活,因为stroke-dasharray也会相交,给出一个奇怪的交叉点 - 我查看了this question,但我不确定在 SVG 始终以宽度 = 100px 呈现(高度根据 SVG 的纵横比自动计算)的情况下这将如何工作,此外,这里提到的方法是据说“慢”。此外,我不确定这个链接的问题是否让我“在”路径上点或 svg 路径的控制点
虽然方法 2 适用于许多图像,但我当然不想这样做,因为它非常慢。有更好的方法吗?
【问题讨论】:
标签: python svg vector-graphics