2012-06-16 53 views
2

至少在WebKit中的SVGPath.getBBox()实现看起来有些粗劣;有没有比步行路径更好(更便宜)的方法,或者手动计算其可能的边界框,以获得良好的读数?SVG:获取路径的精确边界框?

http://bl.ocks.org/2939938(或https://gist.github.com/2939938)显示了后者的一个示例,当我在几个不同的相当现代的浏览器中运行它时,本地实现中存在显着的变化。 Opera是最好的,火狐好和Chrome/Safari浏览器目镜尤其糟糕:

616.1572 677.0540 127.6856 126.8793 - sampled, gathering random coords for 5s (reference) 
616.1569 677.0538 127.6860 126.8796 - opera 11.64 build 1403 
616.1563 677.0547 127.6875 126.8789 - firefox aurora 15.0a2 (2012-06-15) 
614.2805 673.9761 136.2089 129.9573 - chrome canary 21.0.1176.0 
614.2805 673.9761 136.2089 129.9573 - safari 5.1.7 (7534.57.2) 

或者,从百分比参考边框左边/顶部/宽度/高度变化:

0.00005% 0.00003% 0.00031% 0.00024% - opera 
0.00015% 0.00010% 0.00149% 0.00032% - firefox 
0.30458% 0.45460% 6.67522% 2.42593% - chrome 
0.30458% 0.45460% 6.67522% 2.42593% - safari 
+0

如果您指定了要使用边界框的内容以及您正在分析哪种路径,这可能有助于我们提出合适的解决方案或更好的近似值。 –

+0

目前我的主要兴趣是为单个路径元素SVG:s导出精确的'viewBox'属性,如链接示例中所示,它完美地适合图形,使其无需裁剪或额外填充即可进行缩放。 – ecmanaut

回答

1

原来Raphael.js实现了一个相当出色的Raphael.pathBBox,对于您具有<path>元素的情况;它在代数上看起来确切,而且速度很快。添加到比较测试页面。

+0

根据你在你的问题中链接的代码,Firefox的原生getBBox现在和Raphael一样精确,尽管Chrome仍然有几个像素关闭。 – Yay295