如何减少任意SVG路径的坐标计数,而不损失太多或任何精度?

如何减少任意SVG路径的坐标计数,而不损失太多或任何精度?,svg,simplification,Svg,Simplification,最近,我在网络上搜寻工具、程序、实用程序、支持库和代码原语,这些工具、程序、实用程序和代码原语有助于优化SVG以实现简单性、空间性和优雅性,可以链接到from,但还没有找到好的原语,它们专注于如何减少路径的坐标数,而不会损失太多(或者说任何)精度 举个例子(),它的这个标记增强版本非常清楚地展示了减少其bèzier数量的许多希望,给出了一些工具来进行数学计算,以使用更少的节点来生成路径,同时生成基本相同的曲线 对于更简单的多边形和多段线问题(阅读“所有直线路径”),您可以使用Douglas–Pe

最近,我在网络上搜寻工具、程序、实用程序、支持库和代码原语,这些工具、程序、实用程序和代码原语有助于优化SVG以实现简单性、空间性和优雅性,可以链接到from,但还没有找到好的原语,它们专注于如何减少路径的坐标数,而不会损失太多(或者说任何)精度

举个例子(),它的这个标记增强版本非常清楚地展示了减少其bèzier数量的许多希望,给出了一些工具来进行数学计算,以使用更少的节点来生成路径,同时生成基本相同的曲线

对于更简单的多边形和多段线问题(阅读“所有直线路径”),您可以使用Douglas–Peucker或Visvalingam算法(参见后一种算法)简单地删除对路径形状影响最小的坐标,直到您满意适合您需要的精确尺寸

我正在寻找一种等效的方法,可以注意到较大的曲线(甚至圆弧)段可以替换大量冗余的曲线中间坐标停止点,而无需进行大量手动调整。我认为一些矢量图形软件包(Adobe Illustrator,甚至可能是Inkscape?)可能会提供这样的功能(欢迎提供如何访问它们的提示!)——尽管我很想找到我们可以推荐的可编写脚本的工具,并提供如何从命令行甚至web应用程序中使用这些工具,从而为人们挤出多余的路径填充材料

作为参考,这是我最近设置的一个有趣的SVG教育和宣传噱头。所有关于它的非问题主题讨论最好在那里进行,和/或在上面链接的github存储库中进行。保持出色!:)

可以使用简化多段线或多边形路径


在Inkscape中,您有菜单项Path=>Simplify。也许你可以挖掘用于此功能的代码。这是一个真实的问题,还是一个伪装的广告?@gamealchest我想要更好、更容易找到和使用的解决方案来解决这个复杂的问题。据我所知,将问题维基化以删除我想在何处发布强答案的上下文可能更符合堆栈指南,但可能要付出更大的努力来拒绝过于简单的答案,比如只使用一组线性插值点的路径的特例Ramer–Douglas–Peucker算法。问题中已经说明了这一点,但感谢图像示例简洁地演示了其工作原理。使问题复杂化的是,SVG路径在基本体级别实际上是三次样条曲线,而不是多段线/多边形,并且结果的简洁近似需要重新创建一些三次样条曲线,以接近它们所具有的表达简洁性,尽管控制点不同。