计算PHP中的SVG路径长度,如JS中的getTotalLength()

计算PHP中的SVG路径长度,如JS中的getTotalLength(),php,math,svg,Php,Math,Svg,我试图通过一个PHP脚本修改SVG文件,有一次我需要计算一些path元素的长度 在JavaScript中,有一个方便的函数.getTotalLength(),但我无法找到一个提供类似功能的SVG PHP解析器,因此我想我必须手动解析d-属性并计算路径 加载XML、获取属性等都不是问题,但我不太擅长数学,尤其是向量领域。让我们举一个例子: <path d="m 268.87448,476.05362 c -25.0135,11.49888 -35.53725,21.39636 -29.148

我试图通过一个PHP脚本修改SVG文件,有一次我需要计算一些path元素的长度

在JavaScript中,有一个方便的函数
.getTotalLength()
,但我无法找到一个提供类似功能的SVG PHP解析器,因此我想我必须手动解析
d
-属性并计算路径

加载XML、获取属性等都不是问题,但我不太擅长数学,尤其是向量领域。让我们举一个例子:

<path d="m 268.87448,476.05362 c -25.0135,11.49888 -35.53725,21.39636 -29.14819,47.61221 -0.79153,89.53821 7.5531,195.5936 -11.71546,284.63588 -24.02796,67.23588 -51.61983,89.1027 -112.32477,124.52935 0,0 -38.977804,16.40902 -54.19931,20.52688" />

我首先要做的是将路径按空格分解,然后遍历结果,然后检查它是字母还是数字,并采取相应的行动。这就是我被困的地方,我甚至不知道如何开始


我已经在-上阅读了SVG路径规范,但仍然无法理解数字运算。

路径不一定是空格分隔的,例如3-1是有效的,是坐标3-1。是的,也考虑过这一点,但现在不重要。我正在创建初始SVG,可以确保格式是空间分隔的。一旦计算完成,我仍然可以修改它以将其考虑在内(例如,通过逐个字符解析)。但对其他读者来说,这是一个很好的观点。我认为这个问题太宽泛了,路径中有很多不同的东西,计算其中一个非琐碎的东西的长度本身就是一篇文章。这里有一个C++的解决方案,是的,我可以想象它不是那么微不足道的…如果对PHP SVG解析器库的任何提示与JS的
.getTotalLength()
的内置函数相同,并且假设存在这样的库,而我只是无法找到它,那么我们也会欣赏并接受它作为答案。这基本上是您需要做的: